-
[17] Camera Calibration (1)Multiple View Geometry 2021. 4. 21. 06:02
본 포스트는 학습한 것을 정리할 목적으로 작성되었습니다.
해당 포스트의 내용 및 그림, 수식 등은 'Multiple View Geometry in Computer Vision' 책을 참고하였습니다.
(1) Camera calibration
3차원 공간상의 한 점을 image plane상의 점으로 투영하는 camera matrix $P$를 계산 하는 것은 일반적으로 camera calibration이라고 불린다. Camera matrix $P$는 $\mathbb{P}^3$에서 $\mathbb{P}^2$로 mapping하는 3 x 4 matrix이다. 따라서 scale factor를 제외한 나머지 11개의 element들을 구함으로써 matrix를 정의할 수 있고 이는 이론적으로 최소 6개의 대응점 쌍을 필요로 한다.
$\textbf{x}_i = P\textbf{X}_i$일 때 camera matrix $P$를 구하기 위한 선형 방정식은 다음과 같다.
$$ P\textbf{X}_i \times \textbf{x}_i = \begin{bmatrix} \textbf{0}^T & -w_i \textbf{X}_i^T & y_i \textbf{X}_i^T \\ w_i \textbf{X}_i^T & \textbf{0}^T & -x_i \textbf{X}_i^T \\ -y_i \textbf{X}_i^T & x_i \textbf{X}_i^T & \textbf{0}^T \end{bmatrix} \begin{bmatrix} \textbf{p}^1 \\ \textbf{p}^2 \\ \textbf{p}^3 \end{bmatrix} = A\textbf{p} = 0 \ \ where \ \ P = \begin{bmatrix} \textbf{p}^{1T} \\ \textbf{p}^{2T} \\ \textbf{p}^{3T} \end{bmatrix}$$
이 때, 위 식에서 $A$의 세 번째 row는 위 두 row의 선형 조합으로 표현할 수 있다. 따라서 두 개의 row만 사용하여 식을 구성 할 수 있다.
$$ \begin{bmatrix} \textbf{0}^T & -w_i \textbf{X}_i^T & y_i \textbf{X}_i^T \\ w_i \textbf{X}_i^T & \textbf{0}^T & -x_i \textbf{X}_i^T\end{bmatrix} \begin{bmatrix} \textbf{p}^1 \\ \textbf{p}^2 \\ \textbf{p}^3 \end{bmatrix} = 0 $$
따라서, n개의 대응점 쌍으로 부터 $2n \times 12$ matrix A를 얻을 수 있다. $P$의 dof가 앞서 언급한 바와 같이 11이므로(up to scale) 최소 6개의 대응점 쌍을 필요로 하며 그 중 하나는 두 방정식 중 하나의 방적식 만을 사용한다.
일반적으로는 대응점 쌍의 좌표들 간의 오차가 존재하기 때문에 exact solution을 얻을 수 없다. 따라서 2D homography의 경우와 같이 iterative하게 해를 구한다.
(2) Numerical method
Camera calibration은 error가 존재하는 일반적인 상황에서는 geometric distance를 최소화 하는 $P$를 iterative하게 구함으로써 수행된다. 즉, 6개 이상의 대응점 쌍이 주어졌을 때 다음을 구한다.
$$ P^* = argmin_{P} \sum{d(P\textbf{X}_i, \ \textbf{x}_i)^2} $$
알고리즘 순서는 다음과 같다.
[1] $\textbf{X}$를 normalization(centroid를 빼고 평균으로 나눈다) 후 DLT로 $P_0$을 구한다.
[2] $P_0$을 초기 점으로 하여 LM알고리즘을 통해 geometric distance를 최소화
[3] De-nomalization
위에 언급한 바와 같이 normalization은 $\textbf{X} = [x_1 \ x_2 \ x_3 \ x_4]$를 centroid(mean 값)로 나누고 이 값들의 average로 나누어 주어 전체적으로 1에 가까운 값들을 가지게 끔 해 준다. 해를 구한 다음에는 원래 scale로 돌려주기 위해 de-nomalization이 필요하다. 전체적인 과정은 아래와 같다.
$$ \tilde{\textbf{X}}_i = S \textbf{X}_i $$
$$ \tilde{\textbf{x}}_i = T \textbf{x}_i $$
$$ Get \ \tilde{P}_0 \ using \ DLT $$
$$ Get \ \tilde{P}^* = argmin_{\tilde{P}}{\sum{d(\tilde{P}\tilde{\textbf{X}_i}, \tilde{\textbf{x}_i}})} $$
$$ P^* = T^{-1}\tilde{P}^* S $$
(3) Degenerate configurations
서로 다른 두 camera matrix $P$와 $P'$가 주어졌을 때 어떤 world point $X$에 대하여 $P\textbf{X}=P'\textbf{X}$일 때를 degenerate configuration case라고 한다. 이 경우에 world point $X$들의 집합은 (1) twisted cubic 또는 (2) 평면과 $\tilde{\textbf{C}}$를 포함하는 직선 이다.
Twisted cubic은 다음과 같이 증명이 가능하다.
$$ P\textbf{X} = P'\textbf{X} \Leftrightarrow P\textbf{X} = \theta P' \textbf{X} $$
$$ (P-\theta P')\textbf{X} = P_{\theta}\textbf{X} = 0 \ \Rightarrow \ \textbf{X} \ is \ row \ space \ of \ P_{\theta} \Rightarrow det \Bigg{(}\begin{bmatrix} \textbf{X} \\ P_{\theta} \end{bmatrix} \Bigg{)} = 0 $$
$$ \textbf{X} = \begin{bmatrix} M_{234} & -M_{134} & M_{124} & -M_{123} \end{bmatrix} $$
$$ M \ is \ cubic \ of \ \theta \Rightarrow \textbf{X} \ is \ twisted \ cubic \ in \ \mathbb{P}^3 $$
(4) Line correspondence
공간 상의 어떤 직선은 image plane상의 직선으로 변환된다. 이 때, 원래 직선 $\textbf{l}$위의 점 $\textbf{X}$와 변환된 직선 $\textbf{l}'$을 알고 있으면 $\textbf{l}'^T(P\textbf{X})$를 통해 선형 방정식의 해를 구함으로써 calibration 할 수 있다.
'Multiple View Geometry' 카테고리의 다른 글
[19] Epipolar Geometry and the Fundamental Matrix (0) 2021.06.08 [18] Camera Calibration (2) (0) 2021.04.21 [16] Back Projection and Depth Estimation (0) 2021.04.14 [15] General Projective Cameras (0) 2021.04.14 [14] Finite Camera Matrix (0) 2021.04.12