핀홀 카메라 모델은 컴퓨터 비전에서 가장 기본적이며 널리 사용되는 카메라 모델이다. 이 모델은 물리적 렌즈를 통해 실제 세계의 3차원 점이 2차원 이미지 평면에 어떻게 투영되는지를 설명한다. 핀홀 카메라는 매우 단순하게 이상적인 모델로 간주되며, 실제 카메라의 광학적 왜곡이나 기타 복잡한 효과는 고려하지 않는다.

핀홀 모델의 기본 개념

핀홀 카메라는 하나의 작은 구멍(핀홀)을 통해 빛이 들어와 이미지 평면에 맺히는 구조로 상정한다. 이 구멍은 렌즈의 중심을 나타내며, 이 점을 '카메라 중심' 또는 '투영 중심'이라고 부른다. 핀홀 카메라 모델의 작동 원리는 다음과 같다.

  1. 3차원 세계의 한 점 \mathbf{P} = [X, Y, Z]^\top가 핀홀을 통해 2차원 이미지 평면에 투영된다.
  2. 이미지 평면은 실제로는 카메라 중심에서 일정 거리 f(초점 거리)에 위치한 가상의 평면으로, 보통 카메라 좌표계의 Z = f 위치에 놓인다.
  3. 카메라 좌표계에서 3차원 점 \mathbf{P}는 다음과 같이 투영된다.
  4. 3D 점 \mathbf{P} = [X, Y, Z]^\top는 2D 이미지 점 \mathbf{p} = [x, y]^\top로 투영된다.
  5. 이 때의 관계식은 다음과 같다:
x = f \frac{X}{Z}, \quad y = f \frac{Y}{Z}

여기서 f는 카메라의 초점 거리이며, Z는 3차원 점 \mathbf{P}의 카메라 좌표계에서의 깊이 값이다. 이 식은 카메라 중심에서 점 \mathbf{P}까지의 거리가 Z일 때, 이미지 평면에 형성된 점의 위치를 구하는 방식이다.

투영 변환

핀홀 카메라 모델은 기하학적으로 사영 변환으로 설명할 수 있다. 이 변환은 3차원 공간의 한 점을 2차원 평면으로 사영하는 과정이다. 사영 변환은 동차 좌표계를 이용하여 다음과 같이 표현된다.

동차 좌표계

3차원 점 \mathbf{P} = [X, Y, Z]^\top는 동차 좌표계에서 다음과 같이 표현된다.

\mathbf{P}_{h} = [X, Y, Z, 1]^\top

이를 이용하여, 카메라의 내부 파라미터 행렬 \mathbf{K}를 포함한 투영 행렬을 통해 이미지 좌표로 변환된다. 투영 행렬은 다음과 같다:

\mathbf{K} = \begin{bmatrix} f & 0 & 0 \\ 0 & f & 0 \\ 0 & 0 & 1 \end{bmatrix}

카메라 좌표계에서의 3차원 점 \mathbf{P}를 이미지 좌표계로 변환하기 위해 다음의 수식을 사용한다:

\mathbf{p}_{h} = \mathbf{K} \mathbf{P}_{c}

여기서 \mathbf{p}_{h}는 이미지 평면 상의 동차 좌표 [x, y, 1]^\top이고, \mathbf{P}_{c}는 카메라 좌표계에서의 3차원 점이다. 이미지 평면 상에서 최종적으로 구해진 점은 동차 좌표의 세 번째 요소로 나누어 정규화하여 얻는다.

카메라 좌표계와 월드 좌표계

핀홀 카메라 모델에서 카메라 좌표계는 카메라 중심을 원점으로, 카메라의 초점이 Z축을 따라 위치하는 좌표계이다. 3차원 월드 좌표계에서의 점 \mathbf{P}_{w} = [X_w, Y_w, Z_w, 1]^\top는 카메라 좌표계로 변환되어야 한다. 이 변환은 카메라의 회전 및 병진 변환을 포함한다.

카메라의 위치와 방향을 정의하는 변환 행렬은 다음과 같다:

\mathbf{R} = \text{카메라의 회전 행렬 (3x3)}, \quad \mathbf{t} = \text{카메라의 병진 벡터 (3x1)}

월드 좌표계의 3차원 점을 카메라 좌표계로 변환하는 수식은 다음과 같다:

\mathbf{P}_{c} = \mathbf{R} \mathbf{P}_{w} + \mathbf{t}

이 수식을 동차 좌표계에서 표현하면 다음과 같은 4x4 변환 행렬을 사용하여 변환할 수 있다:

\begin{bmatrix} \mathbf{P}_{c} \\ 1 \end{bmatrix} = \begin{bmatrix} \mathbf{R} & \mathbf{t} \\ 0 & 1 \end{bmatrix} \begin{bmatrix} \mathbf{P}_{w} \\ 1 \end{bmatrix}

여기서 \mathbf{P}_{c}는 카메라 좌표계에서의 3차원 점을 나타낸다. 이 변환을 통해 월드 좌표계에서 카메라 좌표계로 변환된 후, 앞서 설명한 방식으로 이미지 평면에 투영된다.

이미지 좌표계

투영된 이미지 좌표 \mathbf{p} = [x, y]^\top는 실제 이미지 센서의 해상도와 관련이 있다. 카메라 내부 파라미터 행렬 \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는 이미지 평면 상의 중심 좌표이다. 이미지 좌표계로의 변환은 이 내부 파라미터 행렬을 통해 이루어진다.

픽셀 좌표계

카메라 센서에서 측정된 좌표는 이미지 좌표계를 픽셀 좌표계로 변환해야 한다. 이 변환은 센서의 해상도, 픽셀 크기, 그리고 각 축 방향의 단위가 다를 수 있음을 고려해야 한다. 픽셀 좌표계에서의 좌표는 보통 다음과 같은 수식을 통해 이미지 좌표계에서 변환된다:

u = \frac{x}{d_x}, \quad v = \frac{y}{d_y}

여기서 d_xd_y는 각각 픽셀 크기(이미지 센서의 해상도)에 따른 변환 비율이다. 이 변환을 통해 최종적으로 이미지를 구성하는 각 픽셀의 좌표를 얻을 수 있다.