2D-3D 대응점
알려진 맵 안의 개의 3D 점 와 카메라 이미지에서의 그 2D 투영점 가 주어지면, Perspective-n-Point (PnP) 문제는 카메라 자세 를 추정한다. 이는 맵이 이미 존재할 때 SLAM 시스템이 새 프레임마다 위치를 추정하는 표준적인 방법이다.
P3P
Perspective-3-Point 문제는 정확히 3개의 대응점을 사용한다 — 자세의 6 자유도(각 2D 점이 2개의 제약을 준다)에 맞는 최소 사례다. 기하학적으로는 고전적인 “코사인 법칙” 시스템으로 환원된다: 시선 사이의 세 각도는 이미지로부터 알 수 있고, 점 사이의 세 거리는 맵으로부터 알 수 있으며, 이로부터 최대 4개의 실수 해를 갖는 다항식 시스템이 나온다. 4번째 대응점으로 모호성을 해소한다. 필요한 점의 수가 매우 적기 때문에, P3P는 RANSAC 안에서 선택되는 최소 해법이다 — 필요한 반복 횟수는 샘플 크기에 대해 지수적으로 증가하므로, 은 더 큰 해법에 비해 큰 이점을 가진다.
EPnP
EPnP (Lepetit et al., 2009)는 개의 3D 점을 4개의 가상 제어점(virtual control point)의 가중합으로 표현하여, 과 무관하게 12개의 미지수(카메라 프레임에서의 제어점 좌표)를 추정하는 문제로 PnP를 환원한다. 복잡도 덕분에 대규모 대응점 집합에서도 효율적이며, 많은 파이프라인의 기본값이다 (cv::solvePnP가 직접 지원한다).
DLT와 SVD의 역할
직접 선형 변환(DLT)은 개의 대응점으로부터 투영 행렬 전체를 동차 선형 시스템으로 풀어내며, SVD를 사용한다: 해는 가장 작은 특이값에 대응하는 오른쪽 특이 벡터다. 자세는 이후 의 분해(내부 파라미터도 모를 때는 RQ 분해)를 통해 추출된다. DLT는 더 단순하지만 EPnP보다 정확도가 낮다. 실무에서는 둘 중 하나가 재투영 오차를 최소화하여 정제되는 초기화 역할을 한다.
비선형 정제 (모션 전용 번들 조정)
어떤 해법이 초기 자세를 제공하든, 정확한 답은 맵 점을 고정한 채 자세만에 대해 재투영 오차를 최소화하는 데서 나온다:
여기서 는 카메라 투영 함수이고, 는 남아 있는 이상치의 영향을 제한하는 강건 커널(예: Huber)이다. 이는 몇 번의 반복으로 가우스-뉴턴 또는 레벤버그-마쿼트로 풀리며 — 특징 기반 SLAM에서 매 프레임마다 실행되는 “모션 전용 BA(motion-only BA)” 단계다.
일반적인 파이프라인
- 현재 프레임의 키포인트를 맵 점과 매칭한다 (디스크립터 매칭 또는 투영 기반 탐색).
- P3P를 이용한 RANSAC으로 이상치 매칭을 제거하고 초기 자세를 얻는다.
- 모든 인라이어에 대해 비선형 최소제곱법(재투영 오차에 강건 커널 적용)으로 자세를 정제한다.
흔한 함정
- 퇴화된 점 구성: 3D 점이 공평면(더 나쁘게는 공선)이면 DLT는 실패한다. EPnP와 P3P는 평면을 더 잘 처리하지만, 사용 중인 해법의 가정을 항상 확인해야 한다.
- 적은 점 수에서의 모호한 해: P3P의 최대 4개 해는 모호성을 해소해야 한다 — 잘못된 근을 정제 단계에 넘기면 잔차는 낮지만 틀린 자세로 수렴한다.
- 맵 점의 품질이 자세 품질의 한계를 결정: PnP는 3D 점을 완벽한 것으로 취급한다. 삼각측량이 부실한(시차가 작은) 랜드마크는 자세를 체계적으로 편향시킨다. 이것이 점까지도 함께 움직이는 완전한 번들 조정이 결국 프레임 단위 PnP를 능가하는 이유다.
- 보정되지 않은 왜곡: 왜곡을 먼저 보정하지 않은 픽셀 좌표에 PnP를 적용하면 그럴듯해 보이지만 편향된 자세가 나온다.
SLAM에서의 의미
PnP는 특징 기반 SLAM의 추적 근간이다: ORB-SLAM은 매 프레임마다 로컬 맵 점과 매칭하여 PnP를 풀어 추적하며, 추적 실패 후 재지역화도 장소 인식 후보에 대한 PnP다. 비주얼 로컬라이제이션 서비스(질의 이미지 대 사전 구축 맵)가 카메라 자세를 계산하는 방식도 마찬가지다. 2D-2D(초기화)와 3D-3D(포인트 클라우드 정렬)와 함께, PnP는 모든 SLAM 엔지니어가 알아야 할 세 가지 대응점 문제의 삼두마차를 완성한다.