|
| KDTreeSingleIndexAdaptor (const KDTreeSingleIndexAdaptor< Distance, DatasetAdaptor, DIM, IndexType > &)=delete |
|
template<class... Args> |
| KDTreeSingleIndexAdaptor (const Dimension dimensionality, const DatasetAdaptor &inputData, const KDTreeSingleIndexAdaptorParams ¶ms, Args &&... args) |
|
| KDTreeSingleIndexAdaptor (const Dimension dimensionality, const DatasetAdaptor &inputData, const KDTreeSingleIndexAdaptorParams ¶ms={}) |
|
void | buildIndex () |
|
void | init_vind () |
|
void | computeBoundingBox (BoundingBox &bbox) |
|
template<class RESULTSET > |
bool | searchLevel (RESULTSET &result_set, const ElementType *vec, const NodePtr node, DistanceType mindist, distance_vector_t &dists, const float epsError) const |
|
void | saveIndex (std::ostream &stream) const |
|
void | loadIndex (std::istream &stream) |
|
|
template<typename RESULTSET > |
bool | findNeighbors (RESULTSET &result, const ElementType *vec, const SearchParameters &searchParams={}) const |
|
Size | knnSearch (const ElementType *query_point, const Size num_closest, IndexType *out_indices, DistanceType *out_distances) const |
|
Size | radiusSearch (const ElementType *query_point, const DistanceType &radius, std::vector< ResultItem< IndexType, DistanceType > > &IndicesDists, const SearchParameters &searchParams={}) const |
|
template<class SEARCH_CALLBACK > |
Size | radiusSearchCustomCallback (const ElementType *query_point, SEARCH_CALLBACK &resultSet, const SearchParameters &searchParams={}) const |
|
Size | rknnSearch (const ElementType *query_point, const Size num_closest, IndexType *out_indices, DistanceType *out_distances, const DistanceType &radius) const |
|
void | freeIndex (Derived &obj) |
|
Size | size (const Derived &obj) const |
|
Size | veclen (const Derived &obj) |
|
ElementType | dataset_get (const Derived &obj, IndexType element, Dimension component) const |
| Helper accessor to the dataset points:
|
|
Size | usedMemory (Derived &obj) |
|
void | computeMinMax (const Derived &obj, Offset ind, Size count, Dimension element, ElementType &min_elem, ElementType &max_elem) |
|
NodePtr | divideTree (Derived &obj, const Offset left, const Offset right, BoundingBox &bbox) |
|
NodePtr | divideTreeConcurrent (Derived &obj, const Offset left, const Offset right, BoundingBox &bbox, std::atomic< unsigned int > &thread_count, std::mutex &mutex) |
|
void | middleSplit_ (const Derived &obj, const Offset ind, const Size count, Offset &index, Dimension &cutfeat, DistanceType &cutval, const BoundingBox &bbox) |
|
void | planeSplit (const Derived &obj, const Offset ind, const Size count, const Dimension cutfeat, const DistanceType &cutval, Offset &lim1, Offset &lim2) |
|
DistanceType | computeInitialDistances (const Derived &obj, const ElementType *vec, distance_vector_t &dists) const |
|
void | saveIndex (const Derived &obj, std::ostream &stream) const |
|
void | loadIndex (Derived &obj, std::istream &stream) |
|
template<typename Distance, class DatasetAdaptor, int32_t DIM = -1, typename IndexType = uint32_t>
class nanoflann::KDTreeSingleIndexAdaptor< Distance, DatasetAdaptor, DIM, IndexType >
kd-tree static 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):
size_t kdtree_get_point_count() const { ... }
T kdtree_get_pt(const size_t idx, const size_t dim) const { ... }
bbox computation loop.
in "bb" so it can be avoided to redo it again.
for point clouds) template <class BBOX> bool kdtree_get_bbox(BBOX &bb) const
{
bb[0].low = ...; bb[0].high = ...;
bb[1].low = ...; bb[1].high = ...;
...
return true;
}
- Template Parameters
-
DatasetAdaptor | The user-provided adaptor, which must be ensured to have a lifetime equal or longer than the instance of this class. |
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 |
template<typename Distance , class DatasetAdaptor , int32_t DIM = -1, typename IndexType = uint32_t>
template<class... Args>
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:
- The DIM template parameter if >0 (highest priority)
- Otherwise, the dimensionality parameter of this constructor.
- Parameters
-
inputData | Dataset with the input features. Its lifetime must be equal or longer than that of the instance of this class. |
params | Basically, the maximum leaf node size |
Note that there is a variable number of optional additional parameters which will be forwarded to the metric class constructor. Refer to example examples/pointcloud_custom_metric.cpp
for a use case.
template<typename Distance , class DatasetAdaptor , int32_t DIM = -1, typename IndexType = uint32_t>
template<typename RESULTSET >
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
- Template Parameters
-
RESULTSET | Should be any ResultSet<DistanceType> |
- Returns
- True if the requested neighbors could be found.
- See also
- knnSearch, radiusSearch
- Note
- If L2 norms are used, all returned distances are actually squared distances.
template<typename Distance , class DatasetAdaptor , int32_t DIM = -1, typename IndexType = uint32_t>
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 TODO(lf)a .reserve() on the vector if you have any wild guess about the number of expected matches.
- See also
- knnSearch, findNeighbors, radiusSearchCustomCallback
- Returns
- The number of points within the given radius (i.e. indices.size() or dists.size() )
- Note
- If L2 norms are used, search radius and all returned distances are actually squared distances.