https://blog.csdn.net/daoer_sofu/article/details/96117273?

Feature

模型边界 BoundaryEstimation,模型

  1. Eigen::Vector4f pcaCentroid;
  2. Eigen::Matrix3f covariance;
  3. pcl::compute3DCentroid(*scene, pcaCentroid);
  4. pcl::computeCovarianceMatrixNormalized(*scene, pcaCentroid, covariance); //协方差矩阵
  5. Eigen::SelfAdjointEigenSolver<Eigen::Matrix3f> eigen_solver(covariance, Eigen::ComputeEigenvectors);
  6. Eigen::Matrix3f eigenVectorsPCA = eigen_solver.eigenvectors();
  7. //viewer.addCoordinateSystem(1,pcaCentroid.x(),pcaCentroid.y(),pcaCentroid.z());
  8. viewer.addCube(Eigen::Vector3f(tmpCenter.x,tmpCenter.y,tmpCenter.z),Eigen::Quaternionf(eigenVectorsPCA),width,height,depth,"bbox");

法线估计

  1. pcl::PointCloud<pcl::Normal>::Ptr cloud_normals (new pcl::PointCloud<pcl::Normal>);
  2. //创建法线估计估计向量
  3. pcl::NormalEstimation<pcl::PointXYZ, pcl::Normal> ne;
  4. ne.setInputCloud (cloud);
  5. //创建一个空的KdTree对象,并把它传递给法线估计向量
  6. //基于给出的输入数据集,KdTree将被建立
  7. pcl::search::KdTree<pcl::PointXYZ>::Ptr tree (new pcl::search::KdTree<pcl::PointXYZ> ());
  8. ne.setSearchMethod (tree);
  9. //使用半径在查询点周围3厘米范围内的所有临近元素
  10. ne.setRadiusSearch (0.03);
  11. //计算特征值
  12. ne.compute (*cloud_normals);

点特征直方图PFH描述

查找特征点云P,得到P点最临近元素,对领域内的每对点,计算三个角度特征参数,输出直方图,点区域特征和权重
image.png

  1. //其他相关操作
  2. pcl::PointCloud<pcl::PointXYZ>::Ptrcloud(new pcl::PointCloud<pcl::PointXYZ>);
  3. pcl::PointCloud<pcl::Normal>::Ptrnormals(new pcl::PointCloud<pcl::Normal>());
  4. //打开点云文件估计法线等
  5. //创建PFH估计对象pfh,并将输入点云数据集cloud和法线normals传递给它
  6. pcl::PFHEstimation<pcl::PointXYZ,pcl::Normal,pcl::PFHSignature125> pfh;
  7. pfh.setInputCloud(cloud);
  8. pfh.setInputNormals(normals);
  9. //如果点云是类型为PointNormal,则执行pfh.setInputNormals (cloud);
  10. //创建一个空的kd树表示法,并把它传递给PFH估计对象。
  11. //基于已给的输入数据集,建立kdtree
  12. pcl::KdTreeFLANN<pcl::PointXYZ>::Ptrtree(new pcl::KdTreeFLANN<pcl::PointXYZ>());
  13. pfh.setSearchMethod(tree);
  14. //输出数据集
  15. pcl::PointCloud<pcl::PFHSignature125>::Ptrpfhs(new pcl::PointCloud<pcl::PFHSignature125>());
  16. //使用半径在5厘米范围内的所有邻元素。
  17. //注意:此处使用的半径必须要大于估计表面法线时使用的半径!!!
  18. pfh.setRadiusSearch(0.05);
  19. //计算pfh特征值
  20. pfh.compute(*pfhs);

————————————————
版权声明:本文为CSDN博主「怪力左手」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/daoer_sofu/article/details/96117273