# 카메라 모델과 투영

#### 카메라 모델

카메라 모델은 3D 공간에서의 점을 2D 이미지 평면으로 변환하는 과정을 수학적으로 설명하는 역할을 한다. 이 과정은 여러 가지 변수와 매트릭스를 통해 정의되며, 실제 물리적 카메라에서 발생하는 왜곡 현상을 고려해 수정할 수 있다.

가장 기본적인 카메라 모델은 **핀홀 카메라 모델**이다. 핀홀 카메라 모델은 렌즈를 무시하고, 작은 구멍을 통해 빛이 들어와 이미지를 형성하는 단순한 구조로 정의된다. 이 모델은 실제 카메라를 수학적으로 이상화한 모델이지만, 카메라 캘리브레이션의 기본적인 개념을 설명하는 데 매우 유용하다.

**3D 점과 이미지 평면의 변환**

카메라 캘리브레이션의 핵심은 3D 공간의 점 $\mathbf{X} = (X, Y, Z)^T$를 2D 이미지 좌표 $\mathbf{x} = (x, y)^T$로 변환하는 것이다. 이 변환은 **프로젝션**이라는 과정으로 정의되며, 이 과정은 카메라의 내부 파라미터와 외부 파라미터에 의해 제어된다.

카메라 모델은 크게 두 가지 매트릭스로 나뉜다:

1. **외부 파라미터(Extrinsic Parameters):** 카메라 좌표계를 월드 좌표계로 변환하는 매트릭스로, 회전 매트릭스 $\mathbf{R}$와 변환 벡터 $\mathbf{t}$로 표현된다.

   월드 좌표계에서의 3D 점 $\mathbf{X}\_w$를 카메라 좌표계에서의 3D 점 $\mathbf{X}\_c$로 변환하는 식은 다음과 같다:

$$
\mathbf{X}\_c = \mathbf{R}\mathbf{X}\_w + \mathbf{t}
$$

여기서 $\mathbf{R}$은 $3 \times 3$ 회전 매트릭스이고, $\mathbf{t}$는 $3 \times 1$ 변환 벡터이다.

2. **내부 파라미터(Intrinsic Parameters):** 카메라 내부의 특성을 정의하는 매트릭스로, 초점 거리(focal length), 주점(principal point), 픽셀 비율 등의 요소로 구성된다.

   카메라 내부 파라미터를 나타내는 매트릭스 $\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$는 주점 좌표이다.

#### 투영

투영은 3D 공간에서의 점을 2D 이미지 평면으로 변환하는 과정을 말한다. 이 과정에서, 먼저 3D 점은 카메라 좌표계로 변환되고, 이후에 2D 이미지 평면으로 투영된다.

3D 점 $\mathbf{X}\_w = (X\_w, Y\_w, Z\_w)^T$를 카메라 좌표계로 변환한 후, 이를 이미지 좌표로 변환하는 과정을 설명하는 투영 공식은 다음과 같다:

$$
\mathbf{x} = \mathbf{K} \[\mathbf{R} | \mathbf{t}] \mathbf{X}\_w
$$

여기서,

* $\mathbf{K}$는 카메라의 내부 파라미터 매트릭스,
* $\mathbf{R}$과 $\mathbf{t}$는 외부 파라미터 (회전 및 변환),
* $\mathbf{X}\_w$는 월드 좌표계에서의 3D 점이다.

이 투영 공식을 사용하면, 3D 좌표를 2D 이미지 평면으로 변환할 수 있다. 2D 이미지 평면에서의 최종 좌표 $\mathbf{x}$는 다음과 같은 비례 관계에 따라 계산된다:

$$
x = \frac{f\_x X\_c}{Z\_c} + c\_x
$$

$$
y = \frac{f\_y Y\_c}{Z\_c} + c\_y
$$

여기서, $(X\_c, Y\_c, Z\_c)$는 카메라 좌표계에서의 3D 점 좌표이며, $f\_x, f\_y$는 초점 거리, $c\_x, c\_y$는 주점이다.

이렇게 얻어진 2D 좌표는 이미지 평면에서의 좌표이며, 이 좌표는 실제 카메라의 픽셀 좌표와 일치하게 된다.

#### 비선형 왜곡의 고려

위의 기본 투영 공식은 이상적인 카메라 모델을 가정한 것이다. 하지만 실제 카메라에서는 다양한 형태의 비선형 왜곡이 발생한다. 이러한 왜곡은 **렌즈 왜곡**으로 인해 발생하며, 대표적으로 **Radial 왜곡**과 **Tangential 왜곡**이 있다.

**Radial 왜곡**

Radial 왜곡은 이미지의 중심에서 멀어질수록 직선이 곡선으로 보이는 현상이다. 이 왜곡은 렌즈의 곡률로 인해 발생하며, 렌즈가 볼록한 경우 **배럴 왜곡**(Barrel Distortion), 오목한 경우 **핀쿠션 왜곡**(Pincushion Distortion)이 발생한다.

Radial 왜곡을 수학적으로 표현하는 방식은 다항식 형태로 나타난다. 이미지 평면의 점 $(x\_d, y\_d)$가 왜곡된 좌표라고 할 때, 왜곡되지 않은 이상적인 좌표 $(x\_u, y\_u)$는 다음과 같은 관계식으로 나타낼 수 있다:

$$
x\_u = x\_d (1 + k\_1 r^2 + k\_2 r^4 + k\_3 r^6)
$$

$$
y\_u = y\_d (1 + k\_1 r^2 + k\_2 r^4 + k\_3 r^6)
$$

여기서,

* $r = \sqrt{x\_d^2 + y\_d^2}$는 왜곡된 점의 반지름,
* $k\_1, k\_2, k\_3$는 Radial 왜곡 계수이다.

이 수식을 통해, Radial 왜곡으로 인해 왜곡된 이미지를 보정할 수 있다.

**Tangential 왜곡**

Tangential 왜곡은 렌즈와 센서의 정렬이 완벽하지 않을 때 발생하는 왜곡이다. 이는 이미지의 특정 부분이 비대칭적으로 왜곡되는 현상으로, 카메라 렌즈가 완전히 수직으로 정렬되지 않을 때 발생할 수 있다.

Tangential 왜곡을 보정하는 수식은 다음과 같이 나타낼 수 있다:

$$
x\_u = x\_d + \[2 p\_1 x\_d y\_d + p\_2 (r^2 + 2 x\_d^2)]
$$

$$
y\_u = y\_d + \[p\_1 (r^2 + 2 y\_d^2) + 2 p\_2 x\_d y\_d]
$$

여기서 $p\_1$과 $p\_2$는 Tangential 왜곡 계수이다. 이 수식을 통해 Tangential 왜곡도 보정할 수 있다.

#### 투영 매트릭스

카메라 모델과 투영 과정을 종합하면, 3D 공간에서 2D 이미지 평면으로의 변환은 **투영 매트릭스**를 통해 이루어진다. 투영 매트릭스는 카메라의 내부 파라미터와 외부 파라미터를 모두 포함한 매트릭스이다. 이 매트릭스는 다음과 같이 표현된다:

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

여기서 $\mathbf{P}$는 $3 \times 4$ 크기의 매트릭스로, 3D 점 $\mathbf{X}\_w = (X\_w, Y\_w, Z\_w, 1)^T$를 2D 이미지 평면으로 변환하는 역할을 한다. 이 투영 매트릭스를 통해 3D 좌표를 2D 이미지로 변환하는 모든 과정이 수학적으로 정의된다.

#### 투영 과정의 예시

예를 들어, 월드 좌표계에서의 3D 점 $\mathbf{X}\_w = (X\_w, Y\_w, Z\_w)^T$가 주어졌다고 가정한다. 이 점을 카메라 좌표계로 변환하기 위해서는 외부 파라미터 매트릭스를 적용해야 하며, 이어서 카메라의 내부 파라미터를 적용하여 이미지 평면의 2D 좌표를 얻는다.

1. 3D 점 $\mathbf{X}\_w$를 카메라 좌표계로 변환:

$$
\mathbf{X}\_c = \mathbf{R} \mathbf{X}\_w + \mathbf{t}
$$

2. 카메라 내부 파라미터를 적용하여 2D 이미지 좌표를 계산:

$$
\mathbf{x} = \mathbf{K} \mathbf{X}\_c
$$

이 과정에서 Radial 왜곡과 Tangential 왜곡을 보정하려면, 위에서 설명한 왜곡 보정 수식을 추가로 적용해야 한다.
