시차 대 깊이

정류된 스테레오 쌍에서, 3D 점은 왼쪽과 오른쪽 이미지에 같은 행이지만 다른 열로 투영됩니다. 두 투영 사이의 수평 오프셋이 시차 d=uLuRd = u_L - u_R입니다(픽셀 단위). 초점 거리 ff(픽셀)와 스테레오 기선 BB(미터)에 대해, 시차와 깊이 ZZ는 다음 관계를 가집니다.

d=fBZZ=fBd.d = \frac{f \cdot B}{Z} \quad\Longleftrightarrow\quad Z = \frac{f \cdot B}{d}.

이 관계는 반비례입니다: 가까운 물체는 시차가 크고, 먼 물체는 시차가 작습니다.

이 수식은 어디서 나오는가

왼쪽 카메라를 원점에, 오른쪽 카메라를 (B,0,0)(B, 0, 0)에 두고, 둘 다 동일한 초점 거리 ff와 주점 cxc_x+Z+Z 방향을 바라본다고 합시다(이는 정확히 정류가 만들어내는 상황입니다). 점 (X,Y,Z)(X, Y, Z)는 다음으로 투영됩니다.

uL=fXZ+cx,uR=fXBZ+cx,u_L = f\,\frac{X}{Z} + c_x, \qquad u_R = f\,\frac{X - B}{Z} + c_x,

그래서 행은 일치하고(vL=vRv_L = v_R), 열의 차이는

d=uLuR=fX(XB)Z=fBZ.d = u_L - u_R = f\,\frac{X - (X - B)}{Z} = \frac{fB}{Z}.

이것이 바로 ORB-SLAM2처럼 스테레오 SLAM 시스템이 키포인트를 삼중값 (uL,vL,uR)(u_L, v_L, u_R)로 저장하고, uR=f(XcB)/Zc+cxu_R = f\,(X_c - B)/Z_c + c_x를 번들 조정의 세 번째 잔차 행으로 사용할 수 있는 이유입니다: 오른쪽 이미지의 열이 곧 깊이 측정값입니다.

Z2Z^2 법칙: 깊이 해상도는 제곱으로 저하된다

Z=fB/dZ = fB/ddd에 대해 미분하면

ΔZZ2fBΔd,\Delta Z \approx \frac{Z^2}{fB}\,\Delta d,

를 얻으므로, 고정된 시차 매칭 오차 Δd\Delta d(보통 1픽셀의 몇 분의 1)는 Z2Z^2에 비례하여 커지는 깊이 오차를 만듭니다: 거리가 두 배가 되면 깊이 불확실성은 네 배가 됩니다. f=500f = 500 px, B=0.1B = 0.1 m(따라서 fB=50fB = 50 px·m), 매칭 정밀도 Δd=0.25\Delta d = 0.25 px인 예제:

깊이 ZZ시차 d=fB/Zd = fB/Z깊이 오차 ΔZ\Delta Z
2 m25 px0.02 m (1%)
10 m5 px0.5 m (5%)
20 m2.5 px2 m (10%)

20 m에서는 이 리그의 “미터” 깊이가 거의 추측에 가깝습니다 — 같은 측정 장치가 팔 길이 정도의 거리에서는 밀리미터급 정밀도를 가짐에도 그렇습니다.

설계상의 결과

추정기 안에서는 역깊이를 선호하라

시차는 역깊이에 선형이라는 점에 주목하세요: ρ=1/Z\rho = 1/Z일 때,

d=fBρ.d = fB\,\rho.

따라서 픽셀 수준의 매칭 잡음은 ρ\rho에서는 거의 가우시안 잡음으로 나타나지만, ZZ에서는 왜곡되고 두꺼운 꼬리를 가진 잡음으로 나타납니다(d=1d = 1 px에서 ±0.25\pm 0.25 px 오차는 거대하고 비대칭적인 깊이 구간에 걸칩니다). 이것이 SLAM 시스템이 먼 점을 역깊이로 파라미터화하는 이유이며, 측정 공분산을 미터 깊이에서 가우시안이라고 가정하지 말고 시차/역깊이 공간에서 모델링하여 전파해야 하는 이유입니다.

SLAM 파이프라인에서 이 변환은 두 곳에서 나타납니다: 키포인트별 시차를 3D 랜드마크 위치(또는 역깊이 파라미터화)로 바꾸는 곳, 그리고 번들 조정에서 깊이에 따라 달라지는 불확실성에 맞춰 스테레오 관측에 가중치를 부여하는 곳입니다.

흔한 함정

SLAM에서의 의미

d=fB/Zd = fB/Z라는 기하는 스테레오가 실제로 도움이 되는지를 결정합니다: 어떤 랜드마크가 미터 정보를 담고 있는지, 운용 범위에 맞춰 리그의 기선을 어떻게 설정해야 하는지, 그리고 추정기에서 측정 잡음을 어떻게 올바르게 모델링해야 하는지를 알려줍니다. 이를 잘못 이해하면(예: 10 cm 기선에서 100 m 거리의 스테레오 깊이를 신뢰하는 것) 편향된 맵과 비일관적인 공분산의 전형적인 원인이 됩니다.

관련 문서