스테레오 비전

편집 역사 토론
컴퓨터 그래픽스 수치해석 마지막 수정: 2026-09-02 04:12:40

1. 개요[편집]

스테레오 비전
Stereo Vision
입력같은 장면을 찍은 보정된 영상 두 장
출력시차 지도 $d(x,y)$ → 깊이 지도 $Z(x,y)$
핵심 관계$Z = fB/d$ — 깊이 오차는 $Z^2$ 에 비례
표준 4단계비용 계산 · 비용 집계 · 시차 결정 · 정련
주력 알고리즘SGM(준전역 정합, 2005)
천적무늬 없는 벽 · 반복 패턴 · 가림 · 유리와 금속

눈이 두 개인 이유를 400년 넘게 고민한 끝에, 사람들은 그것을 1차원 탐색 문제로 환원했다.

스테레오 비전(stereo vision)은 약간 떨어진 두 위치에서 찍은 영상 사이의 대응점 어긋남(시차, disparity)을 측정해 장면의 깊이를 복원하는 수동(passive) 3차원 계측 기법이다. 레이저나 패턴 투사 같은 능동 광원 없이 주변광만 쓰고, 카메라 두 대와 계산량만 있으면 되므로 자율주행·로봇·모바일 기기에서 가장 널리 깔린 깊이 센서다.

기하학적 뼈대는 에피폴라 기하가 전부 제공한다. 두 영상을 정류(rectification)해 두면 대응점은 반드시 같은 행 위에 놓이므로, 2차원 탐색이 “이 화소는 왼쪽으로 몇 픽셀 밀렸나”라는 1차원 정수 탐색으로 줄어든다. 그래서 이 문서가 다루는 것은 기하가 아니라 그 1차원 탐색을 어떻게 푸느냐다. 기초행렬·본질행렬·정류 호모그래피의 유도는 에피폴라 기하 문서로 넘긴다.

2. 파이프라인[편집]

  1. 보정(calibration) — 두 카메라의 내부 파라미터(초점거리·주점·렌즈 왜곡)와 상대 자세 (R,t)(R,\mathbf t) 를 구한다. 체커보드 여러 장으로 최소자승법 문제를 푸는 것이 표준이며, 마지막 정련은 레벤버그-마쿼트 방법이 맡는다.
  2. 정류 — 두 영상에 호모그래피를 걸어 에피폴라 선을 수평으로 만든다. 이후 모든 계산은 행 단위로 캐시 친화적이 된다.
  3. 대응 탐색 — 시차 지도 d(x,y)d(x,y) 를 만든다. 이 단계가 전부다. 아래 절 대부분이 여기에 관한 것이다.
  4. 삼각측량Z=fB/dZ = fB/d 로 깊이를 만들고, 필요하면 점군으로 역투영한다. 이후 점군 정합이나 메시화로 넘어간다.

셰어스타인과 쉴리스키(2002)가 정리한 대응 탐색의 표준 4단계 — 정합 비용 계산 → 비용 집계 → 시차 결정 → 시차 정련 — 은 20년이 지난 지금도 거의 모든 고전 스테레오 코드의 목차 그대로다.1

3. 시차와 깊이, 그리고 제곱의 저주[편집]

정류된 평행 스테레오에서 초점거리 ff(픽셀), 기선 BB(미터), 시차 dd(픽셀)에 대해

Z=fBdZ = \frac{fB}{d}

가 성립한다. 반비례 관계이므로 미분하면

δZ=Z2fBδd|\delta Z| = \frac{Z^2}{fB}\,|\delta d|

깊이 오차가 깊이의 제곱에 비례한다. 이것이 스테레오 설계의 모든 것을 지배한다. f=1000pxf=1000\,\text{px}, B=0.12mB=0.12\,\text{m}, 시차 추정 오차 δd=0.2px\delta d = 0.2\,\text{px} 인 흔한 승용차용 스테레오를 넣어 보면:

깊이 ZZ시차 dd깊이 오차 δZ\delta Z상대오차
5 m24.0 px4.2 cm0.8 %
10 m12.0 px17 cm1.7 %
20 m6.0 px67 cm3.3 %
50 m2.4 px4.2 m8.3 %

50 m 앞의 차가 46 m에 있는지 54 m에 있는지 구별하지 못한다는 뜻이다. 자율주행 스택이 근거리는 스테레오, 원거리는 라이다·레이더로 역할을 나누는 것이 이 표 한 장 때문이다.

처방은 fBfB 를 키우는 것뿐인데 둘 다 대가가 있다. 기선을 늘리면 같은 시차 오차가 주는 깊이 오차는 줄지만, 두 시점의 외형 차이와 가림 영역이 함께 커져 대응 탐색 자체가 어려워진다. 게다가 시차 범위가 넓어져 계산량과 오정합 확률이 같이 오른다. 초점거리를 늘리면(망원) 시야각이 좁아진다. 결국 “가까운 것을 넓게 볼 것인가, 먼 것을 정확히 볼 것인가”의 맞교환이고, 여러 기선을 동시에 쓰는 다중 기선 스테레오가 이 딜레마의 정공법이다.

4. 정합 비용 — 무엇을 닮았다고 할 것인가[편집]

시차 후보 dd 에 대해 왼쪽 화소 pp 와 오른쪽 화소 p(d,0)p-(d,0) 이 얼마나 안 닮았는지를 재는 값 C(p,d)C(p,d) 를 만든다.

비용불변성비용특징
SAD / SSD없음매우 쌈두 카메라 노출·게인이 다르면 통째로 무너짐
NCC밝기의 아핀 변환 aI+baI+b중간창 전체 통계를 쓰므로 경계에서 번짐
센서스 변환 + 해밍거리모든 단조 밝기 변환쌈(비트 연산)하드웨어 친화적, 경계에 강함
상호정보량임의의 통계적 대응비쌈이종 센서(가시광 대 적외선)까지 커버

센서스 변환(자비와 우드필, 1994)이 실무의 사실상 표준이다. 창 안의 각 이웃 화소가 중심보다 밝은지 어두운지만 비트 하나로 적어 비트열을 만들고, 두 비트열의 해밍거리를 비용으로 쓴다. 절대 밝기를 아예 버리므로 노출 차이·비네팅·감마 차이에 통째로 면역이고, 창 안에 깊이 불연속이 걸쳐 있어도 소수의 비트만 오염되어 중앙값처럼 버틴다.2 SAD가 이런 상황에서 평균을 오염시켜 통째로 틀리는 것과 대조적이다.

비용을 원시 화소 하나로만 계산하면 잡음에 무방비이므로, 어떤 식으로든 이웃을 모아야 한다. 여기서 갈림길이 생긴다.

5. 지역 정합과 창 크기의 딜레마[편집]

가장 소박한 방법은 W×WW\times W 창 안의 비용을 합한 뒤 시차 후보 중 최소를 고르는 것(winner-takes-all)이다. 적분영상이나 슬라이딩 창을 쓰면 창 크기와 무관하게 O(1)O(1) 로 갱신되어 매우 빠르다.

문제는 창 크기 하나로 상충하는 두 요구를 만족시켜야 한다는 것이다.

  • 작은 창 — 경계는 날카롭게 살지만 통계가 부족해 무늬 없는 영역에서 비용 곡선이 평평해지고 잡음이 승자를 정한다.
  • 큰 창 — 잡음에는 강하지만 깊이 불연속을 걸치면 배경 화소들이 전경 시차를 지지해 전경이 부풀어 오른다(foreground fattening). 가로등 기둥 하나가 3 m짜리 벽으로 변하는 그 현상이다.

창 모양을 적응적으로 바꾸는 시도가 이어졌고, 정점은 윤국진·권인소(2006)의 적응적 지지 가중치다. 창 안 화소마다 중심과의 색 차이·공간 거리로 가중치를 주어, 같은 물체에 속할 법한 화소만 투표에 참여시킨다. 사실상 창 안에서 이미지 분할을 하는 셈이라 경계가 극적으로 살아나지만 원본 형태는 매우 느렸다. 이후 가이디드 필터로 같은 효과를 O(1)O(1) 에 내는 비용 집계가 자리 잡았다.

6. 전역 최적화와 SGM[편집]

지역 정합의 한계는 구조적이다. 화소마다 독립으로 최소를 고르니 “이웃한 화소의 깊이는 대개 비슷하다” 는 강력한 사전지식을 전혀 쓰지 못한다. 이를 에너지로 쓰면

E(D)=pC(p,Dp)  +  (p,q)N(P1[DpDq=1]+P2[DpDq>1])E(D) = \sum_{p} C(p, D_p) \;+\; \sum_{(p,q)\in\mathcal N} \bigl( P_1\,[\,|D_p - D_q| = 1\,] + P_2\,[\,|D_p - D_q| > 1\,] \bigr)

가 되고, 앞이 데이터항, 뒤가 평활항이다. P1P_1 은 기울어진 면에서의 1픽셀 변화를 값싸게 허용하고, P2>P1P_2 > P_1 은 진짜 불연속을 비싸지만 가능하게 남긴다. 이 이산 에너지를 2차원 격자에서 정확히 최소화하는 것은 일반적으로 NP-난해라 그래프 컷의 α-확장이나 신뢰 전파 같은 근사가 쓰였다. 한 행씩 독립으로 동적계획법을 돌리는 주사선(scanline) 방식은 훨씬 쌌지만 행 사이 정보를 못 써서 가로줄 무늬가 생겼고, 순서 구속이라는 별도의 가정까지 필요했다.3 정확도가 좋은 쪽은 실시간과 거리가 멀고, 빠른 쪽은 품질이 떨어지는 교착 상태였다.

준전역 정합(Semi-Global Matching, SGM; 히르쉬뮐러 2005)이 판을 뒤집었다. 2차원 최적화를 포기하는 대신, 화소 pp 를 향해 오는 8개(또는 16개) 방향의 1차원 경로를 따라 각각 동적 계획법으로 누적 비용을 구하고 그것을 전부 더한다.

Lr(p,d)=C(p,d)+min{Lr(pr,d),  Lr(pr,d±1)+P1,  miniLr(pr,i)+P2}minkLr(pr,k)L_r(p,d) = C(p,d) + \min\bigl\{\,L_r(p-r,d),\; L_r(p-r,d\pm1) + P_1,\; \min_i L_r(p-r,i) + P_2 \,\bigr\} - \min_k L_r(p-r,k) S(p,d)=rLr(p,d)S(p,d) = \sum_r L_r(p,d)

마지막에 빼는 항은 결과에 영향을 주지 않으면서 누적값이 정수형을 넘치지 않게 막는 실용적 장치다. 그리고 P2P_2 는 경로 방향의 영상 기울기로 나눠 준다 — 밝기가 급변하는 곳에서는 깊이도 급변할 자격을 주는 것이라, 물체 경계가 평활항에 뭉개지지 않는다.

SGM이 살아남은 이유는 정확도가 아니라 복잡도다. 계산량이 화소 수 × 시차 수에 선형이고 각 경로가 완전히 독립이라 FPGA·GPU·SIMD로 곧장 병렬화된다. 자동차용 스테레오 칩과 오픈소스 구현이 사실상 전부 SGM 계열인 이유다. 대가는 줄무늬 아티팩트 — 무늬 없는 큰 영역에서 특정 경로의 결정이 그 방향으로 길게 번져 나가는 현상이고, 경로 수를 늘리면 완화되지만 완전히 없어지지는 않는다.

7. 부화소, 그리고 자기 자신을 의심하는 후처리[편집]

정수 시차만으로는 위 표의 δd=0.2px\delta d = 0.2\,\text{px} 가 나오지 않는다. 승자 dd^{\star} 와 그 양옆의 비용 세 점에 포물선을 맞춰

d^=d+C(d1)C(d+1)2(C(d1)2C(d)+C(d+1))\hat d = d^{\star} + \frac{C(d^{\star}-1) - C(d^{\star}+1)}{2\,\bigl(C(d^{\star}-1) - 2C(d^{\star}) + C(d^{\star}+1)\bigr)}

로 부화소 위치를 얻는다. 입자 영상 유속계의 상관 봉우리 피팅과 완전히 같은 공식이며, 거기서 악명 높은 피크 로킹(정수값 쪽으로 몰리는 편향)도 똑같이 나타난다. 시차 히스토그램의 소수부가 평평하지 않고 0 근처에 뾰족하면 이 병을 의심해야 한다.

그다음이 진짜 중요한 자기 검증이다.

  • 좌우 일관성 검사(left-right consistency) — 왼쪽 기준으로 구한 dL(x)d_L(x) 와 오른쪽 기준으로 구한 dRd_R 에 대해 dL(x)dR(xdL(x))1|d_L(x) - d_R(x - d_L(x))| \le 1 을 요구한다. 가림 영역은 한쪽에만 보이므로 이 검사를 반드시 통과하지 못한다. 즉 이 한 줄이 가림 영역을 거의 정확히 검출해 준다. 스테레오에서 “틀린 값을 내는 것보다 모른다고 말하는 것이 낫다”는 원칙의 구현체다.
  • 유일성 비율 — 최소 비용과 두 번째 최소 비용의 비가 임계값 아래면(즉 승부가 애매하면) 버린다. 반복 패턴을 잡는 거의 유일한 저비용 방어선이다.
  • 얼룩 제거(speckle filter) — 연결성분 크기가 임계 이하인 시차 덩어리를 버린다.
  • 구멍 메우기 — 버려진 화소는 좌우 이웃 중 더 작은 시차(= 더 먼 쪽) 로 채운다. 가림은 배경에서 일어나므로 배경 값으로 메우는 것이 물리적으로 맞다.

8. 실패 모드[편집]

상황증상근본 원인대응
무늬 없는 벽·하늘시차가 잡음처럼 튐비용 곡선이 평평 — 정보 자체가 없음유일성 비율로 버리기, 능동 패턴 투사
반복 패턴(타일·펜스·격자)확신 있게 틀린 시차비용 곡선에 동일한 최소가 여러 개시차 범위 축소, 좌우 검사, 넓은 창
가림(depth discontinuity 근처)경계 옆으로 폭 Δd\Delta d 만큼의 오류 띠한쪽 영상에만 보이는 영역좌우 일관성 검사로 검출 후 배경으로 메우기
정반사·유리·물시차가 물체 뒤로 뚫고 들어감램버시안 가정 위반 — 보이는 무늬가 시점마다 다름편광 필터, 다중 시점, 포기
가는 구조(전선·안테나)통째로 사라짐창보다 얇아 비용 지지가 없음작은 창 + 적응 가중치
롤링 셔터·비동기움직이는 물체만 시차가 어긋남두 영상의 노출 시각이 다름하드웨어 동기화

반복 패턴이 특히 고약하다. 무늬가 없으면 알고리즘이 “모르겠다”고 신호를 주지만, 반복 패턴에서는 선명하고 뾰족한 잘못된 최소를 만들어 내 모든 신뢰도 지표를 통과한다. 스테레오 카메라를 단 로봇이 철망 앞에서 유독 자주 사고를 내는 이유다.

9. 능동 스테레오와 학습 기반[편집]

무늬가 없으면 만들어 주면 된다. 능동 스테레오는 적외선 프로젝터로 무작위 점 패턴을 뿌린 뒤 그 위에서 평범한 스테레오를 돌린다. 패턴을 미리 알 필요조차 없어서(구조광과 다른 점이다) 캘리브레이션이 단순하고, 실외에서 패턴이 햇빛에 묻히면 자연 무늬로 자동 복귀한다. 실내 소비자용 깊이 카메라의 주류가 이쪽이다.

학습 기반 스테레오는 4단계 파이프라인을 신경망으로 대체해 왔다. 초기에는 비용 계산만 학습했고(샴 신경망으로 패치 유사도 학습), 이후 비용 볼륨 H×W×DH\times W\times D 를 3차원 합성곱으로 통째로 정련하는 구조가 표준이 됐다. 그럼에도 정류와 시차라는 표현 자체는 그대로 남아 있다 — 신경망도 에피폴라 구속을 스캐폴딩으로 쓴다. 벤치마크(미들베리·KITTI·ETH3D) 상위권은 오래전부터 학습 기반이 점령했지만, 학습 도메인 밖에서 조용히 무너지는 도메인 갭이 현장 배치의 걸림돌로 남아 있고, 그래서 안전이 걸린 시스템에서 SGM이 아직 죽지 않았다.

10. 두 장을 넘어서[편집]

시점을 늘리면 대부분의 문제가 완화된다. 여러 기선이 섞이면 반복 패턴의 가짜 최소가 시점마다 다른 위치에 생겨 서로 상쇄되고, 가림도 어느 한 시점에서는 보인다. 일반화된 형태가 평면 스윕(plane sweep)이다 — 시차 대신 깊이 가설의 평면을 공간에 세우고 모든 영상을 그 평면으로 워핑해 일치도를 재는 방식이라, 정류가 불가능한 임의 배치의 카메라에도 그대로 쓸 수 있다. 여기서 카메라 자세까지 미지수로 놓으면 Structure from Motion과 다중 시점 스테레오(MVS)의 영역이고, 자세를 시간에 따라 추적하며 지도까지 만들면 SLAM이 된다.

11. 관련 문서[편집]

12. Footnotes[편집]

  1. Scharstein, D. & Szeliski, R. (2002). “A Taxonomy and Evaluation of Dense Two-Frame Stereo Correspondence Algorithms.” IJCV 47. 이 논문이 남긴 진짜 유산은 분류표가 아니라 미들베리 벤치마크다. 정답 시차 지도가 붙은 공개 데이터셋과 순위표가 생긴 순간, “우리 방법이 더 좋아 보입니다”류의 논문이 사라졌다. 그 뒤로 컴퓨터 비전 전 분야가 이 형식을 베꼈다.

  2. 절대 밝기를 통째로 버리는 것이 손해 아니냐는 반론이 늘 나오는데, 스테레오에서 두 카메라의 절대 밝기는 애초에 믿을 물건이 아니다. 자동노출이 따로 돌고, 렌즈 비네팅이 다르고, 센서 개체차가 있다. 「믿을 수 없는 정보를 버리는 것」과 「정보를 잃는 것」은 다르다.

  3. 고전 주사선 동적계획법은 순서 구속(왼쪽 영상에서의 순서가 오른쪽에서도 유지된다)을 가정했는데, 얇은 전경 물체가 배경 앞에 떠 있으면 이 가정이 깨진다. 손가락 하나를 눈앞에 세우고 한쪽 눈씩 감아 보면 배경과의 순서가 실제로 뒤집힌다. 오래된 스테레오 코드가 특정 장면에서만 이유 없이 무너지면 이 가정을 의심할 만하다.