[2023-07-17] 4. Perspective-n-Points
Perspective-n-Points
Perspective-n-Points
- PnP Problem
- 2D 데이터와 3D 데이터간의 correspondence가 주어졌을 때 world -> camera transformation을 추론하는 것이 목적
- 카메라가 3D Map을 바라보고 있을 때, 이미지 feature -> 3D Points 간의 Correspondence를 구했다고 하면, 이 정보를 통해 현재 카메라의 Pose를 추정하는 것이 목적
- 이때 몇 개의 2D -> 3D Correspondence를 사용하느냐에 따라 n의 숫자가 정해짐
- 카메라가 3D Map을 바라보고 있을 때, 이미지 feature -> 3D Points 간의 Correspondence를 구했다고 하면, 이 정보를 통해 현재 카메라의 Pose를 추정하는 것이 목적
-
이미지에서 feature을 뽑고, 3d map과 matching함으로써 3d map에서 나의 위치를 찾을 수 있게 함
- Localization과 직접적으로 관련있는 기술
- Visual Localization을 구현할 때 PnP 기법이 가장 중요한 부분으로 작용함
Triangulation에서는 2 view 상황에서 3d point x 의 위치를 찾는 법에 대해 알아봄
- 이때 우리는 3d point x에 연관된 descriptor는 왼쪽 카메라와 오른쪽 카메라에서 보인 descriptor 정보라고 이해할 수 있음
PnP 에서는 3d point x가 담고 있는 descriptor들과 현재 view에서 보이는 descriptor들을 매칭해서 2D -> 3D Correspondence를 구함
-
그리고 충분한 수의 2D -> 3D Correspondence가 만들어지면 이 데이터를 통해 카메라의 Pose(6 DoF : tx, ty, tz, rx, ry, rz)를 구함
-
6 자유도의 데이터를 구하기 위해서는 6개의 데이터가 필요함
-
2D -> 3D Correspondence에서 Image feature인 u1, u2, u3과 그에 해당하는 3D Point p1, p2, p3 총 3쌍(6개 데이터)를 사용하는 p3p가 minimal solver가 됨
-
하지만 p3p 알고리즘은 노이즈를 전혀 고려하지 않아서 RANSAC과 같은 outlier rejection이 필요해 p3p를 사용할 때는 RANSAC 프레임워크에서 돌리는 경우가 많음
-
OpenCV 함수
- PnP의 경우 데이터 자체를 픽셀로 계산하므로 Calibrated Camera인 K Matrix를 아는 경우에서만 사용할 수 있음
- 최신 VSLAM들이 생성된 Map을 기반으로 Pose tracking을 하기 위해 사용
P3P Grunert
P3P
전제 상황
- World Coordinate 기준으로 3D Point X1, X2, X3의 위치를 알고 있음
- 카메라 이미지 위의 작은 X’1, X’2, X’3 을 픽셀 위치로 알고 있음
- Optical Center로부터의 픽셀 위치를 알고 있음
- Estimate length of projection rays
- Estimate the Orientation
- s_i : ray의 길이
- k_x_i _s : Object 포인트를 향하고 있는 ray의 방향 벡터
- R : World -> Camera transformation의 회전값