좋아요, 여기에 문제가 있습니다. 한 쌍의 포인트 클라우드를 등록하기 위해 여기 에 제공된 링크를 따랐습니다 .
몇 가지 쿼리가 있습니다.
1) 두 번째 포인트 클라우드가 첫 번째 포인트 클라우드의 프레임에 정렬되기 때문에 첫 번째 포인트 클라우드의 포인트 좌표는 최종 포인트 클라우드에서 변경되지 않아야합니다.
2) 최종 좌표의 정렬 된 지점에 목표 지점을 매핑하는 방법이 있습니까? 즉, 예를 들어 두 개의 포인트 클라우드 pc1과 pc2가 있습니다. pc1에는 3 개의 포인트 A, B, C가 있고 pc2에는 4 개의 포인트 W, X, Y 및 Z가 있습니다. 등록 후 최종 포인트 클라우드에는 포인트 A, B, C (변경되지 않아야하기 때문에) 및 W '가 포함됩니다. , X ', Y'및 Z '. 내 질문은 W '가 대상 클라우드의 W, X'에서 X 등에 해당하는지 알 수있는 방법이 있습니까? 또한 다른 방법이 있습니까? 내 말은, W가 주어지면 그것이 무엇에 해당하는지 (즉 W ') 어떻게 알 수 있습니까?
미리 감사드립니다.
pcl에서 등록 자체는 클라우드를 변경하지 않습니다. 등록 결과는 소스 클라우드의 프레임에서 대상 클라우드의 프레임으로 변환됩니다.
귀하의 링크에서 등록은 pairAlign ()에서 이루어집니다. 점진적으로 실행됩니다.
points_with_normals_src = reg_result;
reg.align(reg_result);
reg_result로 변환 된 points_with_normals_src 클라우드를 얻을 때마다
//accumulate transformation between each Iteration
Ti = reg.getFinalTransformation () * Ti;
이전 단계에서 축적 된 변환.
변환 (어떤 이유로 대상에 역변환을 적용하여 소스 프레임으로 변환하려는 경우) 및 정렬 된 구름의 결과 병합은 등록 루프 후에 만 발생합니다.
// Transform target back in source frame
pcl::transformPointCloud (*cloud_tgt, *output, targetToSource);
...
//add the source to the transformed target
*output += *cloud_src;
내가 당신이 맞다고 이해한다면 당신의 질문은 cloud_tgt의 포인트 A가 주어집니다 병합 된 출력 클라우드에서 이미지를 찾으십니까? (권리?)
A 지점의 변환 된 좌표를 찾는 것이 필요한 경우 간단합니다.
pcl::PointXYZ transformed_a = targetToSource * a;
출력 클라우드에서 변환 된 A의 인덱스를 찾으려면 조금 더 복잡합니다. 출력 클라우드의 모든 포인트를 열거하고 해당 좌표를 transformed_a와 비교할 수는 있지만이 접근 방식은 눈에 띄는 성능 문제가 될 것입니다. 대상 클라우드에서 많은 포인트에 대한 대응을 찾습니다. 이 경우에는 pcl :: search :: KdTree를 사용하는 것이 좋습니다 ( http://docs.pointclouds.org/trunk/a02948.html 참조 ).
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다