Perspective Merge 3D
1 개요
기준 위치에 대해 여러 개의 카메라의 위치 및 각도에 의해 생성된 정점들을 하나의 정보로 합치는 알고리즘
2 알고리즘 상세 설명
Source Data | Result Data |
---|---|
![]() ![]() |
![]() |
하지만 이 알고리즘을 이용하여 서로 엇갈리게 설정한 여러 카메라가 나타낸 정점 정보들을 기준이 되는 지점에서 바라볼 때 나타나는 정점 정보로 변환 및 합침으로써 카메라 화각 이상의 넓은 범위의 정보를 취득할 수 있습니다. AMR, AGV 등에 여러 개의 카메라가 적용된 장비에 적용 가능하여 더 많은 상황에 대처할 수 있습니다.
3 파라미터 설정 및 사용 방법
다음 함수를 반복 사용하여 각 카메라의 정보와 그 카메라로부터 얻은 정보를 등록합니다.
const CResult AddSourceObject(const Foundation::CFL3DObject* pFl3DOD, const Base::TPoint3<float> tpPosition, const Base::TPoint3<float> tpRotation)
이후 다음 함수를 통해 좌표 정보가 병합된 하나의 객체를 얻어올 수 있습니다.
const CResult GetDestinationObject(Foundation::CFL3DObject &fl3DOD)
계산 과정에서 어느 정보를 보존하고 어느 정보를 버리는지를 지정할 수 있습니다.
const CResult EnableVertexColors(bool bUse = true)
const CResult EnableNormalVectors(bool bUse = true)
const CResult EnableFaces(bool bUse = true)
기본 오일러 각도 순서와 다른 순서를 사용하고 싶다면 다음 함수를 사용할 수 있습니다:const CResult SetEulerSequence(Foundation::EEulerSequence eEulerSequence = Foundation::EEulerSequence_Intrinsic_ZXY)
4 예제 코드
CPerspectiveMerge3D perspectiveMerge3D;
CFL3DObject floSource0;
floSource0.Load(L"C:/Users/Public/Documents/FLImaging/ExampleImages/PerspectiveMerge3D/Left Cam.ply");
TPoint3<float> tpPosition0(-0.153500f, 0.000000f, 0.000000f);
TPoint3<float> tpRotation0(90.000000f, -8.000000f, 29.000000f);
perspectiveMerge3D.AddSourceObject(floSource0, tpPosition0, tpRotation0);
CFL3DObject floSource1;
floSource1.Load(L"C:/Users/Public/Documents/FLImaging/ExampleImages/PerspectiveMerge3D/Right Cam.ply");
TPoint3<float> tpPosition1(0.153500f, 0.000000f, 0.000000f);
TPoint3<float> tpRotation1(90.000000f, -8.000000f, -29.000000f);
perspectiveMerge3D.AddSourceObject(floSource1, tpPosition1, tpRotation1);
CFL3DObject floDestination;
perspectiveMerge3D.SetDestinationObject(floDestination);
perspectiveMerge3D.Execute();