2017-10-29 30 views
0

PCL의 점 구름에서 객체를 분할하고 객체의 점 구름을 갖습니다. PCL 방법을 사용하여 이런 방식으로 세그먼트 화 된 객체의 중심을 계산합니다.중앙에 있지 않은 분할 된 객체의 중심

pcl :: PointXYZRGB centroidDS; pcl :: computeCentroid (* 정리 됨, centroidDS);

개체에 중첩이있는 중심을 시각화하면 항상 개체의 가장자리에 위치합니다. 나는 centroid를 피쳐로 사용하므로 누군가가 이것을 계산하는 방법을 알고 있다면 좋을 것입니다. 분할 된 객체의 중심은 객체의 중심에서 다소 차이가 있어야합니다.

답변

1

확실한 어딘가에 여러 개의 동일한 점이 없습니까? 그것은 중심점을 점 구름의 논리적 중심으로 보이는 것에서 멀리 떨어 뜨릴 것입니다. 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

+0

나는 분할하기 전에 복셀 그리드 다운 샘플링을 완료했습니다. 여러 점을 어떻게 확인합니까? 내 세분화가 충분하지 않고 중점을 이동시키지 못하는 작은 점이나 얼룩이있을 수 있습니까? – bugmaker06

+0

복셀 그리드 다운 샘플링을 한 경우 작은 영역에 여러 개의 점이나 점 집합이 없어야합니다. 분명히 그리드 크기에 따라 다릅니다. 그것도 확인하고 싶을 것입니다. 그러나 만약 당신이 여전히 좌표 차이가 최소한 인 곳에서 복제물이나 준 복제물을 가지고 있다면, 팔각형을 사용하여 보셀에 얼마나 많은 포인트가 떨어질 지 계산할 수 있다고 생각합니다. 또한 반경 내에서 이웃 노드 수를 세는 정상적인 kdtree 검색이 작동합니다. 이 게시물은 octree에 대해 이야기합니다. http://www.pcl-users.org/Saving-Octree-voxel-density-information-to-file-td3840729.html – Rooscannon