我正在使用库PCL读取.pcd点云。我需要提取这个点云的轮廓。对于如何实现这样的特性,有什么建议吗?
基本上,我想沿着点云移动一个盒子,并在1平面上投射出盒子中的点。
我已经做了点云的读取,但是我有点困在子点云的提取上。
发布于 2017-10-18 07:22:28
您可以使用pcl::ProjectInliers类,它正是这样做的:它将点投影到参数模型(例如平面、球面、.)。它甚至有一个方便教程!
下面是本教程中的一个摘录,它创建了一个平面并将其上的点投影出来:
// Create a set of planar coefficients with X=Y=0,Z=1
pcl::ModelCoefficients::Ptr coefficients (new pcl::ModelCoefficients ());
coefficients->values.resize (4);
coefficients->values[0] = coefficients->values[1] = 0;
coefficients->values[2] = 1.0;
coefficients->values[3] = 0;
// Create the filtering object
pcl::ProjectInliers<pcl::PointXYZ> proj;
proj.setModelType (pcl::SACMODEL_PLANE);
proj.setInputCloud (cloud);
proj.setModelCoefficients (coefficients);
proj.filter (*cloud_projected);发布于 2017-10-18 11:59:55
如果您不需要一个实际的框,但距离阈值的飞机将尝试这一点。
平面可以用单位法向量(3d)和距离来表示,如范数= (0,0,1),d= 10。这就定义了平面z= 10;
在平面上创建一个点,仅(10*0,10*0,10*1) -> point_on_plane =(0,10)
距平面dist = (p - point_on_plane) .dot(范数)的点距离
如果fabs(dist)小于阈值,则平面投影上的投影点=p-dist*范数。
迭代所有横截面增加d。
https://stackoverflow.com/questions/46797502
复制相似问题