MRPT
2.0.4
|
kd-tree index
Contains the k-d trees and other information for indexing a set of points for nearest-neighbor matching.
The class "DatasetAdaptor" must provide the following interface (can be non-virtual, inlined methods):
DatasetAdaptor | The user-provided adaptor (see comments above). |
Distance | The distance metric to use: nanoflann::metric_L1, nanoflann::metric_L2, nanoflann::metric_L2_Simple, etc. |
DIM | Dimensionality of data points (e.g. 3 for 3D points) |
IndexType | Will be typically size_t or int |
Definition at line 740 of file nanoflann.hpp.
#include <nanoflann.hpp>
Classes | |
struct | Interval |
struct | Node |
Public Types | |
typedef Distance::ElementType | ElementType |
typedef Distance::DistanceType | DistanceType |
Public Member Functions | |
KDTreeSingleIndexAdaptor (const int dimensionality, const DatasetAdaptor &inputData, const KDTreeSingleIndexAdaptorParams ¶ms=KDTreeSingleIndexAdaptorParams()) | |
KDTree constructor. More... | |
~KDTreeSingleIndexAdaptor ()=default | |
Standard destructor. More... | |
void | freeIndex () |
Frees the previously-built index. More... | |
void | buildIndex () |
Builds the index. More... | |
size_t | size () const |
Returns number of points in dataset. More... | |
size_t | veclen () const |
Returns the length of each point in the dataset. More... | |
size_t | usedMemory () const |
Computes the inde memory usage Returns: memory used by the index. More... | |
void | saveIndex (FILE *stream) |
Stores the index in a binary file. More... | |
void | loadIndex (FILE *stream) |
Loads a previous index from a binary file. More... | |
Query methods | |
template<typename RESULTSET > | |
bool | findNeighbors (RESULTSET &result, const ElementType *vec, const SearchParams &searchParams) const |
Find set of nearest neighbors to vec[0:dim-1]. More... | |
size_t | knnSearch (const ElementType *query_point, const size_t num_closest, IndexType *out_indices, DistanceType *out_distances_sq, const int=10) const |
Find the "num_closest" nearest neighbors to the query_point[0:dim-1]. More... | |
size_t | radiusSearch (const ElementType *query_point, const DistanceType &radius, std::vector< std::pair< IndexType, DistanceType > > &IndicesDists, const SearchParams &searchParams) const |
Find all the neighbors to query_point[0:dim-1] within a maximum radius. More... | |
template<class SEARCH_CALLBACK > | |
size_t | radiusSearchCustomCallback (const ElementType *query_point, SEARCH_CALLBACK &resultSet, const SearchParams &searchParams=SearchParams()) const |
Just like radiusSearch() but with a custom callback class for each point found in the radius of the query. More... | |
Public Attributes | |
Distance | distance |
Protected Types | |
typedef Node * | NodePtr |
typedef array_or_vector_selector< DIM, Interval >::container_t | BoundingBox |
Define "BoundingBox" as a fixed-size or variable-size container depending on "DIM". More... | |
typedef array_or_vector_selector< DIM, DistanceType >::container_t | distance_vector_t |
Define "distance_vector_t" as a fixed-size or variable-size container depending on "DIM". More... | |
Protected Attributes | |
std::vector< IndexType > | vind |
Array of indices to vectors in the dataset. More... | |
size_t | m_leaf_max_size |
const DatasetAdaptor & | dataset |
The dataset used by this index. More... | |
const KDTreeSingleIndexAdaptorParams | index_params |
size_t | m_size |
Number of current poins in the dataset. More... | |
size_t | m_size_at_index_build |
Number of points in the dataset when the index was built. More... | |
int | dim |
Dimensionality of each data point. More... | |
NodePtr | root_node |
The KD-tree used to find neighbours. More... | |
BoundingBox | root_bbox |
PooledAllocator | pool |
Pooled memory allocator. More... | |
Private Member Functions | |
KDTreeSingleIndexAdaptor (const KDTreeSingleIndexAdaptor< Distance, DatasetAdaptor, DIM, IndexType > &)=delete | |
Hidden copy constructor, to disallow copying indices (Not implemented) More... | |
void | init_vind () |
Make sure the auxiliary list vind has the same size than the current dataset, and re-generate if size has changed. More... | |
ElementType | dataset_get (size_t idx, int component) const |
Helper accessor to the dataset points: More... | |
void | save_tree (FILE *stream, NodePtr tree) |
void | load_tree (FILE *stream, NodePtr &tree) |
void | computeBoundingBox (BoundingBox &bbox) |
NodePtr | divideTree (const IndexType left, const IndexType right, BoundingBox &bbox) |
Create a tree node that subdivides the list of vecs from vind[first] to vind[last]. More... | |
void | computeMinMax (IndexType *ind, IndexType count, int element, ElementType &min_elem, ElementType &max_elem) |
void | middleSplit_ (IndexType *ind, IndexType count, IndexType &index, int &cutfeat, DistanceType &cutval, const BoundingBox &bbox) |
void | planeSplit (IndexType *ind, const IndexType count, int cutfeat, DistanceType &cutval, IndexType &lim1, IndexType &lim2) |
Subdivide the list of points by a plane perpendicular on axe corresponding to the 'cutfeat' dimension at 'cutval' position. More... | |
DistanceType | computeInitialDistances (const ElementType *vec, distance_vector_t &dists) const |
template<class RESULTSET > | |
void | searchLevel (RESULTSET &result_set, const ElementType *vec, const NodePtr node, DistanceType mindistsq, distance_vector_t &dists, const float epsError) const |
Performs an exact search in the tree starting from a node. More... | |
|
protected |
Define "BoundingBox" as a fixed-size or variable-size container depending on "DIM".
Definition at line 796 of file nanoflann.hpp.
|
protected |
Define "distance_vector_t" as a fixed-size or variable-size container depending on "DIM".
Definition at line 799 of file nanoflann.hpp.
typedef Distance::DistanceType nanoflann::KDTreeSingleIndexAdaptor< Distance, DatasetAdaptor, DIM, IndexType >::DistanceType |
Definition at line 747 of file nanoflann.hpp.
typedef Distance::ElementType nanoflann::KDTreeSingleIndexAdaptor< Distance, DatasetAdaptor, DIM, IndexType >::ElementType |
Definition at line 746 of file nanoflann.hpp.
|
protected |
Definition at line 787 of file nanoflann.hpp.
|
privatedelete |
Hidden copy constructor, to disallow copying indices (Not implemented)
|
inline |
KDTree constructor.
Refer to docs in README.md or online in https://github.com/jlblancoc/nanoflann
The KD-Tree point dimension (the length of each point in the datase, e.g. 3 for 3D points) is determined by means of:
inputData | Dataset with the input features |
params | Basically, the maximum leaf node size |
Definition at line 831 of file nanoflann.hpp.
References mrpt::containers::m_size, and params.
|
default |
Standard destructor.
|
inline |
Builds the index.
Definition at line 858 of file nanoflann.hpp.
References mrpt::containers::m_size.
Referenced by nanoflann::KDTreeEigenMatrixAdaptor< MatrixType, DIM, Distance >::KDTreeEigenMatrixAdaptor().
|
inlineprivate |
Definition at line 1009 of file nanoflann.hpp.
|
inlineprivate |
Definition at line 1183 of file nanoflann.hpp.
References mrpt::math::distance(), and nanoflann::KNNResultSet< DistanceType, IndexType, CountType >::dists.
|
inlineprivate |
Definition at line 1092 of file nanoflann.hpp.
References nanoflann::KNNResultSet< DistanceType, IndexType, CountType >::count, and val.
|
inlineprivate |
Helper accessor to the dataset points:
Definition at line 979 of file nanoflann.hpp.
|
inlineprivate |
Create a tree node that subdivides the list of vecs from vind[first] to vind[last].
The routine is called recursively on each sublist.
left | index of the first vector |
right | index of the last vector |
Definition at line 1041 of file nanoflann.hpp.
References nanoflann::PooledAllocator::allocate(), nanoflann::KDTreeSingleIndexAdaptor< Distance, DatasetAdaptor, DIM, IndexType >::Node::child1, nanoflann::KDTreeSingleIndexAdaptor< Distance, DatasetAdaptor, DIM, IndexType >::Node::child2, nanoflann::KDTreeSingleIndexAdaptor< Distance, DatasetAdaptor, DIM, IndexType >::Node::lr, and nanoflann::KDTreeSingleIndexAdaptor< Distance, DatasetAdaptor, DIM, IndexType >::Node::node_type.
|
inline |
Find set of nearest neighbors to vec[0:dim-1].
Their indices are stored inside the result object.
Params: result = the result object in which the indices of the nearest-neighbors are stored vec = the vector for which to search the nearest neighbors
RESULTSET | Should be any ResultSet<DistanceType> |
Definition at line 901 of file nanoflann.hpp.
References nanoflann::KNNResultSet< DistanceType, IndexType, CountType >::dists, nanoflann::SearchParams::eps, and nanoflann::KNNResultSet< DistanceType, IndexType, CountType >::size().
Referenced by nanoflann::KDTreeEigenMatrixAdaptor< MatrixType, DIM, Distance >::query().
|
inline |
Frees the previously-built index.
Automatically called within buildIndex().
Definition at line 848 of file nanoflann.hpp.
References nanoflann::PooledAllocator::free_all().
|
inlineprivate |
Make sure the auxiliary list vind has the same size than the current dataset, and re-generate if size has changed.
Definition at line 970 of file nanoflann.hpp.
References mrpt::containers::m_size.
|
inline |
Find the "num_closest" nearest neighbors to the query_point[0:dim-1].
Their indices are stored inside the result object.
N
of valid points in the result set. Only the first N
entries in out_indices
and out_distances_sq
will be valid. Return may be less than num_closest
only if the number of elements in the tree is less than num_closest
. Definition at line 925 of file nanoflann.hpp.
References nanoflann::KNNResultSet< DistanceType, IndexType, CountType >::init(), and nanoflann::KNNResultSet< DistanceType, IndexType, CountType >::size().
|
inlineprivate |
Definition at line 996 of file nanoflann.hpp.
References nanoflann::PooledAllocator::allocate(), nanoflann::KDTreeSingleIndexAdaptor< Distance, DatasetAdaptor, DIM, IndexType >::Node::child1, nanoflann::KDTreeSingleIndexAdaptor< Distance, DatasetAdaptor, DIM, IndexType >::Node::child2, and nanoflann::load_value().
|
inline |
Loads a previous index from a binary file.
IMPORTANT NOTE: The set of data points is NOT stored in the file, so the index object must be constructed associated to the same source of data points used while building the index. See the example: examples/saveload_example.cpp
Definition at line 1275 of file nanoflann.hpp.
References nanoflann::load_value(), and mrpt::containers::m_size.
|
inlineprivate |
Definition at line 1103 of file nanoflann.hpp.
References nanoflann::KNNResultSet< DistanceType, IndexType, CountType >::count.
|
inlineprivate |
Subdivide the list of points by a plane perpendicular on axe corresponding to the 'cutfeat' dimension at 'cutval' position.
On return: dataset[ind[0..lim1-1]][cutfeat]<cutval dataset[ind[lim1..lim2-1]][cutfeat]==cutval dataset[ind[lim2..count]][cutfeat]>cutval
Definition at line 1154 of file nanoflann.hpp.
References nanoflann::KNNResultSet< DistanceType, IndexType, CountType >::count.
|
inline |
Find all the neighbors to query_point[0:dim-1] within a maximum radius.
The output is given as a vector of pairs, of which the first element is a point index and the second the corresponding distance. Previous contents of IndicesDists are cleared.
If searchParams.sorted==true, the output list is sorted by ascending distances.
For a better performance, it is advisable to do a .reserve() on the vector if you have any wild guess about the number of expected matches.
Definition at line 945 of file nanoflann.hpp.
References nanoflann::SearchParams::sorted.
|
inline |
Just like radiusSearch() but with a custom callback class for each point found in the radius of the query.
See the source of RadiusResultSet<> as a start point for your own classes.
Definition at line 960 of file nanoflann.hpp.
|
inlineprivate |
Definition at line 984 of file nanoflann.hpp.
References nanoflann::KDTreeSingleIndexAdaptor< Distance, DatasetAdaptor, DIM, IndexType >::Node::child1, nanoflann::KDTreeSingleIndexAdaptor< Distance, DatasetAdaptor, DIM, IndexType >::Node::child2, and nanoflann::save_value().
|
inline |
Stores the index in a binary file.
IMPORTANT NOTE: The set of data points is NOT stored in the file, so when loading the index object it must be constructed associated to the same source of data points used while building it. See the example: examples/saveload_example.cpp
Definition at line 1261 of file nanoflann.hpp.
References mrpt::containers::m_size, and nanoflann::save_value().
|
inlineprivate |
Performs an exact search in the tree starting from a node.
RESULTSET | Should be any ResultSet<DistanceType> |
Definition at line 1207 of file nanoflann.hpp.
References nanoflann::KDTreeSingleIndexAdaptor< Distance, DatasetAdaptor, DIM, IndexType >::Node::child1, nanoflann::KDTreeSingleIndexAdaptor< Distance, DatasetAdaptor, DIM, IndexType >::Node::child2, mrpt::math::distance(), nanoflann::KNNResultSet< DistanceType, IndexType, CountType >::dists, nanoflann::KDTreeSingleIndexAdaptor< Distance, DatasetAdaptor, DIM, IndexType >::Node::lr, nanoflann::KDTreeSingleIndexAdaptor< Distance, DatasetAdaptor, DIM, IndexType >::Node::node_type, nanoflann::KDTreeSingleIndexAdaptor< Distance, DatasetAdaptor, DIM, IndexType >::Node::sub, and val.
|
inline |
Returns number of points in dataset.
Definition at line 869 of file nanoflann.hpp.
References mrpt::containers::m_size.
|
inline |
Computes the inde memory usage Returns: memory used by the index.
Definition at line 880 of file nanoflann.hpp.
References nanoflann::PooledAllocator::usedMemory, and nanoflann::PooledAllocator::wastedMemory.
|
inline |
Returns the length of each point in the dataset.
Definition at line 872 of file nanoflann.hpp.
|
protected |
The dataset used by this index.
The source of our data
Definition at line 761 of file nanoflann.hpp.
|
protected |
Dimensionality of each data point.
Definition at line 767 of file nanoflann.hpp.
Distance nanoflann::KDTreeSingleIndexAdaptor< Distance, DatasetAdaptor, DIM, IndexType >::distance |
Definition at line 816 of file nanoflann.hpp.
|
protected |
Definition at line 763 of file nanoflann.hpp.
|
protected |
Definition at line 755 of file nanoflann.hpp.
|
protected |
Number of current poins in the dataset.
Definition at line 765 of file nanoflann.hpp.
|
protected |
Number of points in the dataset when the index was built.
Definition at line 766 of file nanoflann.hpp.
|
protected |
Pooled memory allocator.
Using a pooled memory allocator is more efficient than allocating memory directly when there is a large number small of memory allocations.
Definition at line 812 of file nanoflann.hpp.
|
protected |
Definition at line 803 of file nanoflann.hpp.
|
protected |
The KD-tree used to find neighbours.
Definition at line 802 of file nanoflann.hpp.
|
protected |
Array of indices to vectors in the dataset.
Definition at line 753 of file nanoflann.hpp.
Page generated by Doxygen 1.8.14 for MRPT 2.0.4 Git: 33de1d0ad Sat Jun 20 11:02:42 2020 +0200 at sáb jun 20 17:35:17 CEST 2020 |