10#ifndef mrpt_vision_descriptor_kdtrees_H
11#define mrpt_vision_descriptor_kdtrees_H
58 ASSERT_(!feats.
empty() && feats[0]->descriptors.hasDescriptorSIFT())
115 ASSERT_(!feats.
empty() && feats[0]->descriptors.hasDescriptorSIFT())
150 template <
typename distance_t,
typename element_t>
160 const size_t dim=
m_feats[idx_p2]->descriptors.SIFT.
size();
161 const element_t *p2 = &
m_feats[idx_p2]->descriptors.SIFT[0];
163 for (
size_t i=0;i<dim;i++)
165 d+=(*p1-*p2)*(*p1-*p2);
172 inline element_t
kdtree_get_pt(
const size_t idx,
int dim)
const {
return m_feats[idx]->descriptors.SIFT[dim]; }
176 template <
typename distance_t,
typename element_t>
186 const size_t dim=
m_feats[idx_p2]->descriptors.SURF.
size();
187 const element_t *p2 = &
m_feats[idx_p2]->descriptors.SURF[0];
189 for (
size_t i=0;i<dim;i++)
191 d+=(*p1-*p2)*(*p1-*p2);
198 inline element_t
kdtree_get_pt(
const size_t idx,
int dim)
const {
return m_feats[idx]->descriptors.SURF[dim]; }
A list of visual features, to be used as output by detectors, as input/output by trackers,...
void buildIndex()
Builds the index.
size_t size(const MATRIXLIKE &m, int dim)
This is the global namespace for all Mobile Robot Programming Toolkit (MRPT) libraries.
A kd-tree builder for sets of features with SIFT descriptors.
const kdtree_t & get_kdtree() const
detail::TSIFTDesc2KDTree_Adaptor< distance_t > m_adaptor
TSIFTDescriptorsKDTreeIndex(const CFeatureList &feats)
Constructor from a list of SIFT features.
~TSIFTDescriptorsKDTreeIndex()
kdtree_t & get_kdtree()
Access to the kd-tree object.
nanoflann::KDTreeSingleIndexAdaptor< metric_t, detail::TSIFTDesc2KDTree_Adaptor< distance_t > > kdtree_t
const CFeatureList & m_feats
void regenerate_kdtreee()
Re-creates the kd-tree, which must be done whenever the data source (the CFeatureList) changes.
A kd-tree builder for sets of features with SURF descriptors.
~TSURFDescriptorsKDTreeIndex()
nanoflann::KDTreeSingleIndexAdaptor< metric_t, detail::TSURFDesc2KDTree_Adaptor< distance_t > > kdtree_t
void regenerate_kdtreee()
Re-creates the kd-tree, which must be done whenever the data source (the CFeatureList) changes.
const CFeatureList & m_feats
kdtree_t & get_kdtree()
Access to the kd-tree object.
const kdtree_t & get_kdtree() const
detail::TSURFDesc2KDTree_Adaptor< distance_t > m_adaptor
TSURFDescriptorsKDTreeIndex(const CFeatureList &feats)
Constructor from a list of SIFT features.
const CFeatureList & m_feats
size_t kdtree_get_point_count() const
distance_t kdtree_distance(const element_t *p1, const size_t idx_p2, size_t size) const
element_t kdtree_get_pt(const size_t idx, int dim) const
TSIFTDesc2KDTree_Adaptor(const CFeatureList &feats)
bool kdtree_get_bbox(BBOX &bb) const
TSURFDesc2KDTree_Adaptor(const CFeatureList &feats)
distance_t kdtree_distance(const element_t *p1, const size_t idx_p2, size_t size) const
bool kdtree_get_bbox(BBOX &bb) const
const CFeatureList & m_feats
size_t kdtree_get_point_count() const
element_t kdtree_get_pt(const size_t idx, int dim) const
Parameters (see http://code.google.com/p/nanoflann/ for help choosing the parameters)
Squared Euclidean (L2) distance functor (suitable for low-dimensionality datasets,...