Perspective n Point (PnP) 문제란? 카메라 위치와 자세(R, t)를 구하는 방법 총정리

PnP 문제란 무엇인가?

이번 글에서는
Perspective n Point (PnP)
에 대하여 살펴보겠습니다. ​

Perspective n Point (PnP) 문제는
컴퓨터 비전과 로봇공학 분야에서
중요한 문제 중 하나로, ​

3차원 공간의 점들과
그 점들의 2차원 이미지 투영 사이의
관계를 ​이용해

카메라의 위치와 방향을
결정하는 과정입니다. ​

이 문제는 특히 증강 현실, 로봇 항법, 3D 재구성 등
​ 다양한 응용 분야에서 필수적입니다.​ ​

​ 위 설명만으로는 직관적으로
무슨 문제를 ​ 풀겠다는 건지
감이 안오므로 예시를 보겠습니다.

1 pnp

우리는 예전에 찍힌
사진들을 이용하여

이 사진이 ​ 어디에서
찍혔는지 찾아내곤 합니다.

2 pnp

즉, 이 사진을 촬영할 때의
카메라의 위치와 포즈를 찾을 수 있습니다.















PnP 문제를 풀기 위한 사전 지식


​ 들어가기 전에,
아래 내용을 모르시거나, ​

헷갈리시는 분들은
리마인드가 필요합니다.

3 외부파라미터
4 대응점
5 카메라행렬

이미 살펴봤던 내용이므로,
한번씩 다시 보시면 도움이 됩니다.




















PnP의 입력과 출력 구성

​ PnP 는 카메라의 위치와 포즈를
구하는 문제라고 했습니다. ​

우리가 문제를 풀면 P 를
구할 수 있게 되고 ​

P 는 K,R,t 로 구성되어 있습니다.

​ 문제를 풀기에 앞서서
Intrinsic parameters K 는
주어졌다고 가정하고 풀게됩니다.

6 K분해

R,t 가 목적이니까요.
​ 자, 그러면 이제 PnP 를
어떻게 푸는지 살펴보겠습니다.​ ​

7 K로 Rt 계산하기

P 는 3×4 matrix 입니다.
11 DoF 를 가지고 있습니다.

K 는 5 DoF 를 가지므로,
우리는 11-5 = 6 DoF 만 풀면 됩니다. ​

즉, 3개의 대응점이 필요합니다. ​

PnP 에서 n 은
Number of correspondence 를 의미합니다.

​ 대응점의 수가 많을 수록
Robust 해지고, ​

Ransac 도 이용할 수 있으므로
많은게 좋을 것 같습니다. ​

6DoF 이므로 최소
3개는 필요하므로, ​

P3P 가 최소 대응점으로
문제를 푸는 방법입니다.

최소 대응점으로 푸는 P3P 방식

8 p3p

P3P 를 살펴보겠습니다.

2D 이미지에서 3개의 점과
그에 대응되는 3D 점을 찾습니다.

9 p3p

대응이 된다는 것은
동일 ray 위에 ​ 위치한다는
것을 의미합니다.

10 recap

두 개의 벡터를 알면, ​
그 사이의 각도를 구할 수 있습니다. ​

이것을 이용해서 식을 풀어보겠습니다.

11 p3p
12 p3p

제 2 코사인 법칙으로
3개의 식을 만들어 냅니다.

13 p3p

식 3개를 이용하여
미지수 3개를 구할 수 있습니다.

14 p3p

문제는 이 식을 풀기가
매우 복잡합니다.

15 p3p

또한 풀었다고 하더라도,
4개의 가능한 해답이 나오고
​ 이 중에서 실제 정답은
1개 뿐이라,

한번 더 확인이 필요합니다. ​















효율적인 방법: EPnP 알고리즘



우리는 대응점을
SIFT 와 같은 알고리즘을
이용하여 무수히 많이 추출합니다. ​

따라서,
실제로는 EPnP 같은
방식을 사용합니다.

​ 여기서 E는 Efficient 의미를
가지고 있습니다.

16 epnp

하나의 Plane 위에 위치하지 않는
4개의 Control points 를 뽑습니다.

​ 그러면,
모든 점들을 선형 결합으로
표현 할 수 있습니다. ​

따라서 모든 점들을
4개의 Control points 를 ​
이용하여 Weighted sum 으로
표현할 수 있습니다. ​

이렇게 생긴 weight 은 coordinate 이
변하더라도 바뀌지 않습니다.

​ Control points 들과
해당 점 사이의 관계이기 때문입니다.

17 epnp

따라서 우리는 하나의 포인트마다
위와 같은 식을 만들 수 있습니다. ​

해당 식에서 맨 아랫줄
식을 먼저 구한 뒤, ​

식을 치환하여 2개의
식을 구할 수 있습니다.​ ​

18 epnp
19 epnp

즉, 정리하자면 Camera coordinate 에서
Control points 들을 알게되면 ​

Camera coordinate 에서
모든 Point 들을 알게 됩니다. ​

이제, Camera coordinate 의 포인트들과
World coordinate 의 포인트들
사이의 R,t 를 구하면 됩니다.















RANSAC, 비선형 최적화 통합

20 예시

OpenCV 에 잘 완성된 코드가 있습니다.

21 예시

실제 사용할 때는 RANSAC 과정과
​ Non-linear optimization 과정을
반복적으로 묶어서
사용하게 됩니다.

23 예시

항목P3PEPnP
의미Perspective-3-PointEfficient Perspective-n-Point
최소 대응점 수3개4개 이상
계산 방식삼각법 기반 코사인 법칙 활용4개 Control Points 기반 선형 결합 사용
계산 복잡도비선형, 해가 최대 4개까지 존재 가능선형화 + 효율적 계산
실제 적용 여부거의 사용되지 않음 (이론적 방법)OpenCV 등에서 실제로 많이 사용
RANSAC 사용필요필수 (Outlier 제거 + Robust 추정)



그런 건 난 잘 모르겠고,
PnP 는 카메라 위치와 방향
구하는 알고리즘

참고자료

Slide credit : Joo Hanbyul

https://homes.cs.washington.edu/~seitz/talks/3Dhistory.pdf

댓글 남기기