Zhang의 카메라 캘리브레이션 방법은 2000년에 Zhengyou Zhang에 의해 제안된 방법으로, 주로 핀홀 카메라 모델을 기반으로 하여 내부 파라미터와 외부 파라미터를 추정하는 데 사용된다. 이 방법은 특정한 패턴, 예를 들어 체스보드 패턴을 이용하여 다수의 2D 이미지에서 3D 공간으로의 대응을 계산하는 방식으로 동작한다.

Zhang의 캘리브레이션 방법의 개요

Zhang의 방법은 주로 다음 단계들로 구성된다:

  1. 카메라 모델 설정
    카메라 모델을 설정하고, 이를 통해 이미지 좌표와 실세계 좌표 간의 관계를 수학적으로 표현한다.

  2. 체스보드 패턴 사용
    체스보드 패턴을 통해 이미지에서의 코너 점들을 추출하고, 이 점들의 실세계 좌표를 정의한다.

  3. 투영 행렬 계산
    2D 이미지와 3D 실세계 좌표 간의 관계를 나타내는 투영 행렬을 추정한다.

  4. 비선형 왜곡 보정
    렌즈 왜곡을 보정하기 위한 비선형 최적화를 수행한다.

카메라 모델

Zhang의 방법에서 사용되는 카메라 모델은 핀홀 카메라 모델로 정의된다. 핀홀 모델은 카메라의 투영 과정을 수학적으로 표현하며, 기본적으로 이미지 좌표 \mathbf{x}와 실세계 좌표 \mathbf{X} 사이의 관계는 다음과 같이 정의된다:

s \mathbf{x} = \mathbf{A} \left[ \mathbf{R} | \mathbf{t} \right] \mathbf{X}

여기서:

카메라의 내부 파라미터 행렬 \mathbf{A}는 다음과 같다:

\mathbf{A} = \begin{bmatrix} f_x & 0 & c_x \\ 0 & f_y & c_y \\ 0 & 0 & 1 \end{bmatrix}

여기서:

체스보드 패턴을 이용한 캘리브레이션

Zhang의 방법에서는 체스보드 패턴을 사용하여 카메라와 실세계 좌표 간의 대응을 계산한다. 체스보드의 각 코너는 2D 이미지에서 정확한 좌표를 얻을 수 있으며, 이 좌표와 대응하는 3D 실세계 좌표를 정의하여 투영 관계를 수립한다.

체스보드 패턴은 이미지에서 코너 검출을 용이하게 하며, 이를 통해 다중 뷰에서 2D-3D 대응점을 얻을 수 있다. 각 이미지에서의 대응점들은 추정된 투영 행렬을 통해 3D 실세계 좌표로 변환된다.

투영 행렬 추정

2D 이미지 좌표 \mathbf{x}와 3D 실세계 좌표 \mathbf{X} 간의 대응을 통해, 투영 행렬 \mathbf{P}를 추정할 수 있다. 투영 행렬은 다음과 같은 형태로 정의된다:

s \mathbf{x} = \mathbf{P} \mathbf{X}

여기서 \mathbf{P}3 \times 4 크기의 투영 행렬이다. 투영 행렬 \mathbf{P}는 내부 파라미터와 외부 파라미터를 결합한 형태로 표현되며, 이를 통해 카메라의 위치와 방향, 그리고 왜곡 파라미터를 추정할 수 있다.

Zhang의 방법에서는 최소 네 개의 대응점을 사용하여 투영 행렬을 추정하며, 보다 많은 대응점이 있을 경우 보다 정확한 추정이 가능하다. 이때의 관계식은 다음과 같다:

\mathbf{P} = \mathbf{A} \left[ \mathbf{R} | \mathbf{t} \right]

비선형 왜곡 보정

카메라 렌즈는 일반적으로 비선형 왜곡을 발생시키며, 이는 이미지에서 직선이 굽어지거나 왜곡되는 현상으로 나타난다. Zhang의 방법에서는 이러한 왜곡을 보정하기 위해 비선형 최적화를 사용한다. 렌즈 왜곡의 주요 유형은 다음과 같다:

  1. Radial 왜곡
    Radial 왜곡은 이미지의 중심에서 멀어질수록 픽셀들이 왜곡되는 현상을 말한다. 이를 보정하기 위한 수식은 다음과 같다:
\mathbf{x}_{\text{distorted}} = \mathbf{x} \left( 1 + k_1 r^2 + k_2 r^4 + k_3 r^6 \right)

여기서 r은 이미지 좌표 \mathbf{x}와 이미지 중심 사이의 거리이며, k_1, k_2, k_3는 왜곡 계수이다.

  1. Tangential 왜곡
    Tangential 왜곡은 렌즈와 이미지 센서가 완벽하게 평행하지 않을 때 발생한다. 이 왜곡은 다음과 같은 수식으로 표현된다:
\mathbf{x}_{\text{distorted}} = \mathbf{x} + \left[ 2p_1 xy + p_2 \left( r^2 + 2x^2 \right), p_1 \left( r^2 + 2y^2 \right) + 2p_2 xy \right]

여기서 p_1, p_2는 Tangential 왜곡 계수이다.

이러한 왜곡 보정을 통해 카메라 캘리브레이션의 정확도를 높일 수 있으며, 실세계 좌표와 이미지 좌표 간의 정확한 대응을 가능하게 한다.

최적화 과정

Zhang의 방법에서는 비선형 최적화를 통해 최종적으로 카메라 파라미터를 추정한다. 여기서 사용되는 최적화 기법은 주로 Levenberg-Marquardt 알고리즘Gauss-Newton 방법을 기반으로 한다. 이 최적화는 초기 추정된 파라미터에서 시작하여, 반복적으로 오차를 줄여가면서 최적의 파라미터를 찾는다.

Levenberg-Marquardt 최적화

Levenberg-Marquardt 알고리즘은 비선형 최적화 문제를 해결하는 방법 중 하나로, 주로 least-squares 문제에 사용된다. 이 방법은 Gauss-Newton 방법과 Gradient Descent 방법을 결합한 형태로, 다음과 같은 수식으로 표현된다:

\mathbf{x}_{k+1} = \mathbf{x}_k - \left( \mathbf{J}^T \mathbf{J} + \lambda \mathbf{I} \right)^{-1} \mathbf{J}^T \mathbf{r}

여기서:

Gauss-Newton 방법

Gauss-Newton 방법은 비선형 최소 제곱 문제에서 사용되는 최적화 방법으로, 주로 작은 오차 범위 내에서 빠르게 수렴한다. 이 방법은 다음과 같이 잔차의 제곱합을 최소화하는 문제를 해결한다:

\min \sum_{i=1}^n \left( \mathbf{x}_i - \hat{\mathbf{x}}_i \right)^2

여기서:

Gauss-Newton 방법은 다음과 같은 반복적인 과정으로 오차를 줄인다:

\mathbf{x}_{k+1} = \mathbf{x}_k - \left( \mathbf{J}^T \mathbf{J} \right)^{-1} \mathbf{J}^T \mathbf{r}

여기서 \mathbf{J}는 Jacobian 행렬, \mathbf{r}는 잔차 벡터이다.

최종 파라미터 추정

최적화 과정이 수렴하면, 카메라의 내부 파라미터 \mathbf{A}, 외부 파라미터 \mathbf{R}\mathbf{t}, 그리고 왜곡 파라미터 k_1, k_2, k_3, p_1, p_2를 포함한 최종 파라미터들이 결정된다. 이 파라미터들을 통해 카메라의 전체 모델이 정의되며, 이를 바탕으로 실세계 좌표를 정확하게 이미지 좌표로 변환할 수 있다.