Single-View Geometry

일단 우리의 목표는 한 3D 구조를 재건하는 것이다. 그러나 하나의 이미지는 깊이 정보를 갖고 있지 않기 때문에 정확하게 재건할 수 없다. 따라서 우리는 multi-view geometry가 필요하다.

Principal Point Offset

principal axis는 카메라 중심에서부터 이미지 평면에 수직으로 들어오는 선이다. principal point란 principal axis가 이미지 평면과 만나는 점이다. 따라서 normalized coordinate system 상의 원점은 principal point이다. 그런데 image coordinate system상의 원점은 좌측 하단이다. 따라서 image coordinate system에서 얻은 좌표를 normalized coordinate system에서의 좌표로 변환해야 한다. (normalized coordinate system에서의 좌표에는 음수도 존재한다.)

principal point의 좌표가 $(p_x, p_y)$라고 하면 normalized coordinate system에서의 좌표는 $(x, y, z) \rightarrow (f\frac{x}{z}, f\frac{y}{z})$가 되고, 이를 image coordinate system의 좌표로 나타내면 $(f\frac{x}{z}+p_x, f\frac{y}{z}+p_y)$가 된다. 이를 하나의 식으로 나타내면

인데, 첫번째 행렬은 intrinsic 행렬이고, 두번째 행렬은 projection 행렬이다. 이 때 이 intrinsic 행렬을 calibration 행렬이라고 하고, $K$로 표기한다. projection 행렬은 $[I\mid0]$로 표현될 수 있다. 따라서 이 때 곱해지는 행렬 $P$는 $K[I\mid0]$가 된다.

실제 이미지에서는 이렇게 바뀐 좌표를 pixel coordinate로 바꿔야 한다. 가로에는 $1$미터 안에 $m_x$개의 픽셀, 세로에는 $1$미터 안에 $m_y$개의 픽셀이 있다고 하자. 원래의 $K$행렬은 각 좌표를 미터 단위로 변환시켜주는데, 이 앞에 $1$미터 안에 들어있는 픽셀수를 곱해주면 픽셀 단위로 좌표를 변환시킬 수 있다. 따라서 pixel coordinate로 변환시켜줄 새로운 $K$는

가 된다.

Camera Rotation and Translation

카메라의 extrinsic 파라미터에 해당한다. 일반적으로 카메라를 땅과 평행하게 두고 촬영하지 않기 때문에 projection에 앞서 실제 좌표를 카메라 좌표로 옮기는 일도 필요하다. 여기에는 두 가지 과정이 있는데, 중심을 $(0, 0)$으로 맞추는 과정과 회전변환을 하는 과정이다. 이를 식으로 나타내면 $\tilde{\mathbf{X}}_{cam} = R(\tilde{\mathbf{X}}-\tilde{C})$ 가 된다. 하지만 이것은 $\tilde{\mathbf{X}} = (x, y, z)$라고 가정했을 때의 식이고, 이는 non-homogeneous이므로, homogeneous한 식으로 바꾸면

라고 쓸 수 있다. (한 차원을 추가해서 그 차원을 상수 $1$로 고정, $\mathbf{X}=\left(\begin{matrix} \tilde{\mathbf{X}} \ 1\end{matrix}\right)$)

최종적으로 $\mathbf{x} = K[I\mid0]\mathbf{X}_{cam} = K[R\mid-R\tilde{C}]\mathbf{X}$가 되고, projection 행렬 $P$는 $P = K[R\mid-R\tilde{C}]$가 된다.

Radial Distortion

intrinsic 파라미터 중 하나이다. 카메라 렌즈의 굴절에 의해 일어나는 왜곡으로써, 렌즈의 중앙과 멀어질수록 왜곡이 심하게 일어난다. 왜곡 모델은 다음과 같다.

먼저, $(\hat{x}, \hat{y}, \hat{z})$를 normalized coordinate로 옮긴다.

그 후 radial distortion을 적용한다.

마지막으로 을 적용한다.

Camera calibration : Linear Method

그렇다면 $P$는 어떻게 찾을 수 있을까? 이미지 상의 좌표 $\mathbf{x}$에 대해 $\mathbf{x}=P\mathbf{X}$를 만족하고, $P \in \mathbb{R}^{3\times4}$이므로, 12개의 변수를 가지고 있다. (하지만 마지막은 항상 1이므로, 사실은 11개의 변수를 가지고 있다.) 따라서 최소 12개의 식을 알고 있다면 이 방정식을 풀어 $P$를 찾을 수 있다. 하나의 $\mathbf{x}$는 $x, y$의 두 좌표를 가지고 있으므로, 최소 6개의 $\mathbf{x}, \mathbf{X}$ 쌍을 알고 있다면 $P$를 알아낼 수 있다.

$\mathbf{X}$가 projection에 의해 $\mathbf{x}$로 사영되므로, 둘의 방향은 같다. 따라서 $\mathbf{x}_i \times P\mathbf{X}_i = 0$이라는 관계식을 가지고 있다. 이 식에서 linearly independent한 두 개의 식만 가지고 와서

의 식을 만들 수 있다.($P_{x, y, z} \in \mathbb{R}^{4\times1}$) 6개의 점을 알고 있다면 여기에 대입하여

을 풀면 $P$를 알아낼 수 있다.

Linear method의 장점은 수식화가 쉽고 풀기도 쉽다는 점이다. 하지만 직접적으로 카메라 파라미터를 알 수는 없으며 radial distortion도 고려하지 않는다. 또한 제한 사항도 집어넣을 수 없다는 단점이 있다. 따라서 non-Linear method가 더 선호된다.

Epipolar Geometry

Triangulation

두개, 혹은 그 이상의 이미지를 가지고 3D상의 점을 찾는 것을 triangulation이라고 한다. $O_1$ 을 원점으로 갖는 이미지에서의 점 $\mathbf{x}_1$, $O_2$를 원점으로 갖는 이미지에서의 점 $\mathbf{x}_2$를 각각의 원점과 이은 선은 실제 점 $\mathbf{x}$에서 교차해야 한다. 하지만 노이즈나 에러때문에 정확하게 만나지는 않는다. 따라서 두 선의 거리가 가장 가까운 두 점을 이은 선분의 중점을 $\mathbf{X}$라고 예측한다.

$\mathbf{X}$를 알아내는 linear approach는 다음과 같다. $\mathbf{x}_1$과 $\mathbf{x}_2$는 $P_i\mathbf{X}$와 평행하기 때문에 각각 다음의 식이 성립한다.

그리고 를 만족하는 를 찾을 수 있다. 하나의 에 대해 , 의 두 식을 알아낼 수 있고(두 개만 linearly independent하므로) 우리는 두 개의 를 알고 있으므로 총 4개의 식을 알고 있다. 알아내야 하는 의 변수가 3개이므로, 방정식을 풀어 를 알아낼 수 있다.

를 알아내는 non-linear approach는 를 찾아내면 된다.

Epipolar Geometry

두 개의 이미지에서 한 점의 좌표를 알아내는 상황을 가정한다. baseline은 이미지의 두 원점을 이은 선이고, epipolar plane은 그 선을 포함하는 평면들이다. epipole은 baseline과 각 이미지 평면들의 교점이다. 마지막으로 epipolar line은 epipolar plane과 이미지 평면의 교점이다.

Epipolar Constraint

Source

만약 $I$이미지 상의 $\mathbf{x}$가 존재한다면, $I’$이미지에서 이 $\mathbf{x}$에 대응하는 점 $\mathbf{x}’$은 epipolar line에서 찾을 수 있다는 것이 epipolar constraint이다.

원점 $O$에서 $I$위의 점 $\mathbf{x}$로 향하는 벡터 $\mathbf{x}$와 원점 $O’$에서 $I’$위의 점 $\mathbf{x}’$로 향하는 벡터 $R\mathbf{x}’$($R$은 $I$에서 $I’$로의 변환행렬), 그리고 $O$와 $O’$를 잇는 선인 $t$는 같은 평면(삼각형 $\mathbf{X}OO’$가 이루는 평면)상의 벡터이다. 따라서 $\mathbf{x}\cdot[t\times(R\mathbf{x}’)]=0$이 성립하고, 이는 $\mathbf{x}^TE\mathbf{x}’=0$으로 표현될 수 있다. ($E=[t_\times]R$) 이때 $E$를 essential 행렬이라고 부른다. 사실 이 $E$가 반드시 존재한다는 것이 epipolar constraint이다.

위 식을 이용하면 epipolar line인 $l$과 $l’$이 $l=E\mathbf{x}’$, $l’=E^T\mathbf{x}$임을 알 수 있다. (삼각형 $\mathbf{X}OO’$에서 $x$벡터에 수직인 선분은 $l$밖에 없으므로, $\mathbf{x}’$에 대해서도 마찬가지) 따라서 epipolar line상에 있는 epipole들도 $Ee’=0$, $E^Te=0$을 만족한다. $E$는 자유도 3의 회전, 자유도 2의 평행이동으로 이루어져 있으므로 5개의 점의 좌표를 알면 구할 수 있다.

$E$는 normalized coordinate 상에서의 좌표들의 관계를 나타내는 행렬이고, 다음은 정규화도 되지 않은 실제 공간에서의 좌표들의 관계를 나타내는 행렬 $F$를 구하는 방법이다. 일단 우리는 calibration matrix $K$와 $K’$를 모른다고 가정하고, 이들은 다음을 만족한다.

$\hat{\mathbf{x}}$와 $\hat{\mathbf{x}}’$ 를 이용한 epipolar constraint의 식은 $\hat{\mathbf{x}}^TE\hat{\mathbf{x}}’=0$ 이다. 이제 $F=K^{-T}EK’^{-1}$에 대해 $\mathbf{x}^TF\mathbf{x}’=0$이 성립한다. 이 때의 $F$를 fundamental matrix라고 한다. $F$를 구하기 위해서는 $E$를 구할 때보다 $K$, $K’$의 정보가 더 필요하기 때문에 7개의 점의 좌표가 필요하다.

The eight-point algorithm

다른 방식으로 $F$를 구할 수도 있다. $F$는 어쨌건 $3\times3$ 행렬이므로 9개의 식을 알고 있으면 구할 수 있다. 게다가, 하나만 존재하게 하기 위해 마지막 수는 항상 1이 되어야 한다는 조건을 추가하면, 8개의 점을 알면 구할 수 있다. 이를 eight-point algorithm이라고 부르며, $\sum_{i=1}^N(\mathbf{x}_i^TF\mathbf{x}_i’)^2$를 최소화시키는 $F$를 구하면 된다. 이 에러의 의미는 어떤 점 $\mathbf{x}$와 epipolar line $F\mathbf{x}’$사이의 유클리드 거리의 합을 최소화시킨다는 것이다. eight-point algorithm은 원래 좌표를 normalize시킨 후 계산하고, 다시 원래 좌표로 변환시켜 계산했을 때 더 정확하다.


Terms

calibration : 교정, 눈금
epipolar : 등극선 (이라는데 명확하지 않은 번역이므로 그냥 epipolar라고 쓴다)
coplanar : 동일 평면상의