Priceless

[VSLAM]Perspective N Points 본문

SLAM/Visual SLAM

[VSLAM]Perspective N Points

Hyun__ 2023. 12. 3. 18:05

Perspective N Points

PnP Problem

정의

n개의 데이터에서

2D 데이터와 3D 데이터 간의 correspondence가 주어졌을 때

world-to-camera transformation을 추론하는 문제이다

 

카메라가 3D 맵을 바라볼 때 correspondence를 구했다면

이 정보를 가지고 현재 카메라 pose를 추정한다

 

이 중 몇 개의 correspondence를 사용하냐에 따라

n의 수가 달라진다

 

이미지로부터 feature를 뽑고 map과 매칭하면서

map에 대해서 나의 위치를 찾을 수 있다

Localization과 관련있다

 

pnp는

3D point x가 담고 있는 descriptor들과 현재 뷰에서 보이는 descriptor들을 매치해서

2D to 3D correspondence를 구한다

충분한 페어의 수가 correspondence가 만들어진다면 

이 데이터를 통해 카메라의 pose를 구한다

 

카메라의 Pose를 구하므로 6 자유도를 가지고 있다

x,y,z의 translation과 rotation을 가진다

 

6개의 자유도를 구하기 위해 6개의 방정식이 필요하다

2D to correspondence에서 이미지 feature인 u와 이에 해당하는 3D point P인 (u,P) 가 3쌍 필요하다 

 

p3p 알고리즘은 noise를 전혀 고려하지 않으므로

RANSAC과 같은 rejection 알고리즘이 필요하다

OpenCV implementation

PnP의 경우

OpenCV에 잘 구현이 되어 있다

함수의 방식을 고르기 위해 flag에 다른 값들을 입력하여

다양한 PnP 방법을 시도할 수 있다

 

 

 

Minimal Solver - P3P Grunert Method

P3P

world coordinate 기준으로 세 점인 X1~3의 위치를 알고 있고

camera image의 위치로 X'1~3를 알고 있을 때

optical center로 부터 픽셀 위치를 알고 있으므로 ray들 마다의 각도를 계산할 수 있고

X1~3 까지의 거리는 알지 못하므로 ray의 길이는 알 수 없다

2-Step process

1. projection rays에 대한 길이를 추론하고

2. 길이와 ray들의 각도를 사용하여 orientation을 추론한다

 

 

표현하고 싶은 정보 X1~3는 아래와 같이 나타낼 수 있다

s는 ray의 길이, i는 인덱스, kXsi는 ray의 방향 벡터, R은 world to camera coordinate transformation의 회전 값

 

 

-sign(x)는 카메라 상수(focal length)를 뜻한다

보통 카메라로 들어가는 방식으로 표현하여 음수로 설정한다

N은 정면으로 가는 벡터에 법선 벡터를 의미한다

x는 방향 벡터로 사용하기 위해 거리 값을 제외한 단위 벡터로 설정한다

K의 역행렬을 구하면 다시 원래 이미지로 돌릴 수 있다

 

 

 

Step 1 - Get length of projection rays

ray의 길이를 구하기 위해 

X1~3를 camera center에 연결한다

길이 s1~3를 설정한다

 

우선 ray들 간의 각도를 구한다

line 벡터를 통해 cos으로 구할 수 있다

점이 3개인 경우 모두 적용한다

 

 

 

X1~3의 3D point를 알고 있으므로 

3D point 간의 거리를 구할 수 있다

거리값 a~c를 구한다

 

이 값을 제곱하여 cosine 룰을 적용한다

 

 

 

이 정보를 기반으로 거리 값을 구한다

s를 활용하여 u, v 변수를 새로 만들어 식에서 s를 대체한다

s를 치환하여 a,b,c에 대한 오른쪽과 같은 식을 구한다

 

 

 

u를 식에서 없애면 아래와 같은 식이 나타난다

v만 남기면 4차 방정식이 나타난다

 

A 계수는 매우 복잡하게 나타난다

증명하기 보다는 코딩을 통해 바로 사용한다

 

V를 중심으로 풀고 나면

4차 방정식으로 풀었기 때문에 

해는 4개가 나온다

 

4가지 중에 하나만 물리적인 실제 값이므로

나머지 3개는 실제로 존재하지 않고 기하학적으로만 존재하는 값이다 

 

이 중 실제 물리 값을 찾기 위해

첫 번째로 다른 센서를 통해 검증을 거칠 수 있다

하지만 카메라 외의 다른 센서가 필요하다

 

두 번째로

다른 correspondence를 사용하여 orientation을 검증한다

 

이 방법을 사용하면 정확한 방법으로 구할 수 있으나

새로운 corresponse를 알아야 하므로 새로운 point를 알아야 한다

'SLAM > Visual SLAM' 카테고리의 다른 글

[VSLAM]Bundle Adjustment  (1) 2023.12.09
[VSLAM]최소자승법  (2) 2023.12.03
[VSLAM]Triangulation  (1) 2023.12.02
[VSLAM]RANSAC  (1) 2023.11.28
[VSLAM]Epipolar Geometry  (1) 2023.11.27