使用PCL从PointCloud中提取点

时间:2017-10-17 19:09:06

标签: c++ point-cloud-library

我正在使用库PCL来读取.pcd点云。 我需要提取此点云的剖面图。 关于如何实现这样一个功能的任何建议?

基本上,我想沿着点云移动一个方框,并在一个平面上投射出现在框中的点。

我已经阅读了点云,但我对点云的提取有点困惑

2 个答案:

答案 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。