Registration 3D
1 개요
입력 받은 두 포인트 클라우드를 정합하는 알고리즘입니다.
2 알고리즘 상세 설명
Learn Object | Source Object | Result Object |
---|---|---|
![]() |
![]() |
![]() |
3 파라미터 설정
-
SetSamplingDistance(float f32SamplingDistance)
- 샘플링 거리를 설정합니다.
- Default Value : 0.03
- Recommended Value : 0.005, 0.008, 0.01, 0.03, 0.05
-
SetDescriptorType(EDescriptorType eType)
- 기술자 타입을 설정합니다.
- SHOT352를 사용한 정합 결과가 더 정확하고 안정적지만 FPFH에 비해 속도가 느립니다.
- FPFH : FPFH 타입
- SHOT352 : SHOT352 타입
-
SetRefinementMethod(ERefinementMethod eMethod)
- 포즈 조정 방법을 설정합니다.
- None : 포즈 조정을 하지 않습니다.
- Fast : Point-to-plane 방법으로 포즈 조정을 수행합니다.
-
EnableNormalEstimationAutoRadius(bool bEnableAutoRadius)
- 법선 벡터 추정에 필요한 반경의 자동 계산 여부를 설정합니다.
- Default Value : true
- true : 모든 점들의 평균 거리를 계산하여 사용합니다.
SetNormalEstimationCoefficient()
로 계수를 설정할 수 있습니다.- false :
SetNormalEstimationRadius()
를 통해 사용자가 직접 반경을 설정할 수 있습니다.
-
SetNormalEstimationCoefficient(float f32Coefficient)
- Default Value : 3
- Radius : 자동 계산된 반경(점 집합의 평균 거리) * f32Coefficient로 내부적으로 계산되어 사용됩니다.
-
SetNormalEstimationRadius(float f32Radius)
- Default Value : 0.01
-
EnableSHOTLRFAutoRadius(bool bEnableAutoRadius)
- SHOT 기술자 지역 참조 프레임 추정에 필요한 반경의 자동 계산 여부를 설정합니다.
- Default Value : true
- true : 모든 점들의 평균 거리를 계산하여 사용합니다.
SetSHOTLRFCoefficient()
로 계수를 설정할 수 있습니다.- false :
SetSHOTLRFRadius()
를 통해 사용자가 직접 반경을 설정할 수 있습니다.
-
SetSHOTLRFCoefficient(float f32Coefficient)
- Default Value : 2
- Radius : 자동 계산된 반경(점 집합의 평균 거리) * f32Coefficient로 내부적으로 계산되어 사용됩니다.
-
SetSHOTLRFRadius(float f32Radius)
- Default Value : 0.05
-
EnableSHOTAutoRadius(bool bEnableAutoRadius)
- 법선 벡터 추정에 필요한 반경의 자동 계산 여부를 설정합니다.
- Default Value : true
- true : 모든 점들의 평균 거리를 계산하여 사용합니다.
SetSHOTCoefficient()
로 계수를 설정할 수 있습니다.- false :
SetSHOTRadius()
를 통해 사용자가 직접 반경을 설정할 수 있습니다.
-
SetSHOTCoefficient(float f32Coefficient)
- Default Value : 4
- Radius : 자동 계산된 반경(점 집합의 평균 거리) * f32Coefficient로 내부적으로 계산되어 사용됩니다.
-
SetSHOTRadius(float f32Radius)
- Default Value : 0.1
4 알고리즘 수행 결과 취득 방법
-
GetResultRotationVector(CFLArray<float> flaResultRotationVector)
- 결과 회전 벡터를 얻어옵니다.
-
GetResultTranslationVector(CFLArray<float> flaResultTranslationVector)
- 결과 이동 벡터를 얻어옵니다.
-
GetResultEulerAngle(EEulerSequence eEulerSequence, CFLArray<float> flaResultEulerAngle)
- Euler Sequence에 맞는 결과 회전 각도를 얻어옵니다.
-
GetResultPoseMatrix(CMatrix<float> matPoseMatrix)
- 결과 행렬을 얻어옵니다.
5 예제 코드
CRegistration3D registration3D;
CFL3DObject floLearn;
CFL3DObject floSource;
floLearn.Load(L"C:\\source\\repos\\FLImaging\\ExampleImages\\Registration3D\\Left.ply");
floSource.Load(L"C:\\source\\repos\\FLImaging\\ExampleImages\\Registration3D\\Right.ply");
registration3D.SetLearnObject(floLearn);
registration3D.SetSourceObject(floSource);
registration3D.SetSamplingDistance(0.02f);
registration3D.SetNormalEstimationCoefficient(4.000000f);
registration3D.SetDescriptorType(CRegistration3D::EDescriptorType_FPFH);
registration3D.Execute();