본문 바로가기

VISION/Stereo Vision

Stereo Vision : Triangulation

1. Triangulation이란?

두개의 영상이 하나의 3D점을 찍어서 나온 결과라고 생각해보자. 

먼저 영상 1의 한점 x가 3D점 X의 투영결과라고 보면, 카메라 행렬 P로 나타낼수 있다.

 즉 x = P'X  

그렇다면 X를 X= inv(P)x 로 구할수있을 것이다. 

그러면, 3D 점 X 를 카메라에서 본 x과 x' 는 한점에서 만날것인가? 

영상의 잡음 때문에 single solution은 불가할 것이다.

결론적으로 Triangulatio 문제는 다음으로 정의된다. 2d 점들과 카메라 행렬들을 이용, 원래 3D점을 찾는 문제.

2. 3D 계산하기

2D 점 x는 homogeneous coordinate 이다. 

깊이를 모르기 때문에 정확하게 3D 점이 어디 있는지는 알수가 없다. (2개의 영상이 있어서 정의될 것이다. )

즉 x = aPX 라고 할수 있을 것이다. (벡터는 같은 방향이지만 길이[scale factor]는 모르는 상태)

이를 Similarity Relation이라고 한다. 이를 어떻게 풀수 있을까?

위에 식에서 좌측은 inhomogenous [x, y, z] 우측 3D점은 homogenous [X, Y, Z, 1]임을 확인하자.

( 여기서 a = z 인가? )

 

벡터의 방향은 같으나 크기가 다를 경우,

x 와 aPX의 외적 (cross product) = 0 임을 이용하자.

a가 없어지며 좌측이 다시 homogeneous 좌표계로 변경된 것도 확인하자.

위에 식에서 3번째 라인은 1번째과 2번째의 선형 조합이므로 1, 2번째 라인만 이용하자. 

첫번째 카메라의 경우와 두번째 카메라의 경우를 합치면,

 

Ax=0 의 homogenous linear system의 해는?

늘 그렇듯이 SVD를 이용하자!

단, Homography 를 계산할 때는 H= 3x3 행렬이므로, AH=0 에서

H를 마지막 Vt의 열벡터 [9x1]로 만들어 주고, 계산한 후에 다시 reshape를 통해 [3x3] 행렬로 최종적으로 변환해주지만,

여기서는 X 자체가 [4x1]의 열벡터이므로, Vt의 최우측 열벡터가 바로 X가 된다.