uvgVPCCenc 1.0.0
uvgVPCCenc is an open-source real-time V-PCC encoder library written in C++ from scratch.
|
#include <nanoflann.hpp>
Public Types | |
using | Base = typename nanoflann::KDTreeBaseClass< nanoflann::KDTreeSingleIndexDynamicAdaptor_< Distance, DatasetAdaptor, DIM, IndexType >, Distance, DatasetAdaptor, DIM, IndexType > |
using | ElementType = typename Base::ElementType |
using | DistanceType = typename Base::DistanceType |
using | Offset = typename Base::Offset |
using | Size = typename Base::Size |
using | Dimension = typename Base::Dimension |
using | Node = typename Base::Node |
using | NodePtr = Node * |
using | Interval = typename Base::Interval |
using | BoundingBox = typename Base::BoundingBox |
using | distance_vector_t = typename Base::distance_vector_t |
![]() | |
using | ElementType = typename Distance::ElementType |
using | DistanceType = typename Distance::DistanceType |
using | Offset = typename decltype(vAcc_)::size_type |
using | Size = typename decltype(vAcc_)::size_type |
using | Dimension = int32_t |
using | NodePtr = Node * |
using | NodeConstPtr = const Node * |
using | BoundingBox = typename array_or_vector< DIM, Interval >::type |
using | distance_vector_t = typename array_or_vector< DIM, DistanceType >::type |
Public Member Functions | |
KDTreeSingleIndexDynamicAdaptor_ (const Dimension dimensionality, const DatasetAdaptor &inputData, std::vector< int > &treeIndex, const KDTreeSingleIndexAdaptorParams ¶ms=KDTreeSingleIndexAdaptorParams()) | |
KDTreeSingleIndexDynamicAdaptor_ (const KDTreeSingleIndexDynamicAdaptor_ &rhs)=default | |
KDTreeSingleIndexDynamicAdaptor_ | operator= (const KDTreeSingleIndexDynamicAdaptor_ &rhs) |
void | buildIndex () |
void | computeBoundingBox (BoundingBox &bbox) |
template<class RESULTSET > | |
void | 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) |
void | loadIndex (std::istream &stream) |
Query methods | |
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 SearchParameters &searchParams={}) 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 |
![]() | |
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) |
Public Attributes | |
const DatasetAdaptor & | dataset_ |
The source of our data. | |
KDTreeSingleIndexAdaptorParams | index_params_ |
std::vector< int > & | treeIndex_ |
Distance | distance_ |
![]() | |
std::vector< IndexType > | vAcc_ |
NodePtr | root_node_ = nullptr |
Size | leaf_max_size_ = 0 |
Size | n_thread_build_ = 1 |
Number of thread for concurrent tree build. | |
Size | size_ = 0 |
Number of current points in the dataset. | |
Size | size_at_index_build_ = 0 |
Number of points in the dataset when the index was built. | |
Dimension | dim_ = 0 |
Dimensionality of each data point. | |
BoundingBox | root_bbox_ |
PooledAllocator | pool_ |
Additional Inherited Members | |
![]() | |
static void | save_tree (const Derived &obj, std::ostream &stream, const NodeConstPtr tree) |
static void | load_tree (Derived &obj, std::istream &stream, NodePtr &tree) |
kd-tree dynamic 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 | Type of the arguments with which the data can be accessed (e.g. float, double, int64_t, T*) |
using nanoflann::KDTreeSingleIndexDynamicAdaptor_< Distance, DatasetAdaptor, DIM, IndexType >::Base = typename nanoflann::KDTreeBaseClass<nanoflann::KDTreeSingleIndexDynamicAdaptor_<Distance, DatasetAdaptor, DIM, IndexType>, Distance, DatasetAdaptor, DIM, IndexType> |
using nanoflann::KDTreeSingleIndexDynamicAdaptor_< Distance, DatasetAdaptor, DIM, IndexType >::BoundingBox = typename Base::BoundingBox |
Define "BoundingBox" as a fixed-size or variable-size container depending on "DIM"
using nanoflann::KDTreeSingleIndexDynamicAdaptor_< Distance, DatasetAdaptor, DIM, IndexType >::Dimension = typename Base::Dimension |
using nanoflann::KDTreeSingleIndexDynamicAdaptor_< Distance, DatasetAdaptor, DIM, IndexType >::distance_vector_t = typename Base::distance_vector_t |
Define "distance_vector_t" as a fixed-size or variable-size container depending on "DIM"
using nanoflann::KDTreeSingleIndexDynamicAdaptor_< Distance, DatasetAdaptor, DIM, IndexType >::DistanceType = typename Base::DistanceType |
using nanoflann::KDTreeSingleIndexDynamicAdaptor_< Distance, DatasetAdaptor, DIM, IndexType >::ElementType = typename Base::ElementType |
using nanoflann::KDTreeSingleIndexDynamicAdaptor_< Distance, DatasetAdaptor, DIM, IndexType >::Interval = typename Base::Interval |
using nanoflann::KDTreeSingleIndexDynamicAdaptor_< Distance, DatasetAdaptor, DIM, IndexType >::Node = typename Base::Node |
using nanoflann::KDTreeSingleIndexDynamicAdaptor_< Distance, DatasetAdaptor, DIM, IndexType >::NodePtr = Node* |
using nanoflann::KDTreeSingleIndexDynamicAdaptor_< Distance, DatasetAdaptor, DIM, IndexType >::Offset = typename Base::Offset |
using nanoflann::KDTreeSingleIndexDynamicAdaptor_< Distance, DatasetAdaptor, DIM, IndexType >::Size = typename Base::Size |
|
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. Its lifetime must be equal or longer than that of the instance of this class. |
params | Basically, the maximum leaf node size |
|
default |
Explicitly default the copy constructor
|
inline |
Builds the index
|
inline |
|
inline |
Find set of nearest neighbors to vec[0:dim-1]. Their indices are stored inside the result object. This is the core search function, all others are wrappers around this one.
result | The result object in which the indices of the nearest-neighbors are stored. |
vec | The vector of the query point for which to search the nearest neighbors. |
searchParams | Optional parameters for the search. |
RESULTSET | Should be any ResultSet<DistanceType> |
|
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.N
entries in out_indices
and out_distances
will be valid. Return may be less than num_closest
only if the number of elements in the tree is less than num_closest
.
|
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
|
inline |
Assignment operator definiton
|
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 TODO(lf)a .reserve() on the vector if you have any wild guess about the number of expected matches.
|
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.
|
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
|
inline |
Performs an exact search in the tree starting from a node.
RESULTSET | Should be any ResultSet<DistanceType> |
const DatasetAdaptor& nanoflann::KDTreeSingleIndexDynamicAdaptor_< Distance, DatasetAdaptor, DIM, IndexType >::dataset_ |
The source of our data.
The dataset used by this index
Distance nanoflann::KDTreeSingleIndexDynamicAdaptor_< Distance, DatasetAdaptor, DIM, IndexType >::distance_ |
KDTreeSingleIndexAdaptorParams nanoflann::KDTreeSingleIndexDynamicAdaptor_< Distance, DatasetAdaptor, DIM, IndexType >::index_params_ |
std::vector<int>& nanoflann::KDTreeSingleIndexDynamicAdaptor_< Distance, DatasetAdaptor, DIM, IndexType >::treeIndex_ |