단일 뷰 캘리브레이션은 카메라의 내부 파라미터와 왜곡 계수를 추정하는 과정을 말한다. 이를 통해 실제 세계의 3D 좌표를 카메라 이미지 평면에 투영할 때 발생하는 왜곡을 최소화하고, 정확한 2D 이미지 좌표를 얻을 수 있다. 단일 뷰 캘리브레이션은 주로 체스보드(Chessboard)와 같은 특정 패턴을 사용하여 수행되며, 각 패턴의 코너 좌표를 추출하여 카메라 모델을 최적화하는 방식으로 진행된다.

핀홀 카메라 모델

단일 뷰 캘리브레이션의 기본은 핀홀 카메라 모델이다. 핀홀 카메라 모델에서는 카메라의 내부 파라미터와 외부 파라미터를 이용해 3D 좌표를 2D 이미지 평면으로 투영한다.

먼저, 3D 세계 좌표 \mathbf{X_w} = \begin{bmatrix} X_w \\ Y_w \\ Z_w \\ 1 \end{bmatrix}가 주어졌을 때, 이를 카메라 좌표계로 변환하기 위해 외부 파라미터를 사용한다. 외부 파라미터는 회전 행렬 \mathbf{R}과 평행 이동 벡터 \mathbf{t}로 표현된다. 이를 통해 월드 좌표계에서 카메라 좌표계로의 변환은 다음과 같다.

\mathbf{X_c} = \mathbf{R} \mathbf{X_w} + \mathbf{t}

카메라 좌표계에서의 3D 점 \mathbf{X_c}를 이미지 평면에 투영하기 위해서는 카메라 내부 파라미터 행렬 \mathbf{K}를 사용한다. 카메라 내부 파라미터 행렬 \mathbf{K}는 다음과 같이 정의된다.

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

여기서 f_xf_y는 각각 x축과 y축 방향의 초점 거리, c_xc_y는 이미지 중심 좌표를 나타낸다. 따라서 카메라 좌표계의 3D 점 \mathbf{X_c} = \begin{bmatrix} X_c \\ Y_c \\ Z_c \end{bmatrix}를 2D 이미지 좌표로 변환하면 다음과 같다.

\mathbf{x} = \mathbf{K} \begin{bmatrix} X_c / Z_c \\ Y_c / Z_c \\ 1 \end{bmatrix}

왜곡 모델

실제 카메라는 렌즈의 비선형 왜곡에 의해 위 공식만으로는 정확한 투영을 얻을 수 없다. 왜곡은 크게 두 가지로 나눌 수 있다: Radial 왜곡과 Tangential 왜곡이다.

Radial 왜곡은 이미지의 중심에서 멀어질수록 픽셀이 점점 더 휘어지는 현상을 의미한다. 이는 다음과 같은 방정식으로 표현된다.

x' = x(1 + k_1 r^2 + k_2 r^4 + k_3 r^6)
y' = y(1 + k_1 r^2 + k_2 r^4 + k_3 r^6)

여기서 r은 픽셀이 이미지 중심에서의 거리로, r = \sqrt{x^2 + y^2}로 정의된다. k_1, k_2, k_3는 Radial 왜곡 계수이다.

Tangential 왜곡은 카메라 렌즈가 이미지 평면에 완벽히 평행하지 않기 때문에 발생하며, 다음과 같은 식으로 모델링된다.

x' = x + [2p_1xy + p_2(r^2 + 2x^2)]
y' = y + [p_1(r^2 + 2y^2) + 2p_2xy]

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

따라서 왜곡을 포함한 전체 투영 방정식은 다음과 같이 표현된다.

\mathbf{x}_\text{distorted} = \mathbf{x}_\text{undistorted} \cdot (1 + k_1 r^2 + k_2 r^4 + k_3 r^6) + \begin{bmatrix} 2p_1xy + p_2(r^2 + 2x^2) \\ p_1(r^2 + 2y^2) + 2p_2xy \end{bmatrix}

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

단일 뷰 캘리브레이션에서 가장 일반적인 방법은 체스보드 패턴을 이용하는 것이다. 체스보드 패턴의 교차점은 쉽게 감지할 수 있기 때문에, 이미지에서 2D 좌표를 얻어내는 데 유용하다. 체스보드 패턴을 이용한 캘리브레이션 과정은 다음과 같다.

  1. 이미지 획득: 여러 각도에서 체스보드 패턴이 포함된 이미지를 촬영한다.
  2. 코너 감지: 이미지에서 체스보드의 코너점을 감지한다.
  3. 2D - 3D 대응: 감지된 2D 코너 좌표를 체스보드의 실제 3D 좌표와 대응시킨다.
  4. 최적화: 감지된 2D 좌표와 대응되는 3D 좌표를 기반으로 카메라 내부 파라미터와 왜곡 계수를 최적화한다. 여기서 사용하는 최적화 방법은 주로 Levenberg-Marquardt 알고리즘이다.

Zhang의 캘리브레이션 방법

Zhang의 캘리브레이션 방법은 다수의 뷰에서 얻은 2D-3D 대응 데이터를 이용해 카메라의 내부 파라미터와 왜곡 계수를 추정하는 기법으로, 체스보드 패턴을 활용하는 방법 중 하나이다. 이 방법은 비교적 단순하면서도 효율적이기 때문에 널리 사용되고 있다.

Zhang의 캘리브레이션 과정은 다음과 같은 단계로 이루어진다.

  1. 선형 추정: 먼저, 여러 이미지에서 감지된 코너점의 2D 좌표와 대응되는 3D 좌표를 이용해 카메라의 프로젝션 매트릭스 \mathbf{P}를 선형적으로 추정한다. 프로젝션 매트릭스 \mathbf{P}는 다음과 같이 표현된다.
\mathbf{x} = \mathbf{P} \mathbf{X}

여기서 \mathbf{x}는 2D 이미지 좌표, \mathbf{X}는 3D 세계 좌표, \mathbf{P}는 프로젝션 매트릭스이다. 이때, \mathbf{P}는 선형 방정식의 형태를 가지므로 SVD(특이값 분해)를 통해 쉽게 구할 수 있다.

  1. 내부 파라미터 추정: 프로젝션 매트릭스 \mathbf{P}가 추정되면, 이를 분해하여 카메라의 내부 파라미터 행렬 \mathbf{K}와 외부 파라미터(회전 행렬 \mathbf{R}과 평행 이동 벡터 \mathbf{t})를 추출한다. 이를 위해 \mathbf{P}를 QR 분해(QR decomposition)를 통해 다음과 같이 분해한다.
\mathbf{P} = \mathbf{K} \begin{bmatrix} \mathbf{R} & \mathbf{t} \end{bmatrix}

여기서 \mathbf{K}는 카메라의 내부 파라미터를 포함하며, 이 값을 통해 f_x, f_y, c_x, c_y 등을 구할 수 있다.

  1. 왜곡 계수 추정: 내부 파라미터가 추정된 후, 추가적으로 렌즈 왜곡을 모델링하기 위해 왜곡 계수를 추정한다. 감지된 2D 코너 좌표와 대응하는 실제 3D 좌표 간의 차이를 최소화하기 위해 비선형 최적화 기법을 사용한다. 일반적으로 Levenberg-Marquardt 알고리즘이 사용되며, 이는 왜곡 계수 k_1, k_2, p_1, p_2 등을 포함한 모델을 최적화한다.

  2. 최적화 및 반복: 모든 파라미터가 추정된 후, 전체 캘리브레이션 과정에서 발생한 오차를 줄이기 위해 다시 최적화를 진행한다. 특히, 재투영 오류를 최소화하기 위한 반복적 최적화가 수행된다.

Zhang의 방법은 단순한 수학적 기반을 바탕으로 고정밀한 캘리브레이션 결과를 제공하며, 다양한 카메라 시스템에서 사용된다.