PnP는 3D에서 2D로의 움직임을 추정하기 위한 방법입니다. 주어지는 것들은 다음과 같습니다.
•
개의 3D 공간 상의 점
•
3D 점들이 2D 평면에 projection 되는 점의 위치
2D - 2D epipolar geometry에서는 8개 이상의 점들이 필요했다 (8-Point Algorithm).
하지만 PnP에서는 적어도 3개 이상의 3D-2D 매칭쌍들만 알면 카메라의 움직임을 추정할 수 있다.
쉽게 말해 PnP를 통해, epipolar constraint 없이, 더 적은 매칭쌍으로 , 더 좋은 추정 결과를 얻을 수 있다.
이러한 PnP 문제를 푸는 방법에는 DLT, EPnP, UPnP, P3P 등등이 있고, 이 모든 방법들은 non-linear Optimzation을 이용하여 iteratively 하게 푼다. 이러한 방법을 Bundle Adjustment라고 한다.
PnP를 푸는 알고리즘들을 몇 개만 살펴보자.
1. DLT(Direct Linear Transformation)
임의의 3차원 상의 점 가 주어지고, 그것의 Homogeneous Coordinate 라고 하자, 이 3D Point가 이미지 평면 에 Projection되고,
이 때 Projection된 2D Point를 라고 하자. 이러한 가정이 주어진다면, 2D-3D 관계를 아래와 같은 수식을 나타낼 수 있다.
위의 식을 에 대해 풀어 내면, 아래 처럼 나타낼 수 있다.
식 표현의 편의를 위해, 를 row vector의 형태로 만들면,
방금 구한 에 대한 식을 변형하면 아래와 같은 식으로 정리할 수 있다.
우리의 목표는 행렬 의 원소들 를 구하는 것이 목적이다. 구하고자 하는 미지수는 12개인데, 매칭쌍 하나로는 2개의 방정식이 주어지므로, 적어도 6개의 매칭쌍이 필요하다는 것을 알 수 있다.
N개의 매칭쌍이 주어진다면, 아래와 같은 연립방정식의 형태로 나타낼 수 있다.
이런 방식으로 Rotation, Translation을 구하는 방식을 DLT라고 한다.
일반적으로, 주어지는 매칭쌍은 6개를 훨씬 상회하는 경우가 대부분이다.
그렇다면 방정식의 개수가 미지수의 개수보다 많은 형태를 띄게 되고, 이는 Overdetermined equation이 된다. 따라서 이를 실제로 풀기 위해서는 SVD를 이용하여 Least Square solution을 찾아야 한다.
더불어, 일반적으로 SLAM을 진행하는데 있어서, Intrinsic Parameter 는 Calibration 과정을 통해 이미 알고 있다고 전제하고 위의 과정을 진행하게 된다. 물론 위의 과정을 통해 Intrinsic Parameter를 추정할 수도 있지만, 미지수가 늘어나는 만큼 결과또한 좋지 못하기 때문에, Calibration을 통해 미리 얻은 값을 가지고 DLT를 진행하게 된다.
2. P3P
앞서 DLT 방법이 최소 6개 이상의 매칭쌍들을 이용했는데, P3P는 오직 3개의 매칭쌍을 필요로 한다.
주어진 3점 사이의 기하학적 관계를 이용하여 추정하게 되는데 아래와 같이 나타낼 수 있다.
3D point 점들이 로 주어지고 그에 해당하는 (Projected) 2D Point를 라고 하자.
위 그림에서 보면 알 수 있듯이,
삼각형 간의 관계를 아래와 같이 나타낼 수 있다.
제2코사인법칙을 이용하여 각 삼각형 간의 식을 서술하자.
위의 3개의 식의 양변을 로 나눠주고, , 로 치환하면,
아래와 같이 서술할 수 있다.
각 우변에 해당하는 것들을 로 치환하고 위 식을 다시 쓰면
1번 째 식을 에 관한 식을 만든 뒤, 아래 2,3번째 식에 넣어 정리하면 아래와 같은 에 대한 방정식 2개를 얻을 수 있다.
위의 식에서 는 2D Point의 위치를 알고 있다는 가정에 의해 구할 수 있는 값이다. 또한 의 경우 월드 좌표계에서 의 좌표를 알고 있기 때문에 구할 수 있는 값이다. 2개의 방정식에 2개의 미지수이므로 를 구할 수 있으며,
풀게 되면 4개의 가능한 쌍이 나온다. (Essential Matrix를 구할 때도 4개의 쌍이 나왔단 것을 떠올리자.) 이 중에서 하나를 선택하기 위해 1개의 additional matching pair를 이용하여 최적의 를 구한다.
의 값을 구하게 되면, 카메라 좌표계에서의 3D Point 를 구할 수 있으며, 이를 통해 2D - 3D 문제를 3D - 3D pose estimation 문제로 바꿔 풀 수 있다. 흔히들 이러한 방법을 ICP라고 한다.
이러한 P3P도 단점이 존재한다. 3개의 데이터만 사용하기 때문에 더 적은 데이터를 요구하지만, 오히려
1.
오직 3개의 점만 가지고 추정하기 떄문에, 오히려 3개보다 많은 점들이 입력되면 추정하기 더 어렵다.
2.
추정에 사용되는 3개의 점이 노이즈나 잘못 매칭되었을 때 성능이 떨어질 수 있다.