카메라 캘리브레이션에서 내부 파라미터와 외부 파라미터는 카메라의 물리적 구조와 위치를 설명하는 중요한 요소이다. 이들은 각각 카메라 자체의 특성과, 월드 좌표계에서의 카메라의 위치 및 방향을 나타낸다.

내부 파라미터

내부 파라미터는 카메라의 센서나 렌즈의 특성에 따라 결정되며, 이는 이미지 평면 내에서의 좌표 변환에 영향을 준다. 이를 통해 월드 좌표계에서 얻어진 3D 점이 2D 이미지 평면으로 변환될 때의 스케일, 왜곡, 중심 위치 등을 설명할 수 있다.

카메라 내부 파라미터는 보통 3x3 카메라 매트릭스로 나타낸다. 이를 \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축 방향의 초점 거리 (focal length)이다. 카메라 센서가 직사각형일 경우, 두 초점 거리는 다를 수 있다. - c_xc_y는 이미지 좌표계에서의 주점(principal point)의 좌표를 나타낸다. 이는 카메라 렌즈의 중심이 이미지 센서에서 정확히 중심에 위치하지 않을 경우 발생한다.

이 카메라 매트릭스는 카메라가 어떻게 3D 세계를 2D 이미지 평면으로 변환하는지에 대한 기본적인 내부 파라미터를 설명한다. 이 매트릭스를 사용하여 왜곡이 없는 이상적인 카메라 모델에서의 투영을 계산할 수 있다.

외부 파라미터

외부 파라미터는 월드 좌표계에서 카메라의 위치와 방향을 나타낸다. 이는 카메라가 공간에서 어떤 위치에 있고, 어떤 방향을 보고 있는지를 설명한다. 외부 파라미터는 회전 행렬과 평행 이동 벡터로 표현된다.

외부 파라미터는 보통 회전 행렬 \mathbf{R}과 이동 벡터 \mathbf{t}로 나타낸다. 이를 통해 월드 좌표계에서 특정한 점을 카메라 좌표계로 변환할 수 있다. 외부 파라미터는 다음과 같은 4x4 변환 행렬로 나타낼 수 있다:

\mathbf{T} = \begin{bmatrix} \mathbf{R} & \mathbf{t} \\ 0 & 1 \end{bmatrix}

여기서: - \mathbf{R}은 3x3 회전 행렬로, 카메라의 방향을 나타낸다. - \mathbf{t}는 3x1 이동 벡터로, 카메라의 위치를 설명한다.

이 변환 행렬을 통해 월드 좌표계에서 3D 점 \mathbf{X}_w = (X_w, Y_w, Z_w, 1)^T를 카메라 좌표계에서의 점 \mathbf{X}_c = (X_c, Y_c, Z_c, 1)^T로 변환할 수 있다. 변환은 다음과 같이 이루어진다:

\mathbf{X}_c = \mathbf{T} \cdot \mathbf{X}_w

즉, 회전 행렬 \mathbf{R}과 이동 벡터 \mathbf{t}를 사용하여 월드 좌표계의 점을 카메라 좌표계로 변환할 수 있다.

외부 파라미터는 카메라가 월드 좌표계에서 차지하는 위치와 방향을 정확히 반영하기 때문에, 여러 카메라로 촬영된 이미지들 간의 상호 관계를 규명하거나, 특정 3D 객체의 위치와 방향을 추정하는 데 필수적인 역할을 한다.

외부 파라미터의 구체적인 정의

외부 파라미터를 구체적으로 살펴보면, 회전 행렬 \mathbf{R}과 이동 벡터 \mathbf{t}는 월드 좌표계에서 카메라 좌표계로의 변환을 표현한다. 예를 들어, 월드 좌표계에서의 점 \mathbf{X}_w가 주어졌을 때, 이를 카메라 좌표계로 변환하는 방식은 다음과 같다.

먼저, 회전 행렬 \mathbf{R}은 3D 공간에서 카메라의 회전 방향을 나타낸다. 이 회전은 일반적으로 카메라의 축을 중심으로 한 3차원 회전으로 설명되며, 이를 로드리게스 회전(Rodrigues rotation) 또는 오일러 각(Euler angles)으로 표현할 수 있다. 회전 행렬 \mathbf{R}은 다음과 같은 형태를 갖는다:

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

이 행렬은 3D 공간에서의 회전 변환을 나타내며, 각 행과 열은 서로 직교해야 한다. 회전 행렬은 무조건 정규 직교 행렬이므로, 그 역행렬은 전치 행렬과 동일한다 (\mathbf{R}^{-1} = \mathbf{R}^T).

두 번째로, 이동 벡터 \mathbf{t}는 카메라가 월드 좌표계에서 어느 위치에 있는지를 나타낸다. 이 벡터는 다음과 같은 3x1 행렬로 표현된다:

\mathbf{t} = \begin{bmatrix} t_x \\ t_y \\ t_z \end{bmatrix}

여기서 t_x, t_y, t_z는 각각 x축, y축, z축 방향의 이동을 나타낸다. 따라서 월드 좌표계에서 카메라가 어떻게 위치하고 있는지에 대한 정보를 제공한다.

내부 파라미터와 외부 파라미터의 관계

카메라 내부 파라미터 \mathbf{K}와 외부 파라미터 \mathbf{R}, \mathbf{t}는 결합되어, 3D 월드 좌표계의 점을 2D 이미지 좌표계로 변환하는 과정에서 중요한 역할을 한다. 이 전체 과정은 투영 변환(projection transformation)이라고 불리며, 이를 통해 3D 공간의 점이 어떻게 이미지 평면에 투영되는지를 알 수 있다.

먼저, 3D 월드 좌표계의 점 \mathbf{X}_w = (X_w, Y_w, Z_w, 1)^T를 카메라 좌표계의 점으로 변환하기 위해 외부 파라미터를 사용한다:

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

그 후, 내부 파라미터 \mathbf{K}를 사용하여 이 카메라 좌표계의 점을 2D 이미지 평면으로 투영한다. 이미지 좌표 \mathbf{x}_i = (u, v, 1)^T는 다음과 같이 계산된다:

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

따라서 전체 투영 과정은 다음과 같은 하나의 수식으로 표현된다:

\mathbf{x}_i = \mathbf{K} \left( \mathbf{R} \mathbf{X}_w + \mathbf{t} \right)

이 과정을 통해 3D 월드 좌표계의 점 \mathbf{X}_w는 2D 이미지 좌표계에서의 점 \mathbf{x}_i로 변환된다. 이때, 투영 결과는 2D 평면의 좌표로 나타나며, 이는 카메라 이미지에서의 픽셀 좌표와 대응된다.