[MIT 머신비전 3강] 카메라 하나로 부딪히기까지 남은 시간 재기 | 충돌 시간(Time to Contact)과 노이즈 이득
MIT 6.801 머신비전(Machine Vision, Berthold Horn) 3강 정리. 카메라 하나로 충돌 시간(Time to Contact, TTC)을 구하는 방법과 노이즈 이득, GPS 정밀도 저하(DOP)를 쉽게 설명합니다.
MIT OpenCourseWare 6.801 3강 원본 영상 (영어)
한 줄 요약: 거리도 속도도 모르는데, 카메라 한 대로 “몇 초 뒤에 부딪히는지”는 계산할 수 있습니다. 물체를 찾거나 짝을 맞출 필요도 없이, 모든 픽셀의 밝기 변화를 더하기만 하면 됩니다. 그 전에 “측정 오차가 답에서 얼마나 커지나”(노이즈 이득)를 먼저 짚고 갑니다.
노이즈 이득: 측정이 조금 틀리면 답은 얼마나 틀릴까
머신비전의 문제는 대부분 거꾸로 푸는 문제입니다. 알고 싶은 값 \(x\)(거리, 기울기 등)가 측정값 \(y = f(x)\)를 만들고, 우리는 \(y\)를 재서 \(x\)를 되짚어 갑니다. 측정에는 늘 잡음이 섞이니, \(y\)가 조금 틀렸을 때 \(x\)가 얼마나 틀리는지가 중요합니다. 이 비율이 노이즈 이득입니다.
\[\text{노이즈 이득} = \frac{\delta x}{\delta y} = \frac{1}{\;|f'(x)|\;}\]
같은 크기의 측정 오차(가로 띠)가 곡선이 가파른 곳에서는 좁은 답의 범위(세로 띠)로, 평평한 곳에서는 아주 넓은 범위로 바뀝니다.
곡선이 평평할수록, 즉 \(f'(x)\)가 0에 가까울수록 답이 크게 흔들립니다. \(x\)를 크게 바꿔도 측정값이 거의 안 변한다는 뜻이니, 거꾸로 측정값으로 \(x\)를 정하기가 어렵습니다.
여러 값을 한꺼번에 풀 때: GPS의 정밀도 저하
미지수가 여럿이면 연립방정식을 풉니다. 행렬로 쓰면 \(\mathbf{b} = M^{-1}\mathbf{x}\)이고, 역행렬에는 \(1/\det M\)이 붙습니다. \(\det M\)이 0에 가까우면 잡음이 크게 부풀려집니다. 게다가 방향마다 다르게 부풀 수 있습니다. 어떤 방향으로는 정확한데 다른 방향으로는 엉망일 수 있다는 뜻입니다.
강의에서 든 예는 실내 위치 찾기입니다. GPS 위성이나 와이파이 공유기 같은 신호원에서 거리를 재면, 신호원마다 “이 거리 ± 오차 안 어딘가”라는 정보가 생깁니다. 3D로 보면 이 정보는 신호원을 중심으로 한 두꺼운 공 껍질입니다. 위성은 아주 멀리 있으니 수신기 근처만 잘라 보면 껍질은 거의 평평한 판이고, 판은 위성을 바라보는 방향에 수직으로 놓입니다. 내 위치는 이 판들이 모두 겹치는 곳입니다.
위성 배치와 위치 오차. 왼쪽은 하늘 전체, 오른쪽은 수신기 주변을 확대한 화면입니다. 위성마다 같은 색 판이 하나씩 생기고, 주황 덩어리가 판들이 겹친 곳, 즉 위치 후보입니다. “고르게 퍼짐”에서는 판들이 여러 방향으로 엇갈려 덩어리가 작고 둥급니다. “한쪽에 몰림”을 누르면 판들이 거의 나란히 겹치면서 덩어리가 한쪽으로 길쭉하게 늘어납니다. 위성을 직접 끌어 옮기거나 빈 곳을 끌어 화면을 돌려 보세요.
GPS에서 이것을 정밀도 저하(DOP, Dilution of Precision)라고 부릅니다. 위성들이 하늘의 한쪽에 몰려 있으면 위치가 덜 정확해지고, 위성이 모두 머리 위쪽에 있으니 보통 높이가 수평 위치보다 덜 정확합니다. 실제 GPS는 수신기 시계의 오차도 함께 풀어야 해서 위성이 4개 이상 필요합니다. 데모에서 “수신기 시계 오차도 함께 풀기”를 켜고 “머리 위에 몰림”을 누르면, 높이 오차(VDOP)가 수평 오차(HDOP)보다 훨씬 커지는 것을 볼 수 있습니다. 시계가 늦은 것과 내가 조금 아래에 있는 것이 측정값에서 거의 똑같이 보이기 때문입니다. 2강의 두 픽셀로 속도 구하기에서 분모 \(E_{x1}E_{y2} - E_{y1}E_{x2}\)가 작을 때(밝기 기울기가 비슷할 때) 잡음이 커지는 것도 똑같은 이야기입니다.
충돌 시간: 벽을 향해 똑바로 다가갈 때
이제 본론입니다. 2강에서 \(-Z/W\)(거리 ÷ 다가오는 속도)가 부딪히기까지 남은 시간이라는 걸 봤습니다. 그 역수를 \(C = -W/Z\)라고 하겠습니다. “1초에 남은 거리의 몇 분의 일씩 다가가는지”입니다.
벽을 향해 똑바로 다가가면 확장 초점이 사진 한가운데에 있고, 사진 속 점은 가운데에서 바깥으로 퍼집니다. 그 속도는 가운데에서 멀수록 큽니다.
\[u = C\,x, \qquad v = C\,y\]이걸 2강의 밝기 변화 제약식 \(u E_x + v E_y + E_t = 0\)에 넣으면 미지수가 \(C\) 하나로 줄어듭니다.
\[C\,(x E_x + y E_y) + E_t = 0\]괄호 안의 \(G = x E_x + y E_y\)는 “가운데에서 바깥쪽으로 갈 때 밝기가 얼마나 변하는가”입니다. 이 값을 반경 방향 기울기라고 부릅니다.
왼쪽: 사진 가운데에서 바깥으로 향하는 방향(주황). 오른쪽: 그 방향으로 밝기가 얼마나 변하는지를 색으로 칠한 것. 사진이 커지면 이 무늬들이 바깥으로 밀려나면서 밝기가 변합니다.
모든 픽셀에서 이 식의 오차 제곱 합을 최소로 만드는 \(C\)를 구하면, 답이 한 줄로 나옵니다.
\[C = -\frac{\displaystyle\iint G\,E_t \;dx\,dy}{\displaystyle\iint G^2 \;dx\,dy}, \qquad \text{충돌 시간} = \frac{1}{C}\]이 계산의 좋은 점은 이렇습니다.
- 물체를 찾을 필요가 없습니다. 모서리나 특징점을 찾아 짝 맞추는 과정 없이, 모든 픽셀에서 곱하고 더하기만 합니다(누산기 두 개면 끝). 이런 방식을 직접 계산이라고 합니다.
- 초점거리를 몰라도 됩니다. 렌즈를 바꾸면 사진이 커지지만, 사진 속 움직임도 같은 비율로 커져서 비율은 그대로입니다.
- 강의 첫 시간에 소개된 것처럼, 파리도 착지할 때 이런 “남은 시간”을 쓴다고 알려져 있습니다. 복잡한 추론 없이 구할 수 있는 양이라 생물에게도 그럴듯한 방법입니다.
비스듬히 다가갈 때: A, B, C 세 개 구하기
현실에서는 벽을 정면으로 향하지 않는 경우가 많습니다. 확장 초점이 가운데가 아니면 속도가 이렇게 바뀝니다.
\[u = A + C\,x, \qquad v = B + C\,y\]\(A, B\)는 옆으로, 위아래로 움직이는 성분입니다. 밝기 변화 제약식은 \(A E_x + B E_y + C\,G + E_t = 0\)이 되고, 최소제곱(least squares)을 하면 3×3 연립방정식이 나옵니다. 이것도 픽셀마다 몇 가지 곱을 더해 두는 누산기로 계산됩니다. 답을 구하면 덤으로 확장 초점의 위치 \((-A/C,\; -B/C)\), 즉 내가 향하는 방향까지 나옵니다.
가상의 벽 무늬 사진을 0.05초 간격으로 만들어 위 식으로 계산한 결과입니다. 정면이든 비스듬히든 진짜 값(점선)을 잘 따라갑니다. 벽에 아주 가까워지면 픽셀 하나에 비친 무늬가 너무 커져서 계산이 흔들립니다.
마지막 그림처럼 아주 가까워지면 계산이 흔들리는 문제가 생깁니다. 이 문제는 다음 강의에서 “사진을 작게 줄여서 계산하기”(다배율)로 해결합니다. 참고로 광마우스는 1초에 약 1800장을 찍습니다. 사진 사이의 움직임을 작게 유지해야 이런 미분 기반 계산이 잘 맞기 때문입니다.
직접 해 보기
밝기 미분만으로 충돌 시간 계산. 왼쪽은 벽에 1초에 1 m씩 다가가며 찍은 가상 사진입니다. 오른쪽 그래프에 진짜 남은 시간(점선)과 계산한 값이 그려집니다. 주황 점을 끌어 비스듬히 다가가게 하면, 초록 +(계산한 확장 초점)가 따라오는지 보세요. “사진 잡음”을 올리면 벽에 가까울 때 계산이 더 흔들립니다.
정리
- 노이즈 이득은 “측정이 조금 틀릴 때 답이 몇 배로 틀리나”입니다. 곡선이 평평하거나 행렬식이 0에 가까우면 커집니다.
- 여러 측정의 방향이 비슷하면(위성이 한쪽에 몰린 GPS처럼) 특정 방향으로 오차가 크게 늘어납니다.
- 벽을 향해 다가갈 때 \(u = Cx,\ v = Cy\)로 놓으면 미지수가 하나가 되고, 모든 픽셀의 곱을 더하는 것만으로 충돌 시간 \(1/C\)를 구합니다.
- 비스듬히 다가가면 \(A, B, C\) 세 개를 함께 구하고, 그러면 내가 향하는 방향(확장 초점)도 함께 나옵니다.
참고: MIT 6.801/6.866 Machine Vision (Fall 2020), Berthold Horn · Ryan Sander · Tadayuki Yoshitake 강의 노트 (MIT OpenCourseWare, CC BY-NC-SA 4.0)