기본 개념
삼각 측량(Triangulation)은 두 개의 서로 다른 시점에서 관찰된 점을 바탕으로, 그 점의 3차원 좌표를 추정하는 기법이다. 이 방법은 카메라의 위치와 방향을 알고 있을 때, 두 이미지에서 동일한 피사체의 점을 대응시킴으로써 깊이 정보를 계산한다.
스테레오 비전에서, 깊이 정보는 두 카메라의 시차(disparity)를 활용하여 추출된다. 시차는 두 이미지에서 같은 물체의 좌표 차이로 정의되며, 시차가 클수록 물체는 카메라에 가깝고, 시차가 작을수록 물체는 카메라에서 멀리 있다.
기본 수식
두 카메라에서 얻어진 2차원 이미지 상의 점을 각각 \mathbf{x}_1과 \mathbf{x}_2라고 하고, 그 점에 대응하는 3차원 공간 상의 점을 \mathbf{X}라고 하자. 카메라의 투영 행렬을 각각 \mathbf{P}_1과 \mathbf{P}_2라고 할 때, 두 카메라에서 동일한 3차원 점 \mathbf{X}의 이미지 좌표는 다음과 같이 표현된다.
여기서 \mathbf{P}_1과 \mathbf{P}_2는 각각 첫 번째와 두 번째 카메라의 투영 행렬이다. 이 식은 동차 좌표계로 표현되며, \mathbf{x}_1과 \mathbf{x}_2는 각각 첫 번째와 두 번째 카메라에서 투영된 2차원 좌표이다.
에피폴라 제약을 통한 삼각 측량
삼각 측량 과정에서 중요한 제약 조건 중 하나는 에피폴라 제약(Epipolar Constraint)이다. 에피폴라 제약은 두 카메라 사이의 기본 행렬 \mathbf{F}을 기반으로 다음과 같이 주어진다:
여기서 \mathbf{F}는 기본 행렬이며, 이 행렬은 두 이미지 간의 대응점들 사이의 기하학적 관계를 정의한다. 이 제약은 삼각 측량의 해를 구하는 데 중요한 역할을 한다.
깊이 계산
깊이 정보는 두 카메라 간의 시차 d를 통해 얻을 수 있다. 시차는 동일한 3차원 점의 두 이미지 좌표 간의 차이로 정의되며, 이를 수식으로 표현하면 다음과 같다:
여기서 x_1과 x_2는 각각 첫 번째와 두 번째 카메라에서 동일한 3차원 점의 x-좌표이다. 시차 d가 주어지면, 카메라의 초점 거리 f와 카메라 간의 거리 B를 이용하여 깊이 Z를 다음과 같이 계산할 수 있다:
이 공식은 시차가 클수록 깊이가 작아져 물체가 카메라에 가깝다는 것을 의미하고, 시차가 작을수록 깊이가 커져 물체가 카메라에서 멀다는 것을 의미한다.
삼각 측량 과정
삼각 측량의 핵심은 두 카메라의 이미지를 통해 3차원 공간 상의 점을 찾는 것이다. 이를 위해 각 카메라의 중심과 이미지 좌표를 기반으로 광선을 생성하고, 두 광선의 교차점을 통해 3차원 좌표를 계산한다. 이 과정은 다음과 같은 단계로 이루어진다.
1. 3차원 점의 투영
먼저, 각 카메라에서의 투영 행렬 \mathbf{P}_1, \mathbf{P}_2를 이용하여 3차원 점 \mathbf{X}가 두 이미지에서 어떻게 보이는지를 계산한다. 이 투영 과정은 다음과 같이 표현된다:
이때 \mathbf{x}_1과 \mathbf{x}_2는 이미지 상에서 관측된 2차원 좌표이다.
2. 광선 생성
각 카메라의 중심에서 3차원 공간으로의 광선을 생성한다. 이 광선은 카메라의 투영 행렬과 이미지 상의 좌표를 통해 표현된다. 즉, 카메라 중심에서 관측된 점으로 가는 광선이 생성되며, 이 광선은 3차원 공간에서의 한 직선으로 모델링된다.
3. 두 광선의 교차점 계산
두 카메라에서 관측된 동일한 점을 기준으로 생성된 두 광선은 이상적으로 3차원 공간에서 교차한다. 이 교차점을 계산하는 것은 삼각 측량의 목표이다. 그러나 실제로는 노이즈나 다른 요인들로 인해 두 광선이 완벽하게 교차하지 않을 수 있으므로, 최소 제곱법을 통해 두 광선 간의 최소 거리 점을 계산하여 3차원 점을 추정한다.
4. 비선형 최적화
삼각 측량 과정에서 발생할 수 있는 오차를 줄이기 위해, 비선형 최적화 기법이 사용된다. 이는 관측된 이미지 좌표와 추정된 3차원 좌표 간의 차이를 최소화하는 방식으로 이루어진다. 일반적으로 비선형 최소 제곱법이 사용되며, 다음과 같은 비용 함수를 최소화하는 문제로 설정된다:
여기서 \|\cdot\|는 유클리드 거리를 나타낸다. 이 최적화 과정을 통해 3차원 공간 상의 점 \mathbf{X}를 더욱 정확하게 추정할 수 있다.
알고리즘 구현
삼각 측량의 구현은 이미지 좌표와 카메라 행렬을 입력받아, 해당 좌표에 대응하는 3차원 점을 계산하는 과정이다. 일반적인 삼각 측량 알고리즘은 다음과 같은 단계를 따른다:
- 이미지에서 대응점 추출
- 대응점 좌표와 카메라 행렬을 이용해 광선 생성
- 두 광선의 교차점을 계산하여 3차원 좌표 추정
- 비선형 최적화를 통해 오차 최소화