我正在使用库PCL来读取.pcd点云。 我需要提取此点云的剖面图。 关于如何实现这样一个功能的任何建议?
基本上,我想沿着点云移动一个方框,并在一个平面上投射出现在框中的点。
我已经阅读了点云,但我对点云的提取有点困惑
答案 0 :(得分:3)
您可以使用完全相同的pcl::ProjectInliers
类:它将点投影到参数模型(例如平面,球体,......)上。它甚至还有一个handy tutorial!
这是教程的摘录,它创建了一个平面并在其上投射点:
// 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);
答案 1 :(得分:0)
如果你不需要一个实际的盒子,但飞机的距离阈值会尝试这个。
平面可以用单位法向量(3d)和距离表示,比如norm =(0,0,1),d = 10.这定义了一个平面z = 10;
在平面上创建一个点,只是(10 * 0,10 * 0,10 * 1) - &gt; point_on_plane =(0,0,10)
距离平面dist的距离=(p - point_on_plane).dot(norm)
如果fabs(dist)小于阈值,则在飞机上投射点 projection = p - dist * norm
迭代所有横截面增加d。