카메라 모델

카메라 모델은 실세계의 3D 점을 2D 이미지 평면에 투영하는 수학적 모델을 정의한다. 카메라 모델은 여러 가지가 있지만, 일반적으로 가장 많이 사용되는 것은 핀홀 카메라 모델이다.

핀홀 카메라 모델은 다음과 같은 기본 구성 요소를 포함한다:

  1. 카메라 좌표계: 카메라의 중심이 원점에 위치하고 카메라의 옵티컬 축(보통 Z_c 축)이 설정된다.
  2. 이미지 평면: 카메라의 센서가 위치한 평면을 의미한다.
  3. 초점 거리 f: 카메라 렌즈의 중심에서 이미지 평면까지의 거리이다.

이 모델에서, 3D 점 (X, Y, Z)는 이미지 평면으로 투영되어 2D 점 (x, y)이 된다.

동차좌표

동차좌표(homogeneous coordinates)는 3D 점과 2D 점을 벡터 형태로 표현하는 방법으로, 투영 변환을 더 쉽게 처리할 수 있게 한다. 동차좌표를 사용하면 선형 변환, 회전, 스케일링, 평행 이동 등을 하나의 행렬 곱셈으로 나타낼 수 있다.

3D 동차좌표

3D 점 (X, Y, Z)를 동차좌표로 표현하면 \mathbf{P} = (X, Y, Z, 1)이 된다. 여기서 추가된 값 1은 스케일 인자의 역할을 하며, 이러한 형태에서의 투영 변환을 단순화한다.

2D 동차좌표

2D 점 (x, y)를 동차좌표로 표현하면 \mathbf{p} = (x, y, 1)이 된다. 3D 점 \mathbf{P}가 이미지 평면으로 투영되면 2D 동차좌표로 변환된다.


다음에는 투영 변환과 기본 행렬에 대해 설명하겠다.

투영 변환

투영 변환(projection transformation)은 3D 점을 2D 이미지 평면으로 맵핑하는 과정이다. 핀홀 카메라 모델의 경우, 이 투영 변환은 단일 투영 행렬 \mathbf{P}로 표현할 수 있다.

카메라의 Intrinsic 매개변수

Intrinsic 매개변수는 카메라 내부의 물리적 속성을 나타내며, 이미지 평면에서의 왜곡을 포함한다. 주요 요소는 다음과 같다:

  1. 초점 거리 f: 이미 언급한 것처럼 카메라의 렌즈 중심에서 이미지 평면까지의 거리이다.
  2. 픽셀 크기 s_x, s_y: 가로 및 세로 방향의 픽셀 크기.
  3. 이미지 중심 (c_x, c_y): 보통 이미지의 중심 및 카메라 센서의 원점 좌표를 나타낸다.

카메라 Intrinsic 행렬 \mathbf{K}:

이 매개변수는 다음과 같은 행렬 \mathbf{K}로 표현된다:

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

여기서 f_xf_y는 각각 f \cdot s_xf \cdot s_y로 정의된다.

Extrinsic 매개변수

Extrinsic 매개변수는 카메라의 위치와 방향에 따른 3D 공간의 좌표계 간의 변환을 나타낸다. 이 변환은 회전 행렬 \mathbf{R}와 변환 벡터 \mathbf{t}로 표현되며, 카메라 좌표계에서 월드 좌표계로 매핑한다.

전체 투영 행렬

전체 투영 행렬 \mathbf{P}는 Intrinsic 행렬 \mathbf{K}와 Extrinsic 행렬의 곱으로 나타낼 수 있다:

\mathbf{P} = \mathbf{K} [\mathbf{R} | \mathbf{t}]

여기서 [\mathbf{R} | \mathbf{t}]는 3x4 행렬로, \mathbf{R}은 3x3 회전 행렬, \mathbf{t}는 3x1 변환 벡터이다.


이제 기본 매트릭스 변환과 관련된 세부 사항을 다루겠다.

기본 매트릭스 변환

기본 매트릭스 변환은 원래 3D 점을 풀 체인으로 2D 이미지 평면으로 변환하는 과정에서 사용된다. 이 과정은 카메라의 물리적 배치와 내부 특성을 고려한 일련의 선형 변환들로 이루어진다.

회전 행렬 \mathbf{R}

회전 행렬은 3D 공간에서 카메라의 방향(또는 자세)을 나타내는 데 사용된다. 회전 행렬 \mathbf{R}은 정규 직교 행렬로, 3D 벡터를 다른 방향으로 회전시킨다. 예를 들어, 월드 좌표계에서 카메라 좌표계로 변환하기 위해 사용할 수 있다.

\mathbf{R} = \begin{pmatrix} r_{11} & r_{12} & r_{13} \\ r_{21} & r_{22} & r_{23} \\ r_{31} & r_{32} & r_{33} \end{pmatrix}

변환 벡터 \mathbf{t}

변환 벡터는 카메라의 위치를 나타내는 3D 벡터이다. 회전 행렬과 함께 사용되어 카메라 좌표계로의 변환을 완성한다.

\mathbf{t} = \begin{pmatrix} t_x \\ t_y \\ t_z \end{pmatrix}

이렇게 해서 만든 3x4 Extrinsic 행렬은 다음과 같이 표현된다:

[\mathbf{R} | \mathbf{t}] = \begin{pmatrix} r_{11} & r_{12} & r_{13} & t_x \\ r_{21} & r_{22} & r_{23} & t_y \\ r_{31} & r_{32} & r_{33} & t_z \end{pmatrix}

전체 투영 과정을 요약하면

3D 동차 좌표 \mathbf{P_w}=(X_w, Y_w, Z_w, 1)가 주어졌을 때, 카메라 좌표계로 변환 후 이미지 평면으로 투영하는 과정은 다음과 같다:

  1. 카메라 좌표계로 변환:
\mathbf{P_c} = \mathbf{R} \mathbf{P_w} + \mathbf{t}
  1. 이미지 평면으로 투영:
\mathbf{p_h} = \mathbf{K} [\mathbf{R} | \mathbf{t}] \mathbf{P_w}

여기서 \mathbf{p_h}는 동차 좌표로 표현된 2D 이미지 점이다.

최종 이미지 좌표로 변환

동차 좌표 \mathbf{p_h} = (x_h, y_h, w_h)^T를 2D 이미지 좌표로 변환하는 최종 단계는 동차 좌표의 z성분(w_h)으로 나누는 것이다:

(x, y) = \left( \frac{x_h}{w_h}, \frac{y_h}{w_h} \right)

이로써, 3D 월드 좌표계의 점이 2D 이미지 평면으로 올바르게 맵핑된다.