不在中心的分段对象的质心



我在PCL中将对象从点云中分割出来,并具有对象的点云。我使用 PCL 方法以这种方式计算分割对象的质心:

pcl::P ointXYZRGB centroidDS; pcl::computeCentroid(*cleaned, centroidDS);

当我可视化带有对象叠加的质心时,它始终位于对象的边缘。我使用质心作为特征,所以如果有人知道如何计算这个,那就太好了。分割对象的质心应或多或少位于对象的中心。

确定您在某处没有多个相同的点?这会将质心从点云的逻辑中心拉开。如果您认为 pcl 函数做错了什么,只需通过以下方式进行测试

float x = y = z = 0.0;
for (int i = 0; i < cleaned->points.size(); i++){
    x += cleaned->points[i].x;
    y += cleaned->points[i].y;
    z += cleaned->points[i].z;
}
x = x / cleaned->points.size();
y = y / cleaned->points.size();
z = z / cleaned->points.size();

这应该与质心相同。如果这是您的问题,您可以尝试删除多个点,或者对点云进行体素网格过滤,以便获得均匀分布的云。http://pointclouds.org/documentation/tutorials/voxel_grid.php

最新更新