스테레오 비전 시스템에서 정합 알고리즘은 두 이미지 사이의 픽셀을 대응시키는 과정을 의미한다. 이 과정은 깊이 정보를 계산하는 데 필수적이며, 정합 기법은 주로 두 가지 범주로 나뉜다: 준밀집(semi-dense) 정합 기법과 밀집(dense) 정합 기법이다.
준밀집 정합 기법
준밀집 정합 기법은 이미지에서 일부의 중요한 특징점만을 추출하여 그 특징점들 사이의 정합을 수행하는 방식이다. 이 방식은 처리 시간이 적고, 잡음에 강하지만, 전체적인 장면을 복원하기 어렵다. 준밀집 정합 기법의 대표적인 알고리즘은 아래와 같다:
1. SIFT (Scale-Invariant Feature Transform)
SIFT 알고리즘은 이미지 내에서 스케일 변화에 불변한 특징점을 추출하는 방법이다. 각 특징점은 고유한 방향과 크기를 가지며, 이러한 정보는 정합 과정에서 사용된다. 다음은 SIFT 알고리즘의 주요 과정이다:
- 특징점 검출: 이미지의 여러 스케일에서 흥미로운 지점을 찾는다.
- 방향 할당: 각 특징점에 해당하는 고유 방향을 할당하여 회전에 불변한 특성을 만든다.
- 특징점 기술자 생성: 특징점 주변의 그라디언트 정보를 이용해 기술자를 생성한다.
- 정합: 두 이미지에서 유사한 특징점을 정합시킨다.
2. SURF (Speeded-Up Robust Features)
SURF는 SIFT와 유사하지만 더 빠르고 효율적인 방식으로 특징점을 추출하고 정합하는 알고리즘이다. SURF는 Haar 웨이블렛 변환을 사용하여 특징점을 추출하고, 이미지의 회전 및 스케일 변화에 불변한 특징을 추출하는 방법을 제공한다.
$$ \mathbf{H} = \begin{bmatrix} L_{xx} & L_{xy} \ L_{yx} & L_{yy} \end{bmatrix} $$ 여기서, L_{xx}, L_{xy}, L_{yy}는 이미지의 각 방향에서의 2차 미분 필터링 결과이다.
밀집 정합 기법
밀집 정합 기법은 이미지의 모든 픽셀에 대해 정합을 수행하는 방식이다. 이 방식은 전체 장면을 복원할 수 있지만, 처리 시간이 길고 잡음에 민감하다. 밀집 정합 기법의 대표적인 방법으로는 다음이 있다:
1. 광류 (Optical Flow)
광류는 시간에 따라 변화하는 장면에서의 물체 이동을 추적하는 기법이다. 이는 스테레오 정합에도 응용될 수 있으며, 각 픽셀마다의 이동 벡터를 계산하여 깊이 정보를 추출한다. 광류의 대표적인 방법 중 하나는 Horn-Schunck 방법이다.
Horn-Schunck 방법은 다음과 같은 에너지 최소화 문제를 푼다:
$$ E(\mathbf{u}, \mathbf{v}) = \iint \left( \left( I_x \mathbf{u} + I_y \mathbf{v} + I_t \right)^2 + \alpha \left( |\nabla \mathbf{u}|^2 + |\nabla \mathbf{v}|^2 \right) \right) dxdy $$ 여기서, I_x, I_y, I_t는 각각 이미지의 시간적 변화와 공간적 변화에 대한 미분이고, \mathbf{u}, \mathbf{v}는 광류 벡터를 나타낸다. \alpha는 매끄러움 매개변수로, 정합의 부드러움을 조절한다.
2. 준밀집 정합과 밀집 정합의 차이점
준밀집 정합 기법은 특징점 기반으로 처리되며, 이미지의 일부분만을 고려하기 때문에 상대적으로 빠르게 처리할 수 있다. 그러나 준밀집 기법으로는 장면의 전체 깊이 정보를 복원하는 데 한계가 있다. 반면, 밀집 정합 기법은 이미지의 모든 픽셀에 대해 정합을 수행하므로 전체 장면을 복원할 수 있지만, 처리 시간이 오래 걸리고 잡음에 민감하다는 단점이 있다.
준밀집 정합의 주요 장점:
- 빠른 처리 속도
- 잡음에 강한 특성
- 특정 특징점들만 정합하므로 계산 효율성 향상
밀집 정합의 주요 장점:
- 모든 픽셀을 고려하므로 전체 장면을 복원 가능
- 움직임이 많은 장면에서도 세부 정보를 정확히 추출 가능
3. 비용 함수 기반의 밀집 정합 기법
밀집 정합에서 일반적으로 사용하는 기법 중 하나는 비용 함수 기반의 정합이다. 비용 함수는 두 이미지에서의 픽셀 간 차이를 최소화하기 위한 매개변수로 사용된다. 대표적인 비용 함수로는 절대 차이(SAD, Sum of Absolute Differences), 제곱 차이(SSD, Sum of Squared Differences), 그리고 상호 정보량(Mutual Information)이 있다.
3.1 절대 차이 (SAD, Sum of Absolute Differences)
절대 차이는 두 이미지에서 정합하고자 하는 픽셀 값의 절대 차이를 계산하는 방식이다. 수식으로는 다음과 같이 나타낼 수 있다:
$$ \text{SAD} = \sum_{x, y} |I_L(x, y) - I_R(x - d, y)| $$ 여기서 I_L(x, y)는 왼쪽 이미지의 픽셀 값이고, I_R(x - d, y)는 오른쪽 이미지의 픽셀 값이다. d는 두 이미지 사이의 픽셀 이동량(차이)이다.
3.2 제곱 차이 (SSD, Sum of Squared Differences)
제곱 차이는 두 이미지의 픽셀 값 차이를 제곱하여 계산하는 방식이다. 수식은 다음과 같다:
$$ \text{SSD} = \sum_{x, y} (I_L(x, y) - I_R(x - d, y))^2 $$ 이 방식은 절대 차이에 비해 잡음에 민감하지만, 더 정밀한 차이 계산이 가능하다.
3.3 상호 정보량 (Mutual Information)
상호 정보량은 두 이미지의 픽셀 값 분포 간의 상관관계를 이용하는 방식이다. 이 방식은 밝기 변화에 강하고, 다양한 조명 조건에서도 정합 성능을 보장한다. 상호 정보량은 다음과 같은 수식으로 계산된다:
$$ MI(I_L, I_R) = \sum_{i,j} p_{I_L, I_R}(i,j) \log \frac{p_{I_L, I_R}(i,j)}{p_{I_L}(i) p_{I_R}(j)} $$ 여기서, p_{I_L, I_R}(i,j)는 왼쪽 이미지 I_L와 오른쪽 이미지 I_R의 공동 확률 분포를 나타내고, p_{I_L}(i), p_{I_R}(j)는 각각 독립 확률 분포를 나타낸다.
4. 준밀집 및 밀집 정합 기법의 실제 적용
스테레오 정합 알고리즘은 준밀집과 밀집 기법 모두 실제 응용에 적용되며, 주어진 상황에 따라 적합한 방법이 선택된다. 준밀집 기법은 로봇 비전, SLAM, 자율 주행 차량과 같은 실시간 시스템에서 자주 사용되며, 밀집 기법은 3D 재구성, 영화 제작, 의료 영상 처리 등 높은 정밀도가 요구되는 분야에서 많이 활용된다.
TODO (보완필요)