스테레오 매칭 개요

스테레오 매칭은 두 대의 카메라로 촬영한 이미지를 분석하여 동일한 물체의 서로 다른 각도에서 촬영된 점들을 찾아내는 과정이다. 이를 통해 각 이미지의 점들이 동일한 3차원 공간 좌표에서 기인한 것임을 판단하게 된다. 스테레오 매칭의 핵심은 대응점(correspondence)을 찾는 것이다. 이 과정에서 각 픽셀이 왼쪽 이미지와 오른쪽 이미지에서 어떻게 대응되는지를 분석하며, 이를 통해 각 픽셀의 깊이 정보를 얻는다.

대응 문제 (Correspondence Problem)

스테레오 매칭에서 가장 중요한 문제는 대응 문제이다. 이는 왼쪽 이미지의 픽셀과 오른쪽 이미지의 픽셀이 동일한 3차원 공간의 점에서 유래했는지를 찾는 문제로 정의할 수 있다. 대응 문제는 여러 가지 난관을 가지고 있다. 예를 들어, 물체의 표면이 단색이거나 텍스처가 적으면 대응점을 정확하게 찾기 어려워진다.

스테레오 매칭의 기본 과정은 다음과 같다: 1. 좌우 이미지 획득: 두 대의 카메라로부터 왼쪽 이미지와 오른쪽 이미지를 얻는다. 2. 이미지 정합: 각 픽셀을 에피폴라 제약을 기반으로 대응하는 픽셀을 오른쪽 이미지에서 찾는다. 3. 깊이 계산: 대응점이 확인되면 삼각 측량(triangulation)을 사용하여 깊이를 계산한다.

에피폴라 제약 (Epipolar Constraint)

스테레오 매칭에서는 에피폴라 제약이 매우 중요하다. 에피폴라 제약이란, 한 카메라에서 찍은 점이 다른 카메라의 이미지에서 에피폴라인(epipolar line) 상에 존재해야 한다는 제약이다. 이 제약을 통해 검색 범위를 크게 줄일 수 있다. 수학적으로 에피폴라 제약은 다음과 같이 나타낼 수 있다:

\mathbf{p}_R^\top \mathbf{F} \mathbf{p}_L = 0

여기서: - \mathbf{p}_L는 왼쪽 이미지에서의 점을 나타내는 3차원 벡터이다. - \mathbf{p}_R는 오른쪽 이미지에서의 점을 나타내는 3차원 벡터이다. - \mathbf{F}는 기본 행렬(Fundamental Matrix)이다.

이 제약을 통해 오른쪽 이미지에서 대응점을 찾을 때 에피폴라인 상에서만 검색하면 되므로 계산량이 크게 줄어든다.

스테레오 매칭 방법

스테레오 매칭은 주로 두 가지 방식으로 수행된다: 1. 지역 기반 매칭(Local-based Matching): 이미지에서 작은 블록(block) 단위로 대응점을 찾는 방법이다. 이 방법은 각 픽셀 주변의 블록을 기준으로 왼쪽과 오른쪽 이미지를 비교하여 차이가 최소화되는 지점을 찾는다.

  1. 전역 기반 매칭(Global-based Matching): 이미지 전체를 고려하여 매칭을 수행하는 방법으로, 에너지 함수(Energy Function)를 최소화하는 방식이다. 이 방법은 이미지 전체의 일관성을 유지하는 데 도움을 주지만, 계산 복잡도가 높다.

거리와 깊이 계산

스테레오 매칭의 결과로 대응점이 확보되면, 이를 기반으로 삼각 측량을 통해 깊이(depth)를 계산할 수 있다. 깊이는 다음과 같은 공식으로 계산된다:

Z = \frac{f \cdot B}{d}

여기서: - Z는 카메라로부터의 깊이이다. - f는 카메라의 초점 거리(focal length)이다. - B는 두 카메라 간의 거리(베이스라인, baseline)이다. - d는 두 이미지에서의 대응점 간 거리(disparity)이다.

위 공식에서 볼 수 있듯이, 대응점 간의 거리가 짧을수록 물체는 멀리 있는 것으로 계산된다.

지역 기반 매칭(Local-based Matching) 방법

지역 기반 매칭은 특정한 윈도우(혹은 블록) 내에서 왼쪽 이미지의 각 픽셀과 오른쪽 이미지에서 대응하는 픽셀을 찾는 방식이다. 이 방식은 윈도우 내부의 픽셀 값들을 비교하여 두 이미지 사이의 차이를 계산한다. 이러한 차이는 다양한 방식으로 정의될 수 있으며, 자주 사용되는 방법은 다음과 같다:

절대 차이의 합 (Sum of Absolute Differences, SAD)

SAD는 각 대응점 윈도우 내에서 픽셀 값들의 절대 차이를 합산하는 방식이다. 수학적으로 SAD는 다음과 같이 표현된다:

\text{SAD} = \sum_{x=-w}^{w} \sum_{y=-w}^{w} \left| I_L(x, y) - I_R(x - d, y) \right|

여기서: - I_L(x, y)는 왼쪽 이미지에서의 픽셀 값이다. - I_R(x - d, y)는 오른쪽 이미지에서의 픽셀 값이다. - d는 윈도우 내에서 비교할 때의 차이(Disparity)를 나타낸다. - w는 윈도우의 크기(반지름)이다.

SAD가 가장 작은 대응점이 최적의 매칭이라고 판단한다.

제곱 차이의 합 (Sum of Squared Differences, SSD)

SSD는 SAD와 유사하지만, 픽셀 값들의 차이를 제곱하여 더하는 방식이다. 이 방법은 큰 차이에 더 큰 가중치를 부여하여 매칭 품질을 높일 수 있다. SSD는 다음과 같이 정의된다:

\text{SSD} = \sum_{x=-w}^{w} \sum_{y=-w}^{w} \left( I_L(x, y) - I_R(x - d, y) \right)^2

이 방식은 SAD와 비슷한 원리로 동작하지만, 차이의 제곱을 사용하여 더 큰 차이를 강하게 패널티를 준다.

정규화 상관계수 (Normalized Cross-Correlation, NCC)

NCC는 픽셀 값들의 상관관계를 사용하여 대응점을 찾는 방식이다. NCC는 단순히 차이를 계산하는 것이 아니라 두 픽셀 블록 간의 유사도를 정규화하여 계산한다. 다음과 같이 표현된다:

\text{NCC} = \frac{\sum_{x=-w}^{w} \sum_{y=-w}^{w} \left( I_L(x, y) - \overline{I_L} \right) \left( I_R(x - d, y) - \overline{I_R} \right)}{\sqrt{\sum_{x=-w}^{w} \sum_{y=-w}^{w} \left( I_L(x, y) - \overline{I_L} \right)^2 \sum_{x=-w}^{w} \sum_{y=-w}^{w} \left( I_R(x - d, y) - \overline{I_R} \right)^2}}

여기서: - \overline{I_L}\overline{I_R}는 각각 왼쪽과 오른쪽 이미지의 윈도우 내 픽셀 값의 평균이다.

NCC는 두 윈도우 간의 상관관계를 통해 매칭 정도를 평가하며, 값이 클수록 두 윈도우가 유사하다고 판단한다.

알겠다! 추가 내용을 이어서 설명하겠다.

전역 기반 매칭 (Global-based Matching) 방법

전역 기반 매칭은 지역 기반 매칭과 달리 이미지 전체 또는 큰 부분을 고려하여 대응점을 찾는 방법이다. 전역 기반 매칭의 목표는 픽셀 간의 매칭을 더 일관성 있게 만들고, 이미지 전체에서 최소의 에너지를 가진 매칭을 찾는 것이다. 전역 기반 매칭의 주요 방법에는 다음과 같은 기법들이 포함된다:

에너지 함수 최적화 (Energy Function Optimization)

전역 기반 매칭의 핵심은 에너지 함수(energy function)를 정의하고, 이를 최소화하는 것이다. 에너지 함수는 두 가지 항으로 구성된다: 1. 데이터 항(Data Term): 각 픽셀 쌍 간의 차이를 나타내며, 이 값이 작을수록 대응점이 잘 맞는 것으로 평가된다. 예를 들어, SAD나 SSD 같은 함수가 사용될 수 있다. 2. 스무딩 항(Smoothing Term): 픽셀 간의 불연속성을 억제하고, 인접 픽셀들 간에 유사한 깊이값을 부여하기 위해 사용된다. 이는 픽셀 사이의 깊이 차이가 너무 클 경우 페널티를 부여하는 방식이다.

에너지 함수는 다음과 같이 표현될 수 있다:

E(d) = \sum_{p} E_{\text{data}}(p, d_p) + \lambda \sum_{(p, q) \in N} E_{\text{smooth}}(d_p, d_q)

여기서: - E_{\text{data}}(p, d_p)는 픽셀 p에 대한 데이터 항으로, 대응점의 품질을 나타낸다. - E_{\text{smooth}}(d_p, d_q)는 인접 픽셀 pq 간의 깊이 차이에 대한 스무딩 항이다. - \lambda는 스무딩 항에 대한 가중치로, 스무딩 효과의 강도를 제어한다. - N은 인접 픽셀 쌍 집합이다.

그래프 컷 (Graph Cuts)

그래프 컷 알고리즘은 전역 최적화 문제를 해결하기 위해 자주 사용되는 방법 중 하나이다. 이 방법은 이미지의 각 픽셀을 그래프의 노드로 표현하고, 에너지 함수를 최소화하기 위해 최적의 컷을 찾는다. 그래프 컷 알고리즘은 픽셀들 사이의 깊이 불연속성을 최소화하면서도 정확한 대응점을 찾을 수 있도록 돕는다.

동적 프로그래밍 (Dynamic Programming)

동적 프로그래밍은 픽셀의 깊이를 찾는 문제를 여러 작은 하위 문제로 나누어 해결하는 방법이다. 이 방식은 에피폴라인 상에서의 매칭 문제를 효율적으로 해결할 수 있도록 도와주며, 각 픽셀의 대응점을 하나씩 순차적으로 찾는 대신, 전체 라인에서 한꺼번에 최적의 해를 구한다.

스테레오 매칭의 문제점

스테레오 매칭에는 다양한 도전 과제가 존재한다. 몇 가지 대표적인 문제는 다음과 같다:

  1. 조명 변화: 두 카메라로 촬영된 이미지의 조명이 다를 경우, 동일한 물체라도 픽셀 값이 크게 달라질 수 있다. 이는 정확한 대응점을 찾기 어렵게 만든다.
  2. 반사 및 투명 물체: 반사 또는 투명한 물체는 픽셀 값이 왜곡되거나 비현실적인 값을 가질 수 있어 스테레오 매칭에 혼란을 줄 수 있다.
  3. 단조로운 표면: 텍스처가 없는 단색 표면의 경우, 대응점을 정확히 찾는 것이 매우 어려워진다. 이러한 경우 여러 대응점 후보가 생길 수 있다.

이러한 문제점들은 스테레오 매칭 알고리즘의 성능에 부정적인 영향을 미칠 수 있으며, 이를 극복하기 위한 다양한 보정 기법들이 연구되고 있다.