Classes
struct
BranchStruct
This record represents a branch point when finding neighbors in the tree.
More...
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.
void
init
()
~KDTreeSingleIndexAdaptor
()
Standard destructor.
void
freeIndex
()
Frees the previously-built index.
void
buildIndex
()
Builds the index.
size_t
size
() const
Returns size of index.
size_t
veclen
() const
Returns the length of an index feature.
size_t
usedMemory
() const
Computes the inde memory usage Returns: memory used by the index.
void
saveIndex
(FILE *stream)
Stores the index in a binary file.
void
loadIndex
(FILE *stream)
Loads a previous index from a binary file.
template<typename RESULTSET >
void
findNeighbors
(RESULTSET &result, const
ElementType
*vec, const
SearchParams
&searchParams) const
Find set of nearest neighbors to vec[0:dim-1].
void
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].
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.
size_t
radiusSearch
(const
ElementType
*query_point, const
DistanceType
radius, std::list< IndexType > &IndicesDists, const
SearchParams
&searchParams) const
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".
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".
typedef
BranchStruct
<
NodePtr
,
DistanceType
>
BranchSt
typedef
BranchSt
*
Branch
Protected Attributes
std::vector< IndexType >
vind
Array of indices to vectors in the dataset.
size_t
m_leaf_max_size
const DatasetAdaptor &
dataset
The dataset used by this index.
const
KDTreeSingleIndexAdaptorParams
index_params
size_t
m_size
int
dim
Dimensionality of each data point.
NodePtr
root_node
Array of k-d trees used to find neighbours.
BoundingBox
root_bbox
PooledAllocator
pool
Pooled memory allocator.
template<typename Distance, class DatasetAdaptor, int DIM = -1, typename IndexType = size_t>
class nanoflann::KDTreeSingleIndexAdaptor< Distance, DatasetAdaptor, DIM, IndexType >
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):
inline
size_t
kdtree_get_point_count()
const
{ ... }
inline
DistanceType
kdtree_distance(
const
T *p1,
const
size_t
idx_p2,
size_t
size
)
const
{ ... }
inline
T kdtree_get_pt(
const
size_t
idx,
int
dim
)
const
{ ... }
template
<
class
BBOX>
bool
kdtree_get_bbox(BBOX &bb)
const
bb[0].low = ...; bb[0].high = ...;
bb[1].low = ...; bb[1].high = ...;
return
true
;
size_t size() const
Returns size of index.
int dim
Dimensionality of each data point.
Distance::DistanceType DistanceType
-
Template Parameters
-
DatasetAdaptorThe user-provided adaptor (see comments above).
DistanceThe distance metric to use:
nanoflann::metric_L1
,
nanoflann::metric_L2
,
nanoflann::metric_L2_Simple
, etc.
IndexTypeWill be typically size_t or int
Define "distance_vector_t" as a fixed-size or variable-size container depending on "DIM".
Definition at line
931
of file
nanoflann.hpp
.
template<typename Distance , class DatasetAdaptor , int DIM = -1, typename IndexType = size_t>
typedef Distance::DistanceType
nanoflann::KDTreeSingleIndexAdaptor
< Distance, DatasetAdaptor, DIM, IndexType >::DistanceType
template<typename Distance , class DatasetAdaptor , int DIM = -1, typename IndexType = size_t>
typedef Distance::ElementType
nanoflann::KDTreeSingleIndexAdaptor
< Distance, DatasetAdaptor, DIM, IndexType >::ElementType
nanoflann::KDTreeSingleIndexAdaptor
< Distance, DatasetAdaptor, DIM, IndexType >::KDTreeSingleIndexAdaptor
const int
dimensionality
,
KDTree constructor.
Params: inputData = dataset with the input features params = parameters passed to the kdtree algorithm (see
http://code.google.com/p/nanoflann/
for help choosing the parameters)
Definition at line
983
of file
nanoflann.hpp
.
991
dim
(dimensionality),
995
if
(DIM > 0)
997
else
{
998
if
(params.dim > 0)
1000
}
1002
}
const KDTreeSingleIndexAdaptorParams index_params
NodePtr root_node
Array of k-d trees used to find neighbours.
const DatasetAdaptor & dataset
The dataset used by this index.
nanoflann::KDTreeSingleIndexAdaptor
< Distance, DatasetAdaptor, DIM, IndexType >::~
KDTreeSingleIndexAdaptor
void
nanoflann::KDTreeSingleIndexAdaptor
< Distance, DatasetAdaptor, DIM, IndexType >::buildIndex
1030
return
;
1033
}
void freeIndex()
Frees the previously-built index.
Here is the caller graph for this function:
template<typename Distance , class DatasetAdaptor , int DIM = -1, typename IndexType = size_t>
template<typename RESULTSET >
void
nanoflann::KDTreeSingleIndexAdaptor
< Distance, DatasetAdaptor, DIM, IndexType >::findNeighbors
RESULTSET &
result
,
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
-
RESULTSETShould be any ResultSet<DistanceType>
-
See also
-
knnSearch
,
radiusSearch
Definition at line
1073
of file
nanoflann.hpp
.
1074
{
1075
assert(vec);
1077
throw
std::runtime_error(
1078
"[nanoflann] findNeighbors() called before building the index or no data points."
);
1079
float
epsError = 1 + searchParams.eps;
1082
dists.assign((DIM > 0 ? DIM :
dim
), 0);
1083
DistanceType
distsq = computeInitialDistances(vec, dists);
1084
searchLevel(result, vec,
root_node
, distsq, dists, epsError);
1085
}
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".
References
nanoflann::CArray< T, N >::assign()
, and
nanoflann::SearchParams::eps
.
Here is the call graph for this function:
void
nanoflann::KDTreeSingleIndexAdaptor
< Distance, DatasetAdaptor, DIM, IndexType >::freeIndex
Automatically called within
buildIndex()
.
Definition at line
1018
of file
nanoflann.hpp
.
1018
{
1021
}
PooledAllocator pool
Pooled memory allocator.
void free_all()
Frees all allocated memory chunks.
void
nanoflann::KDTreeSingleIndexAdaptor
< Distance, DatasetAdaptor, DIM, IndexType >::init
Definition at line
1004
of file
nanoflann.hpp
.
1004
{
1007
1008
init_vind();
1009
}
Here is the caller graph for this function:
void
nanoflann::KDTreeSingleIndexAdaptor
< Distance, DatasetAdaptor, DIM, IndexType >::knnSearch
const
ElementType
*
query_point
,
Find the "num_closest" nearest neighbors to the
query_point
[0:dim-1].
Their indices are stored inside the result object.
-
See also
-
radiusSearch
,
findNeighbors
-
Note
-
nChecks_IGNORED is ignored but kept for compatibility with the original FLANN interface.
Definition at line
1093
of file
nanoflann.hpp
.
1096
{
1098
resultSet.init(out_indices, out_distances_sq);
1100
}
void findNeighbors(RESULTSET &result, const ElementType *vec, const SearchParams &searchParams) const
Find set of nearest neighbors to vec[0:dim-1].
Search options for KDTreeSingleIndexAdaptor::findNeighbors()
References
nanoflann::KNNResultSet< DistanceType, IndexType, CountType >::init()
.
Here is the call graph for this function:
void
nanoflann::KDTreeSingleIndexAdaptor
< Distance, DatasetAdaptor, DIM, IndexType >::loadIndex
FILE *
stream
)
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
-
See also
-
loadIndex
Definition at line
1507
of file
nanoflann.hpp
.
1507
{
1514
}
std::vector< IndexType > vind
Array of indices to vectors in the dataset.
void load_value(FILE *stream, T &value, size_t count=1)
References
nanoflann::load_value()
.
Here is the call graph for this function:
size_t
nanoflann::KDTreeSingleIndexAdaptor
< Distance, DatasetAdaptor, DIM, IndexType >::radiusSearch
const
ElementType
*
query_point
,
Definition at line
1127
of file
nanoflann.hpp
.
size_t
nanoflann::KDTreeSingleIndexAdaptor
< Distance, DatasetAdaptor, DIM, IndexType >::radiusSearch
const
ElementType
*
query_point
,
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.
-
See also
-
knnSearch
,
findNeighbors
-
Returns
-
The number of points within the given radius (i.e. indices.size() or dists.size() )
Definition at line
1114
of file
nanoflann.hpp
.
void
nanoflann::KDTreeSingleIndexAdaptor
< Distance, DatasetAdaptor, DIM, IndexType >::saveIndex
FILE *
stream
)
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
-
See also
-
loadIndex
Definition at line
1494
of file
nanoflann.hpp
.
1494
{
1501
}
void save_value(FILE *stream, const T &value, size_t count=1)
References
nanoflann::save_value()
.
Here is the call graph for this function:
size_t
nanoflann::KDTreeSingleIndexAdaptor
< Distance, DatasetAdaptor, DIM, IndexType >::size
const
size_t
nanoflann::KDTreeSingleIndexAdaptor
< Distance, DatasetAdaptor, DIM, IndexType >::usedMemory
const
Computes the inde memory usage Returns: memory used by the index.
Definition at line
1053
of file
nanoflann.hpp
.
1053
{
1055
+
dataset
.kdtree_get_point_count() *
sizeof
(IndexType);
1056
}
size_t
nanoflann::KDTreeSingleIndexAdaptor
< Distance, DatasetAdaptor, DIM, IndexType >::veclen
const
Definition at line
1045
of file
nanoflann.hpp
.
1045
{
1046
return
static_cast<
size_t
>
(DIM > 0 ? DIM :
dim
);
1047
}
◆
dataset
template<typename Distance , class DatasetAdaptor , int DIM = -1, typename IndexType = size_t>
Distance
nanoflann::KDTreeSingleIndexAdaptor
< Distance, DatasetAdaptor, DIM, IndexType >::distance
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
970
of file
nanoflann.hpp
.