我在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