Stereo Vision

**스테레오비전(stereo vision)**은 알려진 기선(baseline) bb만큼 떨어진 두 보정 카메라로부터 깊이를 복원합니다. 두 카메라 사이의 상대 포즈가 고정되어 있고 알려져 있으므로, 한 이미지에서 장면 점의 위치는 다른 이미지에서 그 점이 나타날 수 있는 위치를 제약하며, 두 관측 사이의 수평 이동량이 메트릭 깊이를 인코딩합니다.

시차와 깊이

정렬(rectification)(두 이미지를 워핑하여 에피폴라 선이 동일한 수평 스캔라인이 되도록 만드는 과정) 이후, 깊이 ZZ에 있는 3D 점은 좌우 이미지에서 각각 수평 픽셀 좌표 uLu_LuRu_R에 나타납니다. **시차(disparity)**는 다음과 같습니다.

d=uLuR=fxbZd = u_L - u_R = \frac{f_x\, b}{Z}

여기서 fxf_x는 픽셀 단위의 초점 거리입니다. 깊이는 이를 역산하여 복원합니다.

Z=fxbdZ = \frac{f_x\, b}{d}

ZZ가 주어지면, 완전한 3D 점은 핀홀 모델로부터 얻어집니다: X=(ucx)Z/fxX = (u - c_x) Z / f_x, Y=(vcy)Z/fyY = (v - c_y) Z / f_y.

깊이 불확실성

Z(d)Z(d)를 미분하면 매칭 오차 δd\delta d(보통 픽셀의 일부 단위)가 깊이로 어떻게 전파되는지 알 수 있습니다.

δZZ2fxbδd\delta Z \approx \frac{Z^2}{f_x\, b}\, \delta d

깊이 오차는 거리에 대해 이차적으로 증가하며, 기선에 대해서는 반비례합니다. 이것이 스테레오 리그(rig)의 근본적인 설계 트레이드오프입니다: 기선을 넓히면 원거리 정확도가 향상되지만 겹치는 시야각이 줄어들고 근거리 매칭이 어려워집니다. 기선을 좁히면 그 반대입니다. 어느 범위를 넘어서면 시차가 매칭 정밀도보다 작아져서 스테레오 카메라 쌍은 실질적으로 모노큘러 카메라로 퇴화합니다.

스테레오 매칭

조밀한 **시차 지도(disparity map)**를 생성하려면 왼쪽 이미지의 각 픽셀에 대해 오른쪽 이미지의 동일한 스캔라인 상에서 대응점을 찾아야 합니다.

두 뷰 사이에서 검출된 키포인트만 매칭하는 희소 스테레오는 특징점 기반 SLAM(예: ORB-SLAM2의 스테레오 모드)에서 흔히 쓰이는데, 조밀 매칭의 비용을 피하면서도 메트릭 랜드마크를 제공하기 때문입니다.

스테레오 vs. 모노큘러 vs. RGB-D

스테레오는 고정된, 공장에서 보정된 기선을 사용하는 삼각측량이며, 이것이 메트릭 스케일을 관측 가능하게 만드는 요인입니다: 모노큘러 카메라는 알 수 없는 스케일 인자까지만 기하를 복원할 수 있지만, 스테레오 리그는 이를 미터 단위로 고정합니다. RGB-D 센서(구조광 또는 비행 시간 방식)와 비교하면, 패시브 스테레오는 야외의 햇빛 아래에서나 더 먼 거리에서도 동작하지만, 매칭할 대상이 없는 텍스처 없는 표면에서는 어려움을 겪습니다.

SLAM에서의 의미

스테레오는 모노큘러 SLAM의 가장 어려운 두 문제---스케일 모호성과 초기화---를 한 번에 제거합니다. 모든 스테레오 프레임은 즉시 메트릭 3D 랜드마크를 산출합니다---지도를 부트스트랩하기 위한 모션 패럴랙스가 필요 없습니다---그리고 매 새 프레임이 스케일을 다시 측정하므로 스케일이 드리프트할 수 없습니다. 이것이 로보틱스 배치에서 스테레오(및 스테레오-관성) 구성이 기본값인 이유이며, 시차-깊이 관계와 그 이차적 오차 증가를 이해하는 것이 기선을 선택하고 신뢰 가능한 깊이 임계값을 설정하는 데(예: ORB-SLAM2의 “근거리 vs. 원거리” 점 구분) 핵심적인 이유입니다.

관련 문서