用 PCL 填充空白 space
Fill empty space with PCL
我正在尝试使用 PCL 在“非地面”对象周围创建边界框并测量其尺寸。
我的管道是这样的:
Getting XYZ cloud points → Pass Through → Voxel Grid → Statistical
outline removal → Euclidean clusterization → Moment of inertia
estimation → Some trivial math for getting length, width and height.
但我遇到了问题:
如你所见,地面和物体之间有一个“空”space,因为没有关于“内部”点的信息。这就是为什么我无法围绕我的对象创建适当的 AABB。
所以,我的问题是: 我怎样才能“重建”这个表面以在我的对象周围创建适当的 AABB?就像它站在地平面上而不是飞行?我是 PCL 的新手,可能是我遗漏了一些微不足道的东西?
假设您的物体始终位于平坦的地面上,我建议您按以下方式解决问题。首先,找到地平面的系数。其次,将对象点投影到该平面上以获得对象的 "footprint"。最后,扩展边界框以包含投影点。
您需要的算法在 PCL 中可用。对于平面拟合,请查看 this 教程。对于点投影,使用以下代码片段:
pcl::ProjectInliers<pcl::PointXYZ> proj;
proj.setModelType (pcl::SACMODEL_PLANE);
proj.setInputCloud (cloud_object);
proj.setModelCoefficients (plane_coefficients);
proj.filter (*cloud_projected);
我正在尝试使用 PCL 在“非地面”对象周围创建边界框并测量其尺寸。
我的管道是这样的:
Getting XYZ cloud points → Pass Through → Voxel Grid → Statistical outline removal → Euclidean clusterization → Moment of inertia estimation → Some trivial math for getting length, width and height.
但我遇到了问题:
如你所见,地面和物体之间有一个“空”space,因为没有关于“内部”点的信息。这就是为什么我无法围绕我的对象创建适当的 AABB。
所以,我的问题是: 我怎样才能“重建”这个表面以在我的对象周围创建适当的 AABB?就像它站在地平面上而不是飞行?我是 PCL 的新手,可能是我遗漏了一些微不足道的东西?
假设您的物体始终位于平坦的地面上,我建议您按以下方式解决问题。首先,找到地平面的系数。其次,将对象点投影到该平面上以获得对象的 "footprint"。最后,扩展边界框以包含投影点。
您需要的算法在 PCL 中可用。对于平面拟合,请查看 this 教程。对于点投影,使用以下代码片段:
pcl::ProjectInliers<pcl::PointXYZ> proj;
proj.setModelType (pcl::SACMODEL_PLANE);
proj.setInputCloud (cloud_object);
proj.setModelCoefficients (plane_coefficients);
proj.filter (*cloud_projected);