Point Cloud Library (PCL)  1.9.0-dev
feature.h
1 /*
2  * Software License Agreement (BSD License)
3  *
4  * Point Cloud Library (PCL) - www.pointclouds.org
5  * Copyright (c) 2010-2011, Willow Garage, Inc.
6  * Copyright (c) 2012-, Open Perception, Inc.
7  *
8  * All rights reserved.
9  *
10  * Redistribution and use in source and binary forms, with or without
11  * modification, are permitted provided that the following conditions
12  * are met:
13  *
14  * * Redistributions of source code must retain the above copyright
15  * notice, this list of conditions and the following disclaimer.
16  * * Redistributions in binary form must reproduce the above
17  * copyright notice, this list of conditions and the following
18  * disclaimer in the documentation and/or other materials provided
19  * with the distribution.
20  * * Neither the name of the copyright holder(s) nor the names of its
21  * contributors may be used to endorse or promote products derived
22  * from this software without specific prior written permission.
23  *
24  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
25  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
26  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
27  * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
28  * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
29  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
30  * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
31  * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
32  * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
33  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
34  * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
35  * POSSIBILITY OF SUCH DAMAGE.
36  *
37  * $Id$
38  *
39  */
40 
41 #ifndef PCL_FEATURE_H_
42 #define PCL_FEATURE_H_
43 
44 #if defined __GNUC__
45 # pragma GCC system_header
46 #endif
47 
48 #include <boost/function.hpp>
49 #include <boost/bind.hpp>
50 // PCL includes
51 #include <pcl/pcl_base.h>
52 #include <pcl/search/search.h>
53 
54 namespace pcl
55 {
56  /** \brief Solve the eigenvalues and eigenvectors of a given 3x3 covariance matrix, and estimate the least-squares
57  * plane normal and surface curvature.
58  * \param covariance_matrix the 3x3 covariance matrix
59  * \param point a point lying on the least-squares plane (SSE aligned)
60  * \param plane_parameters the resultant plane parameters as: a, b, c, d (ax + by + cz + d = 0)
61  * \param curvature the estimated surface curvature as a measure of
62  * \f[
63  * \lambda_0 / (\lambda_0 + \lambda_1 + \lambda_2)
64  * \f]
65  * \ingroup features
66  */
67  inline void
68  solvePlaneParameters (const Eigen::Matrix3f &covariance_matrix,
69  const Eigen::Vector4f &point,
70  Eigen::Vector4f &plane_parameters, float &curvature);
71 
72  /** \brief Solve the eigenvalues and eigenvectors of a given 3x3 covariance matrix, and estimate the least-squares
73  * plane normal and surface curvature.
74  * \param covariance_matrix the 3x3 covariance matrix
75  * \param nx the resultant X component of the plane normal
76  * \param ny the resultant Y component of the plane normal
77  * \param nz the resultant Z component of the plane normal
78  * \param curvature the estimated surface curvature as a measure of
79  * \f[
80  * \lambda_0 / (\lambda_0 + \lambda_1 + \lambda_2)
81  * \f]
82  * \ingroup features
83  */
84  inline void
85  solvePlaneParameters (const Eigen::Matrix3f &covariance_matrix,
86  float &nx, float &ny, float &nz, float &curvature);
87 
88  ////////////////////////////////////////////////////////////////////////////////////////////
89  ////////////////////////////////////////////////////////////////////////////////////////////
90  ////////////////////////////////////////////////////////////////////////////////////////////
91  /** \brief Feature represents the base feature class. Some generic 3D operations that
92  * are applicable to all features are defined here as static methods.
93  *
94  * \attention
95  * The convention for a feature descriptor is:
96  * - if the nearest neighbors for the query point at which the descriptor is to be computed cannot be
97  * determined, the descriptor values will be set to NaN (not a number)
98  * - it is impossible to estimate a feature descriptor for a point that doesn't have finite 3D coordinates.
99  * Therefore, any point that has NaN data on x, y, or z, will most likely have its descriptor set to NaN.
100  *
101  * \author Radu B. Rusu
102  * \ingroup features
103  */
104  template <typename PointInT, typename PointOutT>
105  class Feature : public PCLBase<PointInT>
106  {
107  public:
110 
112 
113  typedef boost::shared_ptr< Feature<PointInT, PointOutT> > Ptr;
114  typedef boost::shared_ptr< const Feature<PointInT, PointOutT> > ConstPtr;
115 
118 
122 
124 
125  typedef boost::function<int (size_t, double, std::vector<int> &, std::vector<float> &)> SearchMethod;
126  typedef boost::function<int (const PointCloudIn &cloud, size_t index, double, std::vector<int> &, std::vector<float> &)> SearchMethodSurface;
127 
128  public:
129  /** \brief Empty constructor. */
130  Feature () :
132  surface_(), tree_(),
134  fake_surface_(false)
135  {}
136 
137  /** \brief Empty destructor */
138  virtual ~Feature () {}
139 
140  /** \brief Provide a pointer to a dataset to add additional information
141  * to estimate the features for every point in the input dataset. This
142  * is optional, if this is not set, it will only use the data in the
143  * input cloud to estimate the features. This is useful when you only
144  * need to compute the features for a downsampled cloud.
145  * \param[in] cloud a pointer to a PointCloud message
146  */
147  inline void
148  setSearchSurface (const PointCloudInConstPtr &cloud)
149  {
150  surface_ = cloud;
151  fake_surface_ = false;
152  //use_surface_ = true;
153  }
154 
155  /** \brief Get a pointer to the surface point cloud dataset. */
156  inline PointCloudInConstPtr
158  {
159  return (surface_);
160  }
161 
162  /** \brief Provide a pointer to the search object.
163  * \param[in] tree a pointer to the spatial search object.
164  */
165  inline void
166  setSearchMethod (const KdTreePtr &tree) { tree_ = tree; }
167 
168  /** \brief Get a pointer to the search method used. */
169  inline KdTreePtr
171  {
172  return (tree_);
173  }
174 
175  /** \brief Get the internal search parameter. */
176  inline double
178  {
179  return (search_parameter_);
180  }
181 
182  /** \brief Set the number of k nearest neighbors to use for the feature estimation.
183  * \param[in] k the number of k-nearest neighbors
184  */
185  inline void
186  setKSearch (int k) { k_ = k; }
187 
188  /** \brief get the number of k nearest neighbors used for the feature estimation. */
189  inline int
190  getKSearch () const
191  {
192  return (k_);
193  }
194 
195  /** \brief Set the sphere radius that is to be used for determining the nearest neighbors used for the feature
196  * estimation.
197  * \param[in] radius the sphere radius used as the maximum distance to consider a point a neighbor
198  */
199  inline void
200  setRadiusSearch (double radius)
201  {
202  search_radius_ = radius;
203  }
204 
205  /** \brief Get the sphere radius used for determining the neighbors. */
206  inline double
208  {
209  return (search_radius_);
210  }
211 
212  /** \brief Base method for feature estimation for all points given in
213  * <setInputCloud (), setIndices ()> using the surface in setSearchSurface ()
214  * and the spatial locator in setSearchMethod ()
215  * \param[out] output the resultant point cloud model dataset containing the estimated features
216  */
217  void
218  compute (PointCloudOut &output);
219 
220  protected:
221  /** \brief The feature name. */
222  std::string feature_name_;
223 
224  /** \brief The search method template for points. */
226 
227  /** \brief An input point cloud describing the surface that is to be used
228  * for nearest neighbors estimation.
229  */
230  PointCloudInConstPtr surface_;
231 
232  /** \brief A pointer to the spatial search object. */
233  KdTreePtr tree_;
234 
235  /** \brief The actual search parameter (from either \a search_radius_ or \a k_). */
237 
238  /** \brief The nearest neighbors search radius for each point. */
240 
241  /** \brief The number of K nearest neighbors to use for each point. */
242  int k_;
243 
244  /** \brief Get a string representation of the name of this class. */
245  inline const std::string&
246  getClassName () const { return (feature_name_); }
247 
248  /** \brief This method should get called before starting the actual computation. */
249  virtual bool
250  initCompute ();
251 
252  /** \brief This method should get called after ending the actual computation. */
253  virtual bool
254  deinitCompute ();
255 
256  /** \brief If no surface is given, we use the input PointCloud as the surface. */
258 
259  /** \brief Search for k-nearest neighbors using the spatial locator from
260  * \a setSearchmethod, and the given surface from \a setSearchSurface.
261  * \param[in] index the index of the query point
262  * \param[in] parameter the search parameter (either k or radius)
263  * \param[out] indices the resultant vector of indices representing the k-nearest neighbors
264  * \param[out] distances the resultant vector of distances representing the distances from the query point to the
265  * k-nearest neighbors
266  *
267  * \return the number of neighbors found. If no neighbors are found or an error occurred, return 0.
268  */
269  inline int
270  searchForNeighbors (size_t index, double parameter,
271  std::vector<int> &indices, std::vector<float> &distances) const
272  {
273  return (search_method_surface_ (*input_, index, parameter, indices, distances));
274  }
275 
276  /** \brief Search for k-nearest neighbors using the spatial locator from
277  * \a setSearchmethod, and the given surface from \a setSearchSurface.
278  * \param[in] cloud the query point cloud
279  * \param[in] index the index of the query point in \a cloud
280  * \param[in] parameter the search parameter (either k or radius)
281  * \param[out] indices the resultant vector of indices representing the k-nearest neighbors
282  * \param[out] distances the resultant vector of distances representing the distances from the query point to the
283  * k-nearest neighbors
284  *
285  * \return the number of neighbors found. If no neighbors are found or an error occurred, return 0.
286  */
287  inline int
288  searchForNeighbors (const PointCloudIn &cloud, size_t index, double parameter,
289  std::vector<int> &indices, std::vector<float> &distances) const
290  {
291  return (search_method_surface_ (cloud, index, parameter, indices, distances));
292  }
293 
294  private:
295  /** \brief Abstract feature estimation method.
296  * \param[out] output the resultant features
297  */
298  virtual void
299  computeFeature (PointCloudOut &output) = 0;
300 
301  public:
302  EIGEN_MAKE_ALIGNED_OPERATOR_NEW
303  };
304 
305 
306  ////////////////////////////////////////////////////////////////////////////////////////////
307  ////////////////////////////////////////////////////////////////////////////////////////////
308  ////////////////////////////////////////////////////////////////////////////////////////////
309  template <typename PointInT, typename PointNT, typename PointOutT>
310  class FeatureFromNormals : public Feature<PointInT, PointOutT>
311  {
313  typedef typename PointCloudIn::Ptr PointCloudInPtr;
316 
317  public:
320  typedef typename PointCloudN::ConstPtr PointCloudNConstPtr;
321 
322  typedef boost::shared_ptr< FeatureFromNormals<PointInT, PointNT, PointOutT> > Ptr;
323  typedef boost::shared_ptr< const FeatureFromNormals<PointInT, PointNT, PointOutT> > ConstPtr;
324 
325  // Members derived from the base class
329 
330  /** \brief Empty constructor. */
331  FeatureFromNormals () : normals_ () {}
332 
333  /** \brief Empty destructor */
334  virtual ~FeatureFromNormals () {}
335 
336  /** \brief Provide a pointer to the input dataset that contains the point normals of
337  * the XYZ dataset.
338  * In case of search surface is set to be different from the input cloud,
339  * normals should correspond to the search surface, not the input cloud!
340  * \param[in] normals the const boost shared pointer to a PointCloud of normals.
341  * By convention, L2 norm of each normal should be 1.
342  */
343  inline void
344  setInputNormals (const PointCloudNConstPtr &normals) { normals_ = normals; }
345 
346  /** \brief Get a pointer to the normals of the input XYZ point cloud dataset. */
347  inline PointCloudNConstPtr
348  getInputNormals () const { return (normals_); }
349 
350  protected:
351  /** \brief A pointer to the input dataset that contains the point normals of the XYZ
352  * dataset.
353  */
354  PointCloudNConstPtr normals_;
355 
356  /** \brief This method should get called before starting the actual computation. */
357  virtual bool
358  initCompute ();
359 
360  public:
361  EIGEN_MAKE_ALIGNED_OPERATOR_NEW
362  };
363 
364  ////////////////////////////////////////////////////////////////////////////////////////////
365  ////////////////////////////////////////////////////////////////////////////////////////////
366  ////////////////////////////////////////////////////////////////////////////////////////////
367  template <typename PointInT, typename PointLT, typename PointOutT>
368  class FeatureFromLabels : public Feature<PointInT, PointOutT>
369  {
371  typedef typename PointCloudIn::Ptr PointCloudInPtr;
373 
374  typedef typename pcl::PointCloud<PointLT> PointCloudL;
375  typedef typename PointCloudL::Ptr PointCloudNPtr;
376  typedef typename PointCloudL::ConstPtr PointCloudLConstPtr;
377 
379 
380  public:
381  typedef boost::shared_ptr< FeatureFromLabels<PointInT, PointLT, PointOutT> > Ptr;
382  typedef boost::shared_ptr< const FeatureFromLabels<PointInT, PointLT, PointOutT> > ConstPtr;
383 
384  // Members derived from the base class
389 
390  /** \brief Empty constructor. */
391  FeatureFromLabels () : labels_ ()
392  {
393  k_ = 1; // Search tree is not always used here.
394  }
395 
396  /** \brief Empty destructor */
397  virtual ~FeatureFromLabels () {}
398 
399  /** \brief Provide a pointer to the input dataset that contains the point labels of
400  * the XYZ dataset.
401  * In case of search surface is set to be different from the input cloud,
402  * labels should correspond to the search surface, not the input cloud!
403  * \param[in] labels the const boost shared pointer to a PointCloud of labels.
404  */
405  inline void
406  setInputLabels (const PointCloudLConstPtr &labels)
407  {
408  labels_ = labels;
409  }
410 
411  /** \brief Get a pointer to the labels of the input XYZ point cloud dataset. */
412  inline PointCloudLConstPtr
413  getInputLabels () const
414  {
415  return (labels_);
416  }
417 
418  protected:
419  /** \brief A pointer to the input dataset that contains the point labels of the XYZ
420  * dataset.
421  */
422  PointCloudLConstPtr labels_;
423 
424  /** \brief This method should get called before starting the actual computation. */
425  virtual bool
426  initCompute ();
427 
428  public:
429  EIGEN_MAKE_ALIGNED_OPERATOR_NEW
430  };
431 
432  ////////////////////////////////////////////////////////////////////////////////////////////
433  ////////////////////////////////////////////////////////////////////////////////////////////
434  ////////////////////////////////////////////////////////////////////////////////////////////
435  /** \brief FeatureWithLocalReferenceFrames provides a public interface for descriptor
436  * extractor classes which need a local reference frame at each input keypoint.
437  *
438  * \attention
439  * This interface is for backward compatibility with existing code and in the future it could be
440  * merged with pcl::Feature. Subclasses should call the protected method initLocalReferenceFrames ()
441  * to correctly initialize the frames_ member.
442  *
443  * \author Nicola Fioraio
444  * \ingroup features
445  */
446  template <typename PointInT, typename PointRFT>
448  {
449  public:
453 
454  /** \brief Empty constructor. */
455  FeatureWithLocalReferenceFrames () : frames_ (), frames_never_defined_ (true) {}
456 
457  /** \brief Empty destructor. */
459 
460  /** \brief Provide a pointer to the input dataset that contains the local
461  * reference frames of the XYZ dataset.
462  * In case of search surface is set to be different from the input cloud,
463  * local reference frames should correspond to the input cloud, not the search surface!
464  * \param[in] frames the const boost shared pointer to a PointCloud of reference frames.
465  */
466  inline void
467  setInputReferenceFrames (const PointCloudLRFConstPtr &frames)
468  {
469  frames_ = frames;
470  frames_never_defined_ = false;
471  }
472 
473  /** \brief Get a pointer to the local reference frames. */
474  inline PointCloudLRFConstPtr
476  {
477  return (frames_);
478  }
479 
480  protected:
481  /** \brief A boost shared pointer to the local reference frames. */
482  PointCloudLRFConstPtr frames_;
483  /** \brief The user has never set the frames. */
485 
486  /** \brief Check if frames_ has been correctly initialized and compute it if needed.
487  * \param input the subclass' input cloud dataset.
488  * \param lrf_estimation a pointer to a local reference frame estimation class to be used as default.
489  * \return true if frames_ has been correctly initialized.
490  */
492  virtual bool
493  initLocalReferenceFrames (const size_t& indices_size,
494  const LRFEstimationPtr& lrf_estimation = LRFEstimationPtr());
495  };
496 }
497 
498 #include <pcl/features/impl/feature.hpp>
499 
500 #endif //#ifndef PCL_FEATURE_H_
void setSearchSurface(const PointCloudInConstPtr &cloud)
Provide a pointer to a dataset to add additional information to estimate the features for every point...
Definition: feature.h:148
boost::function< int(const PointCloudIn &cloud, size_t index, double, std::vector< int > &, std::vector< float > &)> SearchMethodSurface
Definition: feature.h:126
PointCloudLRFConstPtr frames_
A boost shared pointer to the local reference frames.
Definition: feature.h:482
boost::shared_ptr< const FeatureFromNormals< PointInT, PointNT, PointOutT > > ConstPtr
Definition: feature.h:323
PointCloudLConstPtr getInputLabels() const
Get a pointer to the labels of the input XYZ point cloud dataset.
Definition: feature.h:413
FeatureFromNormals()
Empty constructor.
Definition: feature.h:331
boost::shared_ptr< const FeatureFromLabels< PointInT, PointLT, PointOutT > > ConstPtr
Definition: feature.h:382
PointCloudN::ConstPtr PointCloudNConstPtr
Definition: feature.h:320
virtual ~FeatureFromLabels()
Empty destructor.
Definition: feature.h:397
std::string feature_name_
The feature name.
Definition: feature.h:222
This file defines compatibility wrappers for low level I/O functions.
Definition: convolution.h:45
int k_
The number of K nearest neighbors to use for each point.
Definition: feature.h:242
PointCloudNConstPtr getInputNormals() const
Get a pointer to the normals of the input XYZ point cloud dataset.
Definition: feature.h:348
PointCloudN::Ptr PointCloudNPtr
Definition: feature.h:319
FeatureWithLocalReferenceFrames()
Empty constructor.
Definition: feature.h:455
void solvePlaneParameters(const Eigen::Matrix3f &covariance_matrix, const Eigen::Vector4f &point, Eigen::Vector4f &plane_parameters, float &curvature)
Solve the eigenvalues and eigenvectors of a given 3x3 covariance matrix, and estimate the least-squar...
Definition: feature.hpp:48
boost::shared_ptr< const Feature< PointInT, PointOutT > > ConstPtr
Definition: feature.h:114
virtual bool deinitCompute()
This method should get called after ending the actual computation.
Definition: feature.hpp:176
pcl::PointCloud< PointRFT > PointCloudLRF
Definition: feature.h:450
double getSearchParameter() const
Get the internal search parameter.
Definition: feature.h:177
void setRadiusSearch(double radius)
Set the sphere radius that is to be used for determining the nearest neighbors used for the feature e...
Definition: feature.h:200
const std::string & getClassName() const
Get a string representation of the name of this class.
Definition: feature.h:246
KdTreePtr tree_
A pointer to the spatial search object.
Definition: feature.h:233
pcl::PointCloud< PointOutT > PointCloudOut
Definition: feature.h:123
boost::shared_ptr< PointCloud< PointWithRange > > Ptr
Definition: point_cloud.h:428
PointCloudInConstPtr surface_
An input point cloud describing the surface that is to be used for nearest neighbors estimation...
Definition: feature.h:230
Feature< PointInT, PointRFT >::Ptr LRFEstimationPtr
Check if frames_ has been correctly initialized and compute it if needed.
Definition: feature.h:491
PointCloudIn::ConstPtr PointCloudInConstPtr
Definition: feature.h:121
pcl::search::Search< PointInT >::Ptr KdTreePtr
Definition: feature.h:117
boost::shared_ptr< pcl::search::Search< PointT > > Ptr
Definition: search.h:81
PointCloudInConstPtr getSearchSurface() const
Get a pointer to the surface point cloud dataset.
Definition: feature.h:157
PointCloudIn::Ptr PointCloudInPtr
Definition: feature.h:120
PCL base class.
Definition: pcl_base.h:68
pcl::PointCloud< PointInT > PointCloudIn
Definition: feature.h:119
bool fake_surface_
If no surface is given, we use the input PointCloud as the surface.
Definition: feature.h:257
boost::shared_ptr< const PointCloud< PointWithRange > > ConstPtr
Definition: point_cloud.h:429
void setInputReferenceFrames(const PointCloudLRFConstPtr &frames)
Provide a pointer to the input dataset that contains the local reference frames of the XYZ dataset...
Definition: feature.h:467
boost::shared_ptr< FeatureFromNormals< PointInT, PointNT, PointOutT > > Ptr
Definition: feature.h:322
PCLBase< PointInT > BaseClass
Definition: feature.h:111
boost::shared_ptr< FeatureFromLabels< PointInT, PointLT, PointOutT > > Ptr
Definition: feature.h:381
Feature()
Empty constructor.
Definition: feature.h:130
pcl::PointCloud< PointNT > PointCloudN
Definition: feature.h:318
double getRadiusSearch() const
Get the sphere radius used for determining the neighbors.
Definition: feature.h:207
bool frames_never_defined_
The user has never set the frames.
Definition: feature.h:484
virtual ~FeatureFromNormals()
Empty destructor.
Definition: feature.h:334
virtual bool initCompute()
This method should get called before starting the actual computation.
Definition: feature.hpp:93
void setSearchMethod(const KdTreePtr &tree)
Provide a pointer to the search object.
Definition: feature.h:166
pcl::search::Search< PointInT > KdTree
Definition: feature.h:116
KdTreePtr getSearchMethod() const
Get a pointer to the search method used.
Definition: feature.h:170
virtual ~Feature()
Empty destructor.
Definition: feature.h:138
int searchForNeighbors(const PointCloudIn &cloud, size_t index, double parameter, std::vector< int > &indices, std::vector< float > &distances) const
Search for k-nearest neighbors using the spatial locator from setSearchmethod, and the given surface ...
Definition: feature.h:288
PointCloudNConstPtr normals_
A pointer to the input dataset that contains the point normals of the XYZ dataset.
Definition: feature.h:354
PointCloudLConstPtr labels_
A pointer to the input dataset that contains the point labels of the XYZ dataset. ...
Definition: feature.h:422
void setInputLabels(const PointCloudLConstPtr &labels)
Provide a pointer to the input dataset that contains the point labels of the XYZ dataset.
Definition: feature.h:406
double search_parameter_
The actual search parameter (from either search_radius_ or k_).
Definition: feature.h:236
PointCloudConstPtr input_
The input point cloud dataset.
Definition: pcl_base.h:150
Feature represents the base feature class.
Definition: feature.h:105
FeatureWithLocalReferenceFrames provides a public interface for descriptor extractor classes which ne...
Definition: feature.h:447
boost::function< int(size_t, double, std::vector< int > &, std::vector< float > &)> SearchMethod
Definition: feature.h:125
void compute(PointCloudOut &output)
Base method for feature estimation for all points given in <setInputCloud (), setIndices ()> using th...
Definition: feature.hpp:189
boost::shared_ptr< Feature< PointInT, PointOutT > > Ptr
Definition: feature.h:113
int getKSearch() const
get the number of k nearest neighbors used for the feature estimation.
Definition: feature.h:190
PointCloudLRFConstPtr getInputReferenceFrames() const
Get a pointer to the local reference frames.
Definition: feature.h:475
PointCloudLRF::ConstPtr PointCloudLRFConstPtr
Definition: feature.h:452
void setKSearch(int k)
Set the number of k nearest neighbors to use for the feature estimation.
Definition: feature.h:186
void setInputNormals(const PointCloudNConstPtr &normals)
Provide a pointer to the input dataset that contains the point normals of the XYZ dataset...
Definition: feature.h:344
virtual ~FeatureWithLocalReferenceFrames()
Empty destructor.
Definition: feature.h:458
double search_radius_
The nearest neighbors search radius for each point.
Definition: feature.h:239
int searchForNeighbors(size_t index, double parameter, std::vector< int > &indices, std::vector< float > &distances) const
Search for k-nearest neighbors using the spatial locator from setSearchmethod, and the given surface ...
Definition: feature.h:270
SearchMethodSurface search_method_surface_
The search method template for points.
Definition: feature.h:225
PointCloudLRF::Ptr PointCloudLRFPtr
Definition: feature.h:451
FeatureFromLabels()
Empty constructor.
Definition: feature.h:391