Surface Match 3D Multi
1 개요
하나 이상의 3D 객체와 가장 유사한 표면을 찾는 알고리즘입니다.
2 알고리즘 상세 설명
Learn Data 1 | Learn Data 2 | Learn Data 3 | Match Result |
---|---|---|---|
![]() |
![]() |
![]() |
![]() |
위 사진의 Learn Data(1, 2, 3) 으로 등록한 객체를 모두 탐지합니다. 데이터는 Learn/Source 포인트 클라우드 모두 법선 벡터를 포함하고 있어야 합니다.
표면 데이터 생성 방법은 및 기본 파라미터 설정 방법은 Surface Match 3D참고 바랍니다.
3 학습 데이터 Save & Load 방법 설명
학습한 데이터 파일을 저장 및 불러오기가 가능합니다. 하나 이상의 학습 모델을 각각 개별로 저장하거나 불러올 수 있습니다. 또한 여러 모델을 등록한 후 전체 모델을 한 번에 하나의 파일로 저장한 뒤 불러올 수 있습니다.
4.1 Save 동작 설명
학습을 진행한 후 개별 학습 데이터 파일을 *.flsm(Surface Match) *.flvm(Vertex Match)
확장자로 저장할 수 있습니다. 전체 학습 데이터는 *.flsmm(Surface Match 3D Multi) *.flvmm(Vertex Match 3D Multi)
확장자로 저장할 수 있습니다.
-
Save(CFLString<wchar_t> strFilePath)
- strFilePath : 저장할 파일 경로
- 이 때 확장자는 아래와 같습니다.
*.flsmm, *.flvmm
: 각각 Surface Match 3D Multi, Vertex Match 3D Multi를 의미합니다.
-
SaveSingleModel(CFLString<wchar_t> strFilePath, CFLString<wchar_t> strClassName)
- strClassName : 저장할 학습 데이터 이름
*.flsm, *.flvm
: 각각 Surface Match 3D, Vertex Match 3D 의 확장자를 의미합니다.
CSurfaceMatch3DMulti surfaceMatch3DMulti;
CFL3DObject floLearnObjectData;
CFLString<wchar_t> flsClassName = L"Default";
surfaceMatch3DMulti.SetLearnObject(floLearnObjectData);
surfaceMatch3DMulti.Learn(flsClassName);
surfaceMatch3DMulti.Save(L"파일 경로//*.flsmm"); // Vertex Match 3D Multi : *.flvmm
surfaceMatch3DMulti.SaveSingleModel(L"파일 경로//*.flsm", flsClassName); // Vertex Match 3D : *.flvm
4.2 Load 동작 설명
저장된 시점의 파라미터 및 학습 데이터를 불러온 뒤 바로 검사에 사용할 수 있습니다. 개별 학습 데이터를 불러오거나, 전체 학습 데이터를 한 번에 불러올 수 있습니다.
-
Load(CFLString<wchar_t> strFilePath)
- strFilePath : 데이터 파일 경로
-
LoadSingleModel(CFLString<wchar_t> strFilePath, CFLString<wchar_t> strClassName)
- strFilePath : 데이터 파일 경로
- strClassName : 모델 이름
- 개별 모델 Load시 Class Name을 함께 지정해야 합니다.
CSurfaceMatch3DMulti surfaceMatch3DMulti;
CFL3DObject floSourceObjectData;
CFLString<wchar_t> flsClassName = L"Default";
surfaceMatch3DMulti.Load(L"파일 경로//*.flsmm"); // Vertex Match 3D Multi : *.flvmm
surfaceMatch3DMulti.LoadSingleModel(L"파일 경로//*.flsm", flsClassName); // Vertex Match 3D : *.flvm
surfaceMatch3DMulti.SetSourceObject(floSourceObjectData);
surfaceMatch3DMulti.Execute();
5 파라미터 설정 및 사용 방법
-
SetMaxObjectMode(EMaxObjectMode eMode)
- 최대 검출 결과 모드를 설정합니다.
- EMaxObjectMode_Total : 학습 데이터를 구별하지 않고 Score가 높은 순으로 전체 검출 결과의 최대 개수를 설정합니다.
- EMaxObjectMode_Class : 학습 데이터 마다 검출할 최대 개수를 설정합니다.
-
SetMaxObject(CFLString<wchar_t> flsClassName)
- 지정한 클래스의 최대 검출 개수를 설정합니다.
-
EnableClass(CFLString<wchar_t> flsClassName)
- 지정한 클래스의 검출 유무를 활성화 합니다.
-
DisableClass(CFLString<wchar_t> flsClassName)
- 지정한 클래스의 검출 유무를 비활성화 합니다.
6 알고리즘 수행 결과 취득 방법
결과는 전체 3D Pose Parameter의 Euler Angle 및 Sequence, Rotation Vector, Translation Vector, Score 및 Residual을 반환합니다.
SPoseMatrixParametersMulti
- strClassName : 클래스 이름
- tp3Angle : 오일러 각도
- tp3RotationVector : 회전 벡터
- tp3TranslationVector : 이동 벡터
- f64Score : 점수
- f64Residual : 잔차
- EEulerSequence : 탐색 시 설정한 오일러 순서
개별 결과는 아래의 GetResultPoseMatrix()
함수를 통해 얻어올 수 있습니다.
-
GetResultPoseMatrix(int64_t i64Index, SPoseMatrixParametersMulti sResult)
- i64Index : 개별 요소의 인덱스 값
- sResult : 결과 구조체
-
GetResultPoseMatrix(int64_t i64Index, CMatrix<float or double> matResult)
- i64Index : 개별 요소의 인덱스 값
- matResult : 결과 변환 행렬
7 예제 코드
CSurfaceMatch3DMulti surfaceMatch3DMulti;
CFL3DObject floLearnObjectData;
CFL3DObject floSourceObjectData;
CFLString<wchar_t> flsClassName = L"Default";
surfaceMatch3DMulti.SetLearnObject(floLearnObjectData);
surfaceMatch3DMulti.Learn(flsClassName);
surfaceMatch3DMulti.SetSourceObject(floSourceObjectData);
surfaceMatch3DMulti.Execute();