PCL1.8.1 Feature

淺唱寂寞╮ 提交于 2019-11-29 13:54:03

Fast Point Feature Histograms (FPFH)

执行效率慢,占用大量CPU,最终计算PFH的点云大小和输入的点云大小相同,即fpfhs->points.size() s= cloud->points.size()

http://www.pointclouds.org/documentation/tutorials/fpfh_estimation.php#fpfh-estimation

#include <pcl/features/fpfh_omp.h>

pcl::PointCloud<pcl::PointXYZ>::Ptr cloud(new pcl::PointCloud<pcl::PointXYZ>);


// Create the FPFH estimation class, and pass the input dataset+normals to it

pcl::FPFHEstimation<pcl::PointXYZ, pcl::Normal, pcl::FPFHSignature33> fpfh;
//使用OMP多线程加速执行,待验证
//pcl::FPFHEstimationOMP<pcl::PointXYZ, pcl::Normal, pcl::FPFHSignature33> fpfh;
//fpfh.setNumberOfThreads(8);

fpfh.setInputCloud(cloud);
fpfh.setInputNormals(normals);
// alternatively, if cloud is of tpe PointNormal, do fpfh.setInputNormals (cloud);

// Create an empty kdtree representation, and pass it to the FPFH estimation object.
// Its content will be filled inside the object, based on the given input dataset (as no other search surface is given).
pcl::search::KdTree<pcl::PointXYZ>::Ptr tree(new pcl::search::KdTree<pcl::PointXYZ>);

fpfh.setSearchMethod(tree);

// Output datasets
pcl::PointCloud<pcl::FPFHSignature33>::Ptr fpfhs(new pcl::PointCloud<pcl::FPFHSignature33>());

// Use all neighbors in a sphere of radius 5cm
// IMPORTANT: the radius used here has to be larger than the radius used to estimate the surface normals!!!
fpfh.setRadiusSearch(0.05);

// Compute the features
fpfh.compute(*fpfhs);

在计算FPFH时,考虑到效率的问题,没有对法向量进行空和无穷大检测,因此在计算FPH前需要进行法向量的判断,使用如下代码:

for (int i = 0; i < normals->points.size(); i++)
{
  if (!pcl::isFinite<pcl::Normal>(normals->points[i]))
  {
    PCL_WARN("normals[%d] is not finite\n", i);
  }
}
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!