# 동차 좌표계의 기초

동차 좌표계(Homogeneous coordinates)는 컴퓨터 비전과 컴퓨터 그래픽스에서 주로 사용되는 기법으로, 변환의 표현을 단순화하고 기하학적 관계를 더욱 직관적으로 다룰 수 있게 해준다. 특히, 에피폴라 기하학에서 카메라 모델과 3D 복원 작업에서 중요한 역할을 한다.

### 동차 좌표계의 개념

동차 좌표계는 일반적인 유클리드 좌표계에서 한 차원을 더 추가하여 점, 직선, 평면 등의 기하학적 객체를 보다 쉽게 다루도록 하는 좌표 체계이다. 일반적으로 2D에서 3D로, 3D에서 4D로 좌표계를 확장하는 방식으로 이루어진다.

#### 2D에서 3D로의 확장

2D 공간에서 점 $(x, y)$는 동차 좌표계에서 $(x\_h, y\_h, w)$로 표현된다. 여기서 $x\_h$와 $y\_h$는 새로운 좌표계에서의 좌표이고, $w$는 척도(scale factor)로 불린다. 이때, 동차 좌표계에서 유클리드 좌표계로의 변환은 다음과 같이 정의된다.

$$
x = \frac{x\_h}{w}, \quad y = \frac{y\_h}{w}
$$

이때 $w$가 0이 아닌 경우 동차 좌표계에서 유클리드 좌표계로 변환이 가능하다. $w = 0$인 경우는 무한원점(point at infinity)을 의미하게 된다. 동차 좌표계는 이러한 무한원점을 포함할 수 있어, 무한대로 나가는 직선이나 평면을 보다 쉽게 표현할 수 있게 한다.

#### 3D에서 4D로의 확장

3D 공간에서 점 $(x, y, z)$는 동차 좌표계에서 $(x\_h, y\_h, z\_h, w)$로 표현된다. 이때 3D 유클리드 좌표계에서 동차 좌표계로 변환하는 과정은 다음과 같다.

$$
x = \frac{x\_h}{w}, \quad y = \frac{y\_h}{w}, \quad z = \frac{z\_h}{w}
$$

마찬가지로, $w = 0$인 경우는 무한원을 나타내며, $w \neq 0$인 경우는 유한한 좌표를 의미한다. 이를 통해 카메라 모델에서의 변환과 사영 기하학(projective geometry)을 동차 좌표계로 표현할 수 있다.

#### 행렬 표현

동차 좌표계에서 변환은 주로 행렬 곱을 통해 표현된다. 예를 들어, 2D 평면에서의 점 $\mathbf{p} = (x, y, 1)^T$는 변환 행렬 $\mathbf{T}$를 통해 다음과 같이 변환될 수 있다.

$$
\mathbf{p'} = \mathbf{T} \mathbf{p}
$$

여기서 변환 행렬 $\mathbf{T}$는 회전, 평행 이동, 스케일링 등을 포함할 수 있는 3x3 행렬로 나타낼 수 있다.

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

따라서 동차 좌표계는 단순한 좌표 변환을 행렬 곱셈으로 표현할 수 있으며, 다양한 기하학적 변환을 통합된 방식으로 다룰 수 있게 한다.

#### 직선의 동차 좌표 표현

동차 좌표계에서 점뿐만 아니라 직선도 표현할 수 있다. 2D 공간에서 직선은 동차 좌표계에서 다음과 같이 나타낼 수 있다.

$$
\mathbf{l} = (a, b, c)^T
$$

여기서 $\mathbf{l}$은 직선의 방정식 $ax + by + c = 0$을 나타낸다. 동차 좌표계에서 점 $\mathbf{p} = (x\_h, y\_h, w)$는 직선 $\mathbf{l}$과 다음의 관계식을 만족한다.

$$
\mathbf{l}^T \mathbf{p} = 0
$$

이 방정식은 점 $\mathbf{p}$가 직선 $\mathbf{l}$ 위에 있다는 조건을 의미하며, 동차 좌표계에서는 이러한 점과 직선의 관계를 직관적으로 다룰 수 있게 된다.

#### 교차점의 동차 좌표 표현

동차 좌표계에서 두 직선의 교차점은 외적(cross product)을 사용하여 계산할 수 있다. 두 직선 $\mathbf{l\_1} = (a\_1, b\_1, c\_1)^T$와 $\mathbf{l\_2} = (a\_2, b\_2, c\_2)^T$의 교차점 $\mathbf{p}$는 다음과 같이 표현된다.

$$
\mathbf{p} = \mathbf{l\_1} \times \mathbf{l\_2}
$$

이때 교차점은 동차 좌표계에서 표현되며, 이를 유클리드 좌표계로 변환하려면 앞서 설명한 방식으로 $w$를 사용하여 변환하면 된다.

#### 무한원점과 평행선

동차 좌표계의 중요한 특징 중 하나는 무한원점을 포함할 수 있다는 점이다. 2D 유클리드 공간에서 평행한 두 직선은 동차 좌표계에서 무한원점에서 만나는 것으로 해석된다. 즉, 평행한 직선들은 동차 좌표계에서 동일한 무한원점으로 수렴하게 된다.

예를 들어, 두 직선 $\mathbf{l\_1}$과 $\mathbf{l\_2}$가 평행하다면, 그들의 교차점은 동차 좌표계에서 다음과 같이 무한원점으로 나타난다.

$$
\mathbf{p} = (x\_h, y\_h, 0)^T
$$

여기서 $w = 0$인 경우 무한대의 점을 의미하며, 이러한 개념은 사영 기하학에서 매우 유용하게 사용된다.

#### 사영 변환과 동차 좌표계

동차 좌표계는 사영 변환(Projective Transformation)을 간단하게 표현하는 데 사용된다. 사영 변환은 직선을 직선으로, 점을 점으로 이동시키며, 유클리드 기하학적 변환의 일반화된 형태이다. 2D에서의 사영 변환은 다음과 같은 3x3 변환 행렬 $\mathbf{H}$에 의해 표현된다.

$$
\mathbf{p'} = \mathbf{H} \mathbf{p}
$$

여기서 $\mathbf{H}$는 사영 변환을 나타내는 3x3 행렬이며, $\mathbf{p}$는 변환될 점의 동차 좌표이다. 사영 변환은 평행선의 교차점이 무한원점에서 만난다는 특성을 가지며, 이러한 변환을 통해 카메라에서 바라본 장면의 기하학적 왜곡을 설명할 수 있다.

#### 동차 좌표계에서의 변환 종류

동차 좌표계에서는 여러 가지 기하학적 변환을 통일된 방식으로 다룰 수 있다. 주로 다루는 변환에는 평행 이동, 회전, 스케일링, 사영 변환 등이 있다.

**평행 이동(Translation)**

동차 좌표계에서 2D 공간의 점 $\mathbf{p} = (x\_h, y\_h, w)$를 평행 이동시키는 변환은 다음과 같은 행렬로 표현된다.

$$
\mathbf{T} = \begin{bmatrix} 1 & 0 & t\_x \ 0 & 1 & t\_y \ 0 & 0 & 1 \end{bmatrix}
$$

여기서 $t\_x$와 $t\_y$는 각각 x축과 y축 방향으로의 이동 거리이다. 이 변환 행렬을 사용하여 점 $\mathbf{p}$를 평행 이동시키면 다음과 같이 계산된다.

$$
\mathbf{p'} = \mathbf{T} \mathbf{p}
$$

즉, 평행 이동 변환은 단순한 덧셈 연산을 행렬 곱으로 표현할 수 있으며, 이를 통해 여러 기하학적 변환을 동시에 처리할 수 있다.

**회전(Rotation)**

동차 좌표계에서 2D 공간의 점을 회전시키는 변환은 회전각 $\theta$에 따라 다음과 같은 3x3 행렬로 표현된다.

$$
\mathbf{R} = \begin{bmatrix} \cos\theta & -\sin\theta & 0 \ \sin\theta & \cos\theta & 0 \ 0 & 0 & 1 \end{bmatrix}
$$

이 회전 변환을 사용하여 점 $\mathbf{p}$를 회전시키면 다음과 같이 계산된다.

$$
\mathbf{p'} = \mathbf{R} \mathbf{p}
$$

이때 회전 변환은 점이 원점을 기준으로 시계방향 또는 반시계방향으로 회전하는 효과를 나타낸다.

**스케일링(Scaling)**

동차 좌표계에서 스케일링 변환은 점의 크기를 조정하는 방식으로 이루어진다. 이는 다음과 같은 3x3 행렬로 표현된다.

$$
\mathbf{S} = \begin{bmatrix} s\_x & 0 & 0 \ 0 & s\_y & 0 \ 0 & 0 & 1 \end{bmatrix}
$$

여기서 $s\_x$와 $s\_y$는 각각 x축과 y축 방향으로의 스케일링 팩터이다. 이 변환 행렬을 사용하여 점 $\mathbf{p}$의 크기를 조정하면 다음과 같이 계산된다.

$$
\mathbf{p'} = \mathbf{S} \mathbf{p}
$$

**사영 변환(Projective Transformation)**

사영 변환은 동차 좌표계에서 가장 일반적인 변환 중 하나로, 직선의 기하학적 속성을 유지하면서도 왜곡된 투영을 처리할 수 있다. 2D에서의 사영 변환은 다음과 같은 3x3 행렬로 표현된다.

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

사영 변환을 통해 점 $\mathbf{p}$는 다음과 같이 변환된다.

$$
\mathbf{p'} = \mathbf{H} \mathbf{p}
$$

이때 사영 변환은 평행한 직선이 무한대에서 만나게 되며, 카메라 투영 시스템에서의 기하학적 관계를 설명하는 데 매우 유용하다.

#### 동차 좌표계의 기하학적 의미

동차 좌표계는 단순히 차원을 확장하는 것 이상의 기하학적 의미를 지닌다. 특히, 원근법과 투영법에서의 기하학적 관계를 간단하게 표현할 수 있으며, 여러 개의 변환을 일관되게 처리할 수 있다는 장점이 있다. 이러한 이유로 동차 좌표계는 컴퓨터 비전, 컴퓨터 그래픽스, 로봇 공학 등에서 필수적인 도구로 사용된다.
