# 내부 파라미터와 외부 파라미터

#### 내부 파라미터

카메라 모델에서 내부 파라미터는 카메라 내부의 물리적 특성을 나타내며, 이미지 센서와 관련된 요소들을 설명한다. 이러한 내부 파라미터는 일반적으로 카메라 캘리브레이션 과정을 통해 계산되며, 주요 파라미터들은 다음과 같다.

1. **초점 거리 $f$**: 카메라 렌즈에서 이미지 평면까지의 거리를 나타낸다. 이는 이미지 센서에서 발생하는 확대/축소 비율을 결정하며, 보통 수평 및 수직 방향의 초점 거리를 구분하여 나타낸다. 초점 거리는 다음과 같은 형태로 나타낼 수 있다.

$$
\mathbf{K} = \begin{bmatrix} f\_x & 0 & c\_x \ 0 & f\_y & c\_y \ 0 & 0 & 1 \end{bmatrix}
$$

여기서 $f\_x$와 $f\_y$는 각각 수평 및 수직 초점 거리이며, $c\_x$와 $c\_y$는 이미지 좌표계에서의 주점(principal point)을 나타낸다.

2. **주점 $(c\_x, c\_y)$**: 카메라 렌즈의 중심이 이미지 센서에 투영된 지점을 말한다. 일반적으로 이미지 센서의 중심 근처에 위치하지만, 정확한 위치는 캘리브레이션 과정에서 추정된다.
3. **왜곡 계수**: 대부분의 렌즈는 광학적인 왜곡을 가지고 있다. 이를 보정하기 위해 왜곡 계수가 사용된다. 일반적인 왜곡은 두 가지로 구분된다:
   * **방사 왜곡 (Radial distortion)**: 렌즈 중심으로부터 거리가 멀어질수록 발생하는 왜곡이다. 이 왜곡은 보통 다음과 같은 수식으로 모델링된다.

$$
r\_{\text{distorted}} = r(1 + k\_1 r^2 + k\_2 r^4 + k\_3 r^6)
$$

여기서 $r$는 원래의 거리, $k\_1, k\_2, k\_3$는 방사 왜곡 계수이다.

* **접선 왜곡 (Tangential distortion)**: 렌즈가 평면에 정확하게 수직으로 배치되지 않았을 때 발생하는 왜곡이다. 접선 왜곡은 다음과 같이 표현된다.

$$
x\_{\text{distorted}} = x + \[2p\_1 xy + p\_2 (r^2 + 2x^2)]
$$

$$
y\_{\text{distorted}} = y + \[p\_1 (r^2 + 2y^2) + 2p\_2 xy]
$$

여기서 $p\_1$, $p\_2$는 접선 왜곡 계수이다.

#### 외부 파라미터

외부 파라미터는 카메라가 월드 좌표계에서 어떻게 위치하고 방향을 가리키는지 설명한다. 즉, 월드 좌표계와 카메라 좌표계 간의 관계를 나타내며, \*\*회전 행렬 $\mathbf{R}$\*\*과 \*\*이동 벡터 $\mathbf{t}$\*\*로 구성된다.

1. **회전 행렬 $\mathbf{R}$**: 월드 좌표계에서 카메라 좌표계로 변환하기 위한 회전 변환을 나타낸다. 회전 행렬은 일반적으로 3x3 행렬로 표현되며, 각 축에 대한 회전을 나타낸다. 이 행렬은 다음과 같은 형태를 가진다.

$$
\mathbf{R} = \begin{bmatrix} r\_{11} & r\_{12} & r\_{13} \ r\_{21} & r\_{22} & r\_{23} \ r\_{31} & r\_{32} & r\_{33} \end{bmatrix}
$$

2. **이동 벡터 $\mathbf{t}$**: 카메라의 위치를 나타내며, 월드 좌표계에서 카메라 좌표계로 이동하는 벡터이다. 이 벡터는 카메라의 중심이 월드 좌표계에서 어느 위치에 있는지를 설명한다. 이동 벡터는 다음과 같이 표현된다.

$$
\mathbf{t} = \begin{bmatrix} t\_x \ t\_y \ t\_z \end{bmatrix}
$$

회전 행렬과 이동 벡터는 카메라 좌표계를 월드 좌표계로 변환하기 위한 기본 요소이며, 둘을 결합하여 **외부 파라미터 행렬**로 나타낼 수 있다.

$$
\mathbf{P}\_{ext} = \begin{bmatrix} \mathbf{R} & \mathbf{t} \end{bmatrix}
$$

이는 3x4 크기의 행렬로, 카메라 좌표계를 월드 좌표계로 변환하는 과정을 설명한다.

#### 외부 파라미터의 활용

외부 파라미터는 월드 좌표계에서의 3D 점을 카메라 좌표계로 변환하는 데 사용된다. 이 변환은 다음과 같은 수식으로 표현된다.

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

여기서,

* $\mathbf{X\_c}$는 카메라 좌표계에서의 3D 점 좌표 $\begin{bmatrix} X\_c \ Y\_c \ Z\_c \end{bmatrix}$,
* $\mathbf{X\_w}$는 월드 좌표계에서의 3D 점 좌표 $\begin{bmatrix} X\_w \ Y\_w \ Z\_w \end{bmatrix}$,
* $\mathbf{R}$는 회전 행렬,
* $\mathbf{t}$는 이동 벡터이다.

즉, 외부 파라미터는 월드 좌표계에서 카메라 좌표계로의 좌표 변환을 정의한다. 변환된 좌표는 다시 카메라의 내부 파라미터를 통해 2D 이미지 평면으로 투영된다.

#### 투영 행렬

내부 파라미터와 외부 파라미터를 결합하면, 월드 좌표계에서 카메라 좌표계로, 그리고 최종적으로 이미지 평면으로의 투영을 나타내는 **투영 행렬**을 정의할 수 있다. 투영 행렬 $\mathbf{P}$는 다음과 같이 표현된다.

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

여기서 $\mathbf{K}$는 카메라의 내부 파라미터 행렬이며, $\[\mathbf{R} | \mathbf{t}]$는 외부 파라미터 행렬이다. 이 행렬을 사용하면 3D 공간의 점을 2D 이미지 평면으로 변환할 수 있다.

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

여기서,

* $\mathbf{x}$는 이미지 평면에서의 2D 점 좌표 $\begin{bmatrix} x \ y \ 1 \end{bmatrix}$,
* $\mathbf{X\_w}$는 월드 좌표계에서의 3D 점 좌표이다.

이 수식을 통해 카메라가 3D 공간의 어떤 점을 어떻게 2D 이미지로 투영하는지 계산할 수 있다.
