我正在尝试使用PCL在“非地面”对象周围创建边界框并测量其尺寸。
我的管道看起来像这样:
获取XYZ浊点→通过→体素网格→统计 轮廓移除→欧几里德聚类→惯性矩 估计→获得长度,宽度和高度的一些琐碎的数学。
但是我遇到了问题:
正如您所看到的,地面和物体之间存在“空”空间,因为没有关于“内部”点的信息。这就是为什么我不能在我的对象周围创建合适的AABB。
所以,我的问题是:如何“重建”此表面以在我的对象周围创建合适的AABB?就像它站在地面上而不是飞行?我是PCL的新手,可能是我错过了一些微不足道的东西?
答案 0 :(得分:1)
假设您的物体始终站在平坦的地面上,我建议以下列方式解决问题。首先,找到地平面的系数。其次,项目对象指向此平面以获取对象的“足迹”。最后,扩展您的边界框以包含投影点。
您需要的算法在PCL中可用。对于平面拟合,请检查this教程。对于点投影,请使用以下代码段:
pcl::ProjectInliers<pcl::PointXYZ> proj;
proj.setModelType (pcl::SACMODEL_PLANE);
proj.setInputCloud (cloud_object);
proj.setModelCoefficients (plane_coefficients);
proj.filter (*cloud_projected);