IterativeClosestPoint 3D
1 개요
입력 받은 두 포인트 클라우드를 정합하는 알고리즘입니다.
2 알고리즘 상세 설명
| Learn Object | Source Object | Result Object |
|---|---|---|
![]() |
![]() |
![]() |
Fig. 포인트 클라우드 정렬 결과
3 파라미터 설정
-
SetSamplingDistance(float f32SamplingDistance)- 샘플링 거리를 설정합니다.
- Default Value : 0.01
- Recommended Value : 0.005, 0.008, 0.01, 0.03, 0.05
-
SetOutlierScale(float f32OutlierScale)- 이상치 판정 배율을 설정합니다.
- 값이 0에 가까울수록 멀리있는 점들이 정렬 후보에서 제외됩니다.
- Default Value : 2
- Recommended Value : 1 ~ 10
-
SetIteration(int32_t i32Iteration)- 최적해 정확도를 설정합니다.
- 값이 커질 수록 추정한 값과 최적해 간의 차가 커집니다.
- Default Value : 1e-5
-
SetOptimalSolutionAccuracy(double f64Accuracy)- 포즈 조정 반복 횟수를 설정합니다.
- Default Value : 100
-
SetInitialMatrix(CMatrix<float> matInitialMatrix)- 포즈 조정 과정의 시작 포즈를 설정합니다.
- 설정하지 않을 시 내부적으로 4x4 단위 행렬이 설정됩니다.
4 알고리즘 수행 결과 취득 방법
-
GetResultRotationVector(CFLArray<float> flaResultRotationVector)- 결과 회전 벡터를 얻어옵니다.
-
GetResultTranslationVector(CFLArray<float> flaResultTranslationVector)- 결과 이동 벡터를 얻어옵니다.
-
GetResultEulerAngle(EEulerSequence eEulerSequence, CFLArray<float> flaResultEulerAngle)- Euler Sequence에 맞는 결과 회전 각도를 얻어옵니다.
-
GetResultPoseMatrix(CMatrix<float> matPoseMatrix)- 결과 행렬을 얻어옵니다.
5 예제 코드
CIterativeClosestPoint3D iterativeClosestPoint3D;
CFL3DObject floLearn;
CFL3DObject floSource;
iterativeClosestPoint3D.SetSamplingDistance(0.01f);
iterativeClosestPoint3D.SetIteration(1000);
iterativeClosestPoint3D.SetOptimalSolutionAccuracy(0.000001);
iterativeClosestPoint3D.SetOutlierScale(5.000000f);
iterativeClosestPoint3D.Execute();


