43 #include <pcl/point_cloud.h>
44 #include <pcl/type_traits.h>
45 #include <pcl/PointIndices.h>
46 #include <pcl/cloud_iterator.h>
65 template <
typename Po
intT,
typename Scalar>
inline unsigned int
67 Eigen::Matrix<Scalar, 4, 1> ¢roid);
69 template <
typename Po
intT>
inline unsigned int
71 Eigen::Vector4f ¢roid)
73 return (compute3DCentroid <PointT, float> (cloud_iterator, centroid));
76 template <
typename Po
intT>
inline unsigned int
78 Eigen::Vector4d ¢roid)
80 return (compute3DCentroid <PointT, double> (cloud_iterator, centroid));
91 template <
typename Po
intT,
typename Scalar>
inline unsigned int
93 Eigen::Matrix<Scalar, 4, 1> ¢roid);
95 template <
typename Po
intT>
inline unsigned int
97 Eigen::Vector4f ¢roid)
99 return (compute3DCentroid <PointT, float> (cloud, centroid));
102 template <
typename Po
intT>
inline unsigned int
104 Eigen::Vector4d ¢roid)
106 return (compute3DCentroid <PointT, double> (cloud, centroid));
119 template <
typename Po
intT,
typename Scalar>
inline unsigned int
122 Eigen::Matrix<Scalar, 4, 1> ¢roid);
124 template <
typename Po
intT>
inline unsigned int
127 Eigen::Vector4f ¢roid)
129 return (compute3DCentroid <PointT, float> (cloud, indices, centroid));
132 template <
typename Po
intT>
inline unsigned int
135 Eigen::Vector4d ¢roid)
137 return (compute3DCentroid <PointT, double> (cloud, indices, centroid));
150 template <
typename Po
intT,
typename Scalar>
inline unsigned int
153 Eigen::Matrix<Scalar, 4, 1> ¢roid);
155 template <
typename Po
intT>
inline unsigned int
158 Eigen::Vector4f ¢roid)
160 return (compute3DCentroid <PointT, float> (cloud, indices, centroid));
163 template <
typename Po
intT>
inline unsigned int
166 Eigen::Vector4d ¢roid)
168 return (compute3DCentroid <PointT, double> (cloud, indices, centroid));
184 template <
typename Po
intT,
typename Scalar>
inline unsigned int
186 const Eigen::Matrix<Scalar, 4, 1> ¢roid,
187 Eigen::Matrix<Scalar, 3, 3> &covariance_matrix);
189 template <
typename Po
intT>
inline unsigned int
191 const Eigen::Vector4f ¢roid,
192 Eigen::Matrix3f &covariance_matrix)
194 return (computeCovarianceMatrix<PointT, float> (cloud, centroid, covariance_matrix));
197 template <
typename Po
intT>
inline unsigned int
199 const Eigen::Vector4d ¢roid,
200 Eigen::Matrix3d &covariance_matrix)
202 return (computeCovarianceMatrix<PointT, double> (cloud, centroid, covariance_matrix));
218 template <
typename Po
intT,
typename Scalar>
inline unsigned int
220 const Eigen::Matrix<Scalar, 4, 1> ¢roid,
221 Eigen::Matrix<Scalar, 3, 3> &covariance_matrix);
223 template <
typename Po
intT>
inline unsigned int
225 const Eigen::Vector4f ¢roid,
226 Eigen::Matrix3f &covariance_matrix)
228 return (computeCovarianceMatrixNormalized<PointT, float> (cloud, centroid, covariance_matrix));
231 template <
typename Po
intT>
inline unsigned int
233 const Eigen::Vector4d ¢roid,
234 Eigen::Matrix3d &covariance_matrix)
236 return (computeCovarianceMatrixNormalized<PointT, double> (cloud, centroid, covariance_matrix));
252 template <
typename Po
intT,
typename Scalar>
inline unsigned int
255 const Eigen::Matrix<Scalar, 4, 1> ¢roid,
256 Eigen::Matrix<Scalar, 3, 3> &covariance_matrix);
258 template <
typename Po
intT>
inline unsigned int
261 const Eigen::Vector4f ¢roid,
262 Eigen::Matrix3f &covariance_matrix)
264 return (computeCovarianceMatrix<PointT, float> (cloud, indices, centroid, covariance_matrix));
267 template <
typename Po
intT>
inline unsigned int
270 const Eigen::Vector4d ¢roid,
271 Eigen::Matrix3d &covariance_matrix)
273 return (computeCovarianceMatrix<PointT, double> (cloud, indices, centroid, covariance_matrix));
289 template <
typename Po
intT,
typename Scalar>
inline unsigned int
292 const Eigen::Matrix<Scalar, 4, 1> ¢roid,
293 Eigen::Matrix<Scalar, 3, 3> &covariance_matrix);
295 template <
typename Po
intT>
inline unsigned int
298 const Eigen::Vector4f ¢roid,
299 Eigen::Matrix3f &covariance_matrix)
301 return (computeCovarianceMatrix<PointT, float> (cloud, indices, centroid, covariance_matrix));
304 template <
typename Po
intT>
inline unsigned int
307 const Eigen::Vector4d ¢roid,
308 Eigen::Matrix3d &covariance_matrix)
310 return (computeCovarianceMatrix<PointT, double> (cloud, indices, centroid, covariance_matrix));
328 template <
typename Po
intT,
typename Scalar>
inline unsigned int
331 const Eigen::Matrix<Scalar, 4, 1> ¢roid,
332 Eigen::Matrix<Scalar, 3, 3> &covariance_matrix);
334 template <
typename Po
intT>
inline unsigned int
337 const Eigen::Vector4f ¢roid,
338 Eigen::Matrix3f &covariance_matrix)
340 return (computeCovarianceMatrixNormalized<PointT, float> (cloud, indices, centroid, covariance_matrix));
343 template <
typename Po
intT>
inline unsigned int
346 const Eigen::Vector4d ¢roid,
347 Eigen::Matrix3d &covariance_matrix)
349 return (computeCovarianceMatrixNormalized<PointT, double> (cloud, indices, centroid, covariance_matrix));
366 template <
typename Po
intT,
typename Scalar>
inline unsigned int
369 const Eigen::Matrix<Scalar, 4, 1> ¢roid,
370 Eigen::Matrix<Scalar, 3, 3> &covariance_matrix);
372 template <
typename Po
intT>
inline unsigned int
375 const Eigen::Vector4f ¢roid,
376 Eigen::Matrix3f &covariance_matrix)
378 return (computeCovarianceMatrixNormalized<PointT, float> (cloud, indices, centroid, covariance_matrix));
381 template <
typename Po
intT>
inline unsigned int
384 const Eigen::Vector4d ¢roid,
385 Eigen::Matrix3d &covariance_matrix)
387 return (computeCovarianceMatrixNormalized<PointT, double> (cloud, indices, centroid, covariance_matrix));
402 template <
typename Po
intT,
typename Scalar>
inline unsigned int
404 Eigen::Matrix<Scalar, 3, 3> &covariance_matrix,
405 Eigen::Matrix<Scalar, 4, 1> ¢roid);
407 template <
typename Po
intT>
inline unsigned int
409 Eigen::Matrix3f &covariance_matrix,
410 Eigen::Vector4f ¢roid)
412 return (computeMeanAndCovarianceMatrix<PointT, float> (cloud, covariance_matrix, centroid));
415 template <
typename Po
intT>
inline unsigned int
417 Eigen::Matrix3d &covariance_matrix,
418 Eigen::Vector4d ¢roid)
420 return (computeMeanAndCovarianceMatrix<PointT, double> (cloud, covariance_matrix, centroid));
436 template <
typename Po
intT,
typename Scalar>
inline unsigned int
439 Eigen::Matrix<Scalar, 3, 3> &covariance_matrix,
440 Eigen::Matrix<Scalar, 4, 1> ¢roid);
442 template <
typename Po
intT>
inline unsigned int
445 Eigen::Matrix3f &covariance_matrix,
446 Eigen::Vector4f ¢roid)
448 return (computeMeanAndCovarianceMatrix<PointT, float> (cloud, indices, covariance_matrix, centroid));
451 template <
typename Po
intT>
inline unsigned int
454 Eigen::Matrix3d &covariance_matrix,
455 Eigen::Vector4d ¢roid)
457 return (computeMeanAndCovarianceMatrix<PointT, double> (cloud, indices, covariance_matrix, centroid));
473 template <
typename Po
intT,
typename Scalar>
inline unsigned int
476 Eigen::Matrix<Scalar, 3, 3> &covariance_matrix,
477 Eigen::Matrix<Scalar, 4, 1> ¢roid);
479 template <
typename Po
intT>
inline unsigned int
482 Eigen::Matrix3f &covariance_matrix,
483 Eigen::Vector4f ¢roid)
485 return (computeMeanAndCovarianceMatrix<PointT, float> (cloud, indices, covariance_matrix, centroid));
488 template <
typename Po
intT>
inline unsigned int
491 Eigen::Matrix3d &covariance_matrix,
492 Eigen::Vector4d ¢roid)
494 return (computeMeanAndCovarianceMatrix<PointT, double> (cloud, indices, covariance_matrix, centroid));
508 template <
typename Po
intT,
typename Scalar>
inline unsigned int
510 Eigen::Matrix<Scalar, 3, 3> &covariance_matrix);
512 template <
typename Po
intT>
inline unsigned int
514 Eigen::Matrix3f &covariance_matrix)
516 return (computeCovarianceMatrix<PointT, float> (cloud, covariance_matrix));
519 template <
typename Po
intT>
inline unsigned int
521 Eigen::Matrix3d &covariance_matrix)
523 return (computeCovarianceMatrix<PointT, double> (cloud, covariance_matrix));
538 template <
typename Po
intT,
typename Scalar>
inline unsigned int
541 Eigen::Matrix<Scalar, 3, 3> &covariance_matrix);
543 template <
typename Po
intT>
inline unsigned int
546 Eigen::Matrix3f &covariance_matrix)
548 return (computeCovarianceMatrix<PointT, float> (cloud, indices, covariance_matrix));
551 template <
typename Po
intT>
inline unsigned int
554 Eigen::Matrix3d &covariance_matrix)
556 return (computeCovarianceMatrix<PointT, double> (cloud, indices, covariance_matrix));
571 template <
typename Po
intT,
typename Scalar>
inline unsigned int
574 Eigen::Matrix<Scalar, 3, 3> &covariance_matrix);
576 template <
typename Po
intT>
inline unsigned int
579 Eigen::Matrix3f &covariance_matrix)
581 return (computeCovarianceMatrix<PointT, float> (cloud, indices, covariance_matrix));
584 template <
typename Po
intT>
inline unsigned int
587 Eigen::Matrix3d &covariance_matrix)
589 return (computeCovarianceMatrix<PointT, double> (cloud, indices, covariance_matrix));
599 template <
typename Po
intT,
typename Scalar>
void
601 const Eigen::Matrix<Scalar, 4, 1> ¢roid,
605 template <
typename Po
intT>
void
607 const Eigen::Vector4f ¢roid,
611 return (demeanPointCloud<PointT, float> (cloud_iterator, centroid, cloud_out, npts));
614 template <
typename Po
intT>
void
616 const Eigen::Vector4d ¢roid,
620 return (demeanPointCloud<PointT, double> (cloud_iterator, centroid, cloud_out, npts));
629 template <
typename Po
intT,
typename Scalar>
void
631 const Eigen::Matrix<Scalar, 4, 1> ¢roid,
634 template <
typename Po
intT>
void
636 const Eigen::Vector4f ¢roid,
639 return (demeanPointCloud<PointT, float> (cloud_iterator, centroid, cloud_out));
642 template <
typename Po
intT>
void
644 const Eigen::Vector4d ¢roid,
647 return (demeanPointCloud<PointT, double> (cloud_iterator, centroid, cloud_out));
657 template <
typename Po
intT,
typename Scalar>
void
660 const Eigen::Matrix<Scalar, 4, 1> ¢roid,
663 template <
typename Po
intT>
void
666 const Eigen::Vector4f ¢roid,
669 return (demeanPointCloud<PointT, float> (cloud_in, indices, centroid, cloud_out));
672 template <
typename Po
intT>
void
675 const Eigen::Vector4d ¢roid,
678 return (demeanPointCloud<PointT, double> (cloud_in, indices, centroid, cloud_out));
688 template <
typename Po
intT,
typename Scalar>
void
691 const Eigen::Matrix<Scalar, 4, 1> ¢roid,
694 template <
typename Po
intT>
void
697 const Eigen::Vector4f ¢roid,
700 return (demeanPointCloud<PointT, float> (cloud_in, indices, centroid, cloud_out));
703 template <
typename Po
intT>
void
706 const Eigen::Vector4d ¢roid,
709 return (demeanPointCloud<PointT, double> (cloud_in, indices, centroid, cloud_out));
721 template <
typename Po
intT,
typename Scalar>
void
723 const Eigen::Matrix<Scalar, 4, 1> ¢roid,
724 Eigen::Matrix<Scalar, Eigen::Dynamic, Eigen::Dynamic> &cloud_out,
727 template <
typename Po
intT>
void
729 const Eigen::Vector4f ¢roid,
730 Eigen::MatrixXf &cloud_out,
733 return (demeanPointCloud<PointT, float> (cloud_iterator, centroid, cloud_out, npts));
736 template <
typename Po
intT>
void
738 const Eigen::Vector4d ¢roid,
739 Eigen::MatrixXd &cloud_out,
742 return (demeanPointCloud<PointT, double> (cloud_iterator, centroid, cloud_out, npts));
753 template <
typename Po
intT,
typename Scalar>
void
755 const Eigen::Matrix<Scalar, 4, 1> ¢roid,
756 Eigen::Matrix<Scalar, Eigen::Dynamic, Eigen::Dynamic> &cloud_out);
758 template <
typename Po
intT>
void
760 const Eigen::Vector4f ¢roid,
761 Eigen::MatrixXf &cloud_out)
763 return (demeanPointCloud<PointT, float> (cloud_in, centroid, cloud_out));
766 template <
typename Po
intT>
void
768 const Eigen::Vector4d ¢roid,
769 Eigen::MatrixXd &cloud_out)
771 return (demeanPointCloud<PointT, double> (cloud_in, centroid, cloud_out));
783 template <
typename Po
intT,
typename Scalar>
void
786 const Eigen::Matrix<Scalar, 4, 1> ¢roid,
787 Eigen::Matrix<Scalar, Eigen::Dynamic, Eigen::Dynamic> &cloud_out);
789 template <
typename Po
intT>
void
792 const Eigen::Vector4f ¢roid,
793 Eigen::MatrixXf &cloud_out)
795 return (demeanPointCloud<PointT, float> (cloud_in, indices, centroid, cloud_out));
798 template <
typename Po
intT>
void
801 const Eigen::Vector4d ¢roid,
802 Eigen::MatrixXd &cloud_out)
804 return (demeanPointCloud<PointT, double> (cloud_in, indices, centroid, cloud_out));
816 template <
typename Po
intT,
typename Scalar>
void
819 const Eigen::Matrix<Scalar, 4, 1> ¢roid,
820 Eigen::Matrix<Scalar, Eigen::Dynamic, Eigen::Dynamic> &cloud_out);
822 template <
typename Po
intT>
void
825 const Eigen::Vector4f ¢roid,
826 Eigen::MatrixXf &cloud_out)
828 return (demeanPointCloud<PointT, float> (cloud_in, indices, centroid, cloud_out));
831 template <
typename Po
intT>
void
834 const Eigen::Vector4d ¢roid,
835 Eigen::MatrixXd &cloud_out)
837 return (demeanPointCloud<PointT, double> (cloud_in, indices, centroid, cloud_out));
841 template<
typename Po
intT,
typename Scalar>
844 using Pod =
typename traits::POD<PointT>::type;
848 centroid_ (centroid),
849 p_ (reinterpret_cast<const
Pod&>(p)) { }
853 using T =
typename pcl::traits::datatype<PointT, Key>::type;
854 const std::uint8_t* raw_ptr =
reinterpret_cast<const std::uint8_t*
>(&p_) + pcl::traits::offset<PointT, Key>::value;
855 const T* data_ptr =
reinterpret_cast<const T*
>(raw_ptr);
858 if (!std::isfinite (*data_ptr))
864 centroid_[f_idx_++] += *data_ptr;
869 Eigen::Matrix<Scalar, Eigen::Dynamic, 1> ¢roid_;
879 template <
typename Po
intT,
typename Scalar>
inline void
881 Eigen::Matrix<Scalar, Eigen::Dynamic, 1> ¢roid);
883 template <
typename Po
intT>
inline void
885 Eigen::VectorXf ¢roid)
887 return (computeNDCentroid<PointT, float> (cloud, centroid));
890 template <
typename Po
intT>
inline void
892 Eigen::VectorXd ¢roid)
894 return (computeNDCentroid<PointT, double> (cloud, centroid));
904 template <
typename Po
intT,
typename Scalar>
inline void
907 Eigen::Matrix<Scalar, Eigen::Dynamic, 1> ¢roid);
909 template <
typename Po
intT>
inline void
912 Eigen::VectorXf ¢roid)
914 return (computeNDCentroid<PointT, float> (cloud, indices, centroid));
917 template <
typename Po
intT>
inline void
920 Eigen::VectorXd ¢roid)
922 return (computeNDCentroid<PointT, double> (cloud, indices, centroid));
932 template <
typename Po
intT,
typename Scalar>
inline void
935 Eigen::Matrix<Scalar, Eigen::Dynamic, 1> ¢roid);
937 template <
typename Po
intT>
inline void
940 Eigen::VectorXf ¢roid)
942 return (computeNDCentroid<PointT, float> (cloud, indices, centroid));
945 template <
typename Po
intT>
inline void
948 Eigen::VectorXd ¢roid)
950 return (computeNDCentroid<PointT, double> (cloud, indices, centroid));
955 #include <pcl/common/impl/accumulators.hpp>
1021 template <
typename Po
intT>
1045 template <
typename Po
intOutT>
void
1046 get (PointOutT& point)
const;
1052 return (num_points_);
1059 std::size_t num_points_ = 0;
1080 template <
typename Po
intInT,
typename Po
intOutT> std::size_t
1082 PointOutT& centroid);
1092 template <
typename Po
intInT,
typename Po
intOutT> std::size_t
1095 PointOutT& centroid);
1099 #include <pcl/common/impl/centroid.hpp>
A generic class that computes the centroid of points fed to it.
std::size_t getSize() const
Get the total number of points that were added.
void get(PointOutT &point) const
Retrieve the current centroid.
void add(const PointT &point)
Add a new point to the centroid computation.
Iterator class for point clouds with or without given indices.
PointCloud represents the base class in PCL for storing collections of 3D points.
std::size_t computeCentroid(const pcl::PointCloud< PointInT > &cloud, PointOutT ¢roid)
Compute the centroid of a set of points and return it as a point.
#define PCL_MAKE_ALIGNED_OPERATOR_NEW
Macro to signal a class requires a custom allocator.
void computeNDCentroid(const pcl::PointCloud< PointT > &cloud, Eigen::Matrix< Scalar, Eigen::Dynamic, 1 > ¢roid)
General, all purpose nD centroid estimation for a set of points using their indices.
unsigned int computeMeanAndCovarianceMatrix(const pcl::PointCloud< PointT > &cloud, Eigen::Matrix< Scalar, 3, 3 > &covariance_matrix, Eigen::Matrix< Scalar, 4, 1 > ¢roid)
Compute the normalized 3x3 covariance matrix and the centroid of a given set of points in a single lo...
void demeanPointCloud(ConstCloudIterator< PointT > &cloud_iterator, const Eigen::Matrix< Scalar, 4, 1 > ¢roid, pcl::PointCloud< PointT > &cloud_out, int npts=0)
Subtract a centroid from a point cloud and return the de-meaned representation.
unsigned int computeCovarianceMatrixNormalized(const pcl::PointCloud< PointT > &cloud, const Eigen::Matrix< Scalar, 4, 1 > ¢roid, Eigen::Matrix< Scalar, 3, 3 > &covariance_matrix)
Compute normalized the 3x3 covariance matrix of a given set of points.
unsigned int computeCovarianceMatrix(const pcl::PointCloud< PointT > &cloud, const Eigen::Matrix< Scalar, 4, 1 > ¢roid, Eigen::Matrix< Scalar, 3, 3 > &covariance_matrix)
Compute the 3x3 covariance matrix of a given set of points.
unsigned int compute3DCentroid(ConstCloudIterator< PointT > &cloud_iterator, Eigen::Matrix< Scalar, 4, 1 > ¢roid)
Compute the 3D (X-Y-Z) centroid of a set of points and return it as a 3D vector.
Defines functions, macros and traits for allocating and using memory.
IndicesAllocator<> Indices
Type used for indices in PCL.
Defines all the PCL and non-PCL macros used.
Helper functor structure for n-D centroid estimation.
NdCentroidFunctor(const PointT &p, Eigen::Matrix< Scalar, Eigen::Dynamic, 1 > ¢roid)
typename traits::POD< PointT >::type Pod
A point structure representing Euclidean xyz coordinates, and the RGB color.
typename boost::fusion::result_of::as_vector< typename boost::mpl::filter_view< boost::mpl::vector< AccumulatorXYZ, AccumulatorNormal, AccumulatorCurvature, AccumulatorRGBA, AccumulatorIntensity, AccumulatorLabel >, IsAccumulatorCompatible< PointT > > >::type type