# 핀홀 카메라 모델

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

#### 핀홀 모델의 기본 개념

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

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

$$
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\_x$와 $f\_y$는 각각 $x$축과 $y$축 방향의 초점 거리를 의미하며, $c\_x$와 $c\_y$는 이미지 평면 상의 중심 좌표이다. 이미지 좌표계로의 변환은 이 내부 파라미터 행렬을 통해 이루어진다.

**픽셀 좌표계**

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

$$
u = \frac{x}{d\_x}, \quad v = \frac{y}{d\_y}
$$

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