Multiple View Geometry (다중관점기하학)

Sinaenjuni·2024년 6월 4일
0

SLAM

목록 보기
14/14

여러 카메라 뷰를 통해 얻은 이미지에서 3차우너 공간의 구조를 추론하는 이론이다.

Projective space

RPn=Rn+1{0}\mathbb{R}\mathbb{P}^{n} = \mathbb{R}^{n+1} - \{0\}

사영공간 Pn\mathbb{P}^{n}Rn+1\mathbb{R}^{n+1} 공간 상의 원점을 지나는 직선들을 의미한다. 따라서 원점을 제외한 Rn+1\mathbb{R}^{n+1} 공간 상의 모든 원소를 포함한다. 실수만 취급하는 경우 RPn\mathbb{R}\mathbb{P}^{n}로 표현한다.

3차원 공간상의 점들을 특정 평면 위에 프로젝션하여 R2\mathbb{R}^2와 동일하게 2차원 공간상의 한 점, 직선 그리고 곡선 등의 표현이 가능하다. 이는 카메라로 촬영된 이미지를 투영하는 과정의 일부라고 볼 수 있다.

반대로 생각하면, 이미지에 존재하는 픽셀은 원점에서 나오는 ray 상의 모든 점에 매칭될 수 있다.

점과 직선을 3차원 벡터로 연산할 수 있기 때문에 SLAM을 하는데 있어 많은 이점을 갖는다.

Homogeneous presentation of line

평면위의 점은 x=(x,y)R2x=(x,y) \in \mathbb{R}^2 로 표현이 가능하고, 직선 l:ax+by+x=0,(a,x)0l:ax+by+x=0,(a,x)\neq0 로 표현할 수 있다. 이때 직선 l은 우변이 0이기 때문에 상수배에 대해서 유일하지 않은것을 알 수 있다.

l:kax+kby+kx=0l:kax+kby+kx=0
(ka,kb,c)=(a,b,c)(ka,kb,c) = (a,b,c)

또한 직선은 선형대수의 파라미터 관점에서 l:(a,b,c)l:(a,b,c)로 나타낼 수 있다.

따라서 평면위의 직선 ll은 스케일 kk에 관계없이 모두 같은 직선을 의미한다. 이러한 동치 관계에 있는 벡터를 homogeneous 벡터라고 한다.

Homogeneous presentation of point

직선 l:(a,b,c)Tl:(a,b,c)^{T}과 그 위의 한 점 x=(x,y)Tx=(x,y)^{T} 사이에는 다음 벡터 공식이 성립한다.

xTl=[xy1][abc]=[xy1]l=0x^Tl= \begin{bmatrix}x&y&1 \end{bmatrix} \begin{bmatrix} a\\b\\c\end{bmatrix} = \begin{bmatrix}x&y&1 \end{bmatrix}l = 0

한 점과 그 점을 지나는 직선은 내적했을 때 0이 되는 것을 볼 수 있다. 직선 ll은 스케일 kk의 값과 관계없이 하나의 직선을 표현할 수 있다.

kxTl=[kxkyk][abc]=[kxkyk]l=0kx^Tl= \begin{bmatrix}kx&ky&k \end{bmatrix} \begin{bmatrix} a\\b\\c\end{bmatrix} = \begin{bmatrix}kx&ky&k \end{bmatrix}l = 0

Duality of points and lines

x=l×ll=x×xx=l\times l^\prime \\ l=x\times x^\prime

P2\mathbb{P}^2 공간 상의 두 직선과 두 직선의 교차점은 외적(cross product)로 구할 수 있다. 이처럼 점과 직선의 위치를 바꿔도 동일한 공식을 의미한다. 이런 특성을 점과 직선의 대칭성(duality)이라 한다.

Projective transformation in 2D

P2\mathbb{P}^2 공간 상의 사영변환은 3×33\times3 크기의 행렬 HH로 정의되며 P2P2\mathbb{P}^2 \rightarrow \mathbb{P}^2 로 보내는 사상함수를 의미하며, 일반적으로 Homography라고 한다.

x=Hxx^\prime=Hx

Isometry

물체의 회전과 평행 이동을 정의하는 변환 행렬이다. 물체의 크기는 보존된다. A는 2차원에 대한 회전행렬로 물체의 회전을 t는 2차원 벡터로 평행 이동을 표현한다.

Hiso=[At01]R3×3H_{iso} = \begin{bmatrix} A&t\\0&1 \end{bmatrix} \in R^{3\times3}

Similarity

Isometry 변환에 스케일 상수 s가 추가된 변환을 의미한다. 물체의 각도와 길이의 비율은 보존 되지만 크기는 보존되지 않는 변환을 의미한다.

Hs=[sAt01]R3×3H_{s} = \begin{bmatrix} sA&t\\0&1 \end{bmatrix} \in R^{3\times3}

Affine

Isometry 변환에 A 행렬에 아무런 조건이 없는 변환행렬을 의미한다. 변환 후 물체는 일반적으로 변환 전과 다른 형태를 갖는다. 평행한 직선은 보존하는 성질을 갖는다.

HA=[At01]R3×3H_{A} = \begin{bmatrix} A&t\\0&1 \end{bmatrix} \in R^{3\times3}

Projective

Isometry 변환에 마지막 행이 [001]\begin{bmatrix} 0&0&1 \end{bmatrix}이 아닌 임의의 형태를 갖는 변환 행렬을 의미한다. 직선을 직선을 사상하는 성질 외에는 아무런 성질을 보존하지 않는다.

HP=[AtVTv]R3×3H_{P} = \begin{bmatrix} A&t\\V^{T}&v \end{bmatrix} \in R^{3\times3}

Pinhole camera model

카메라가 작은 구멍(pinhole)을 통해 3차원 물체를 2차원 이미지로 매핑하는 수학적 카메라 모델링 방법이다. 수학적 카메라 모델링 방법 중 개념이 가장 직관적이고 비교적 연산이 단순하기 때문에 보편적으로 사용되는 모델링 방법이다.

계산의 편의를 위해 일반적으로 가상의 이미지 평면을 앞에 위치시켜 해석한다. 실제 카메라의 경우 이미지를 상하좌우를 반적시키지만 이를 영상으로 받아오는 과정에서 역순으로 읽음으로써 우리가 보는 일반적인 영상으로 확인이 가능하다.

카메라의 정면을 z축으로 직교 좌표계로 표현이 가능하다.

Compute 2D point from 3D point

2차원 점 x=(x,y,f)Tx=(x,y,f)^{T}에서 x축의 좌표는 다음과같은 비례식으로 구할 수 있다.

f:x=Z:XxZ=fXx=fXZ\begin{aligned} f:x &= Z:X \\ xZ &= fX \\ x &= \frac{fX}{Z} \end{aligned}
X=(X,Y,Z,1)TP3x=(fXZ,FYZ,f)TX=(X,Y,Z,1)^{T}\in\mathbb{P}^3 \rightarrow x=(\frac{fX}{Z},\frac{FY}{Z},f)^{T}

projection matrix P

프로젝션 행렬 P는 P3\mathbb{P}^3 공간 상의 점 x를 P2\mathbb{P}^2 공간 상의 한 점xx로 변환하는 행렬이다.

P:[XYZ1][fXfYZ]=[f0f0f0][XYZ1]P: \begin{bmatrix}X\\Y\\Z\\1\end{bmatrix}\mapsto \begin{bmatrix}fX\\fY\\Z\end{bmatrix}= \begin{bmatrix}f&&&0\\&f&&0\\&&f&0\end{bmatrix} \begin{bmatrix}X\\Y\\Z\\1\end{bmatrix}

위 행렬은 3차원 공간상의 한 점을 2차원 평면에 mapping하는 함수라고 볼 수 있다.


2차원 평면에 사상한 한 점을 이미지 상에 표현하기 위해서는 이미지의 중간인 주점을 더해주어야 한다.

P:[XYZ1][fX+ZpxfY+ZpyZ]=[fpx0fpy0f0][XYZ1]P: \begin{bmatrix}X\\Y\\Z\\1\end{bmatrix}\mapsto \begin{bmatrix}fX+Zp_x\\fY+Zp_y\\Z\end{bmatrix}= \begin{bmatrix}f&&p_x&0\\&f&p_y&0\\&&f&0\end{bmatrix} \begin{bmatrix}X\\Y\\Z\\1\end{bmatrix}

이 사상 함수를 내부 파라미터 행렬(intrinsic matrix) [K0]\begin{bmatrix}K|0\end{bmatrix}이라고 한다.

Camera rotations and translation

일반적으로 카메라 좌표계(CC)는 월드 좌표계(WW)와 다르다. 따라서 월드 좌표계를 기준으로 나타난 3차원 좌표를 카메라 관점으로 투영하기 위해서는 좌표계 변환를 수행해야 한다. 그리고 이는 선형대수의 기저 변환의 관점에서 볼 수 있다

T=[r11r12r13t1r21r22r23t2r31r32r33t30001]T=\begin{bmatrix} r_{11}&r_{12}&r_{13}&t_1\\ r_{21}&r_{22}&r_{23}&t_2\\ r_{31}&r_{32}&r_{33}&t_3\\ 0&0&0&1 \end{bmatrix}
XC=PXc=[K0]TXo=[K0][Rt]XoP=K[Rt]R3×4\begin{aligned} X_C=PX_c&=\begin{bmatrix}K|0\end{bmatrix}TX_o \\ &=\begin{bmatrix}K|0\end{bmatrix}\begin{bmatrix}R|t\end{bmatrix}X_o \\ \therefore P&=K\begin{bmatrix}R|t\end{bmatrix} \in \mathbb{R}^{3\times4} \end{aligned}

Perspective n points(PnP, P6P DLT) algorithm

3차원과 2차원 상의 대응쌍 (Xi,Xw)(X_i, X_w)이 여러개 주어진 경우 이를 사용하여 projection matrix PP를 구할 수 있다.

XI=PXWXI=[uvs]TXW=[xyz1]T\begin{aligned} X_I&=PX_W \\ X_I&=\begin{bmatrix} u&v&s\end{bmatrix}^T \\ X_W &=\begin{bmatrix} x&y&z&1\end{bmatrix}^T \\ \end{aligned}

Projection matrix를 월드 좌표계를 기준으로 한 3차원 공간상의 한 점을 이미지 평면상의 한 점으로 사상시키는 함수로 봤을 때, 위와 같은 식으로 나타낼 수 있다.

XI×PXW=[sprow2TXwvprow3TXwuprow3TXwsprow1TXwvprow1TXwuprow2TXw]=0\begin{aligned} X_I\times PX_W & = \begin{bmatrix} sp^T_{row2}X_w - vp^T_{row3}X_w \\ up^T_{row3}X_w - sp^T_{row1}X_w \\ vp^T_{row1}X_w - up^T_{row2}X_w \end{bmatrix} \end{aligned}=0

XiX_iPXwPX_w는 서로 같으므로 같은 벡터는 외적의 값이 0인 특성을 이용하여 위 식과 같이 정의할 수 있다.

[0sXWvXWsXW0uXW]AR2n×12[Prow1TProw2TProw3T]PR12=0\underbrace{\begin{bmatrix} 0&sX_W&-vX_W\\ -sX_W&0&-uX_W\\ \end{bmatrix}}_{A\in\mathbb{R}^{2n\times 12}} \underbrace{\begin{bmatrix} P^T_{row1} \\ P^T_{row2}\\ P^T_{row3}\\ \end{bmatrix}}_{P\in\mathbb{R}^{12}} =0

일반적인 상황에서는 데이터가 노이즈를 포함하고 있기 때문에 A는 항상 full rank이며 null sapce가 존재하지 않는다. 따라서 SVD 분해를 통해 행렬 분해를 수행한 후 VTV^T의 가장 마지막 열벡터를 구함으로써 해를 구할 수 있다. 변수가 11개(스케일 제외) 이기 때문에 적어도 6개의 대응쌍이 있어야 해를 구할 수 있다.

하지만, 해당 알고리즘은 부정확성으로 인해 사용되지 않으며, Reprojection error를 이용한 최적화 방법에 초기값을 찾는 방법으로 응용된다.

Distortion model

Redial distortion

카메라 자체의 왜곡을 의미한다.

xdistorted=x(1+k1r2+k2r4+k3r6)ydistorted=y(1+k1r2+k2r4+k3r6)r=x2+y2x_{distorted} = x(1+k_1r^2+k_2r^4+k_3r^6) \\ y_{distorted} = y(1+k_1r^2+k_2r^4+k_3r^6) \\ r=\sqrt{x^2+y^2}

Tangential distortion

렌즈와 센서의 물리적인 차이에 의해서 나타나는 왜곡을 의미한다.

xdistorted=x+2p1xy+p2(r2+2x2)ydistorted=y+p1(r2+2y2)+2p2xyx_{distorted} = x + 2p_1xy + p_2(r^2 +2x^2) \\ y_{distorted} = y + p_1(r^2 + 2y^2) +2p_2xy

위 두 식은 아래와 같이 하나의 식으로 합칠 수 있다.

xdistorted=x(1+k1r2+k2r4+k3r6)+2p1xy+p2(r2+2x2)ydistorted=y(1+k1r2+k2r4+k3r6)+p1(r2+2y2)+2p2xyx_{distorted} = x(1+k_1r^2+k_2r^4+k_3r^6) + 2p_1xy + p_2(r^2 +2x^2) \\ y_{distorted} = y(1+k_1r^2+k_2r^4+k_3r^6) + p_1(r^2 + 2y^2) +2p_2xy

일반적으로 k1,k2,k3,p1,p2k_1,k_2,k_3,p_1,p_2 파라미터 중 필요에 따라 일부만 구해하여 최적화를 수행한다.

Zhang's method (Checkboard cailbration, ICCV 1999)

가장 보편적으로 사용되는 Camera calibration 방법으로 위 그림과 같이 체크 모양이 그려진 이미지를 통해 행렬 P를 구한다.

월드 좌표계를 체커보드의 코너점으로 설정함으로써 Z=0Z=0인 평면에 3차원 점들이 배치되어 있는 것으로 가정한다. 따라서 Xw=(X,Y,0)TX_w=(X,Y,0)^T 처럼 ZZ축을 고려하지 않아도 되는 문제로 바뀐다.

XI=PXw[uv1]=K[r11r12r13t1r21r22r23t2r31r32r33t30001][XY01]\begin{aligned} X_I &=PX_w \\ \begin{bmatrix} u&v&1 \end{bmatrix}&= K \begin{bmatrix} r_{11}&r_{12}&r_{13}&t_1\\ r_{21}&r_{22}&r_{23}&t_2\\ r_{31}&r_{32}&r_{33}&t_3\\ 0&0&0&1 \end{bmatrix} \begin{bmatrix} X\\Y\\0\\1\end{bmatrix} \end{aligned}

회전 행렬의 경우 세번째 열을 최적화에서 제외할 수 있기 때문에 최적화할 파라미터를 줄일 수 있다. 따라서

K[rcol1,rcol2,t]R3×3K[r_{col1}, r_{col2},t] \in \mathbb{R}^{3\times3}

3×33\times3 행렬로 정의할 수 있으며, 체크보드 평면에서 이미지 평면으로 변환하는 homography 변환으로 볼 수 있다. (평면과 평면과의 변환 관계로 생각할 수 있다.)

체커보드는 패턴의 길이와 개수를 모두 알 수 있으며, 동시에 이미지 상에 코너와 같은 특징을 통해 점을 추출할 수 있다. 이 두 데이터 쌍을 통해 calibration을 하는 것이다.

[hcol1hcol2hcol3]know=Kunknow[rcol1rcol2t]unknown\underbrace{ \begin{bmatrix} h_{col1}&h_{col2}&h_{col3} \end{bmatrix}}_{know}=\underbrace{K}_{unknow} \underbrace{ \begin{bmatrix} r_{col1}&r_{col2}&t \end{bmatrix}}_{unknown}

체크보드와 이미지 평면위에 점들의 homography 변환으로 봤을 때, 위와 같은 변환 행렬을 정의할 수 있다.

  1. 회전행렬은 열벡터 간의 직교하기 때문에 직교하는 벡터의 내적은 0인 특성을 이용하여 해결한다.
    $$
2.2.

0개의 댓글

관련 채용 정보