# 투영 행렬과 카메라 매트릭스

#### 카메라 모델

카메라 모델은 실제 3차원 세계의 점을 이미지 평면 상의 2차원 점으로 변환하는 과정을 설명하는 수학적 모델이다. 이 과정은 일반적으로 **투영**(Projection)이라고 불리며, 이를 표현하는 가장 기본적인 수학적 도구가 **투영 행렬**(Projection Matrix)이다.

#### 투영 변환의 기초

투영은 3차원 점이 카메라의 중심으로부터 시작하여 이미지 평면에 매핑되는 과정을 포함한다. 3차원 점 $\mathbf{X} = (X, Y, Z, 1)^T$가 주어졌을 때, 이 점은 **카메라 좌표계**에서 다음과 같이 표현된다.

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

여기서:

* $\mathbf{X}$는 3차원 공간의 동차 좌표 (Homogeneous coordinates)로 표현된 점이다.
* $\mathbf{x}$는 이미지 평면 상의 2차원 점이다.
* $\mathbf{P}$는 **투영 행렬**이다.

#### 카메라 매트릭스의 구성

투영 행렬 $\mathbf{P}$는 내부 파라미터와 외부 파라미터로 구성된다. 이 두 파라미터는 카메라의 물리적 특성과 위치, 방향을 결정짓는다.

**외부 파라미터**

외부 파라미터는 3차원 공간 내에서의 카메라의 위치와 방향을 나타낸다. 이는 **회전 행렬** $\mathbf{R}$과 **이동 벡터** $\mathbf{t}$로 표현된다.

$$
\mathbf{P}\_{ext} = \[\mathbf{R} \ | \ \mathbf{t}]
$$

여기서:

* $\mathbf{R}$은 3x3 회전 행렬로, 카메라가 월드 좌표계에서 어떻게 회전하고 있는지를 나타낸다.
* $\mathbf{t}$는 3x1 이동 벡터로, 카메라의 위치를 나타낸다.

따라서, 외부 파라미터는 3차원 점을 월드 좌표계에서 **카메라 좌표계**로 변환하는 역할을 한다.

**내부 파라미터**

내부 파라미터는 카메라의 초점 거리, 픽셀 크기, 그리고 이미지 좌표계에서의 중심 좌표와 같은 카메라 자체의 특성을 포함한다. 이를 수학적으로 표현한 행렬을 **카메라 캘리브레이션 행렬**(Calibration Matrix) 또는 **내부 파라미터 행렬**이라고 한다. 이 행렬은 다음과 같은 3x3 행렬로 표현된다.

$$
\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$는 **이미지 중심**(Principal point)의 좌표이다.
* $1$은 동차 좌표계를 유지하기 위한 값이다.

내부 파라미터 행렬 $\mathbf{K}$는 카메라 좌표계를 **픽셀 좌표계**로 변환하는 역할을 한다. 즉, 3차원 점이 이미지 평면에 매핑될 때의 스케일링 및 이동을 담당한다.

#### 전체 투영 행렬

이제 카메라의 내부 파라미터와 외부 파라미터를 결합하여 전체 **투영 행렬** $\mathbf{P}$를 정의할 수 있다. 카메라 좌표계에서의 3차원 점 $\mathbf{X}\_{cam}$을 이미지 평면의 2차원 좌표 $\mathbf{x}$로 변환하는 과정은 다음과 같이 표현된다.

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

여기서:

* $\mathbf{K}$는 내부 파라미터 행렬
* $\[\mathbf{R} \ | \ \mathbf{t}]$는 외부 파라미터 행렬

따라서, 3차원 동차 좌표로 표현된 점 $\mathbf{X}$는 다음과 같이 투영된다.

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

이 수식을 풀어 쓰면:

$$
\begin{bmatrix} x \ y \ w \end{bmatrix} = \mathbf{K} \begin{bmatrix} \mathbf{R} & \mathbf{t} \end{bmatrix} \begin{bmatrix} X \ Y \ Z \ 1 \end{bmatrix}
$$

이 결과로 얻은 $\mathbf{x} = (x, y, w)^T$는 동차 좌표로 표현된 이미지 평면 상의 점이다. 이를 일반적인 좌표계로 변환하려면, 다음과 같이 정규화한다.

$$
x\_{img} = \frac{x}{w}, \quad y\_{img} = \frac{y}{w}
$$

여기서 $x\_{img}$와 $y\_{img}$는 이미지 좌표계에서의 실제 2차원 점 좌표이다.

#### 투영 행렬의 특성

투영 행렬 $\mathbf{P}$는 3x4 크기의 행렬로, 3차원 좌표를 2차원 이미지 좌표로 변환하는 비선형 과정을 선형 변환으로 나타낸다. 중요한 특성 중 하나는, 이 변환 과정에서 3차원 점들이 이미지 평면 상에 사영되며, 이 과정에서 깊이 정보가 소실된다는 것이다. 즉, 카메라의 투영 과정에서 **깊이**는 사라지고, 우리는 2차원 정보만 얻게 된다.

투영 행렬은 이러한 변환 과정의 기초를 제공하며, **카메라 보정**이나 **다중 뷰 기하학**에서 중요한 역할을 한다.
