[MIT 머신비전 9강] 바늘 그림에서 입체 모양 되살리기 | 니들 다이어그램(Needle Diagram)과 표면 복원
MIT 6.801 머신비전(Machine Vision, Berthold Horn) 9강 정리. 표면 법선을 그린 니들 다이어그램(Needle Diagram), 기울기 적분과 적분 가능성 조건, 최소제곱으로 높이 지도를 복원하는 방법을 쉽게 설명합니다.
MIT OpenCourseWare 6.801 9강 원본 영상 (영어)
한 줄 요약: 사진의 점마다 “표면이 어느 쪽으로 얼마나 기울었는지”를 알면, 그 기울기를 차곡차곡 더해서 높이 지도를 만들 수 있습니다. 측정에 잡음이 섞이면 어느 길로 더하느냐에 따라 답이 달라지는데, 최소제곱(least squares)으로 모든 길의 의견을 한꺼번에 맞추면 깔끔하게 풀립니다.
전자현미경 사진이 입체처럼 보이는 이유
아래는 꽃가루를 주사전자현미경(SEM)으로 찍은 사진입니다. 흑백인데도 공 모양, 가시, 움푹 들어간 구멍이 손에 잡힐 듯 보입니다.
주사전자현미경(SEM)으로 찍은 꽃가루. 출처: Dartmouth Electron Microscope Facility, Wikimedia Commons (퍼블릭 도메인)
비밀은 음영입니다. SEM은 전자 빔을 한 줄씩 훑으며 표면에서 튀어나오는 2차 전자를 세는데, 그 양이 표면이 기울어진 정도에 따라 달라집니다. 그래서 밝기가 곧 표면 방향의 단서가 되고, 우리 눈은 그걸 입체로 읽습니다. 반면 투과전자현미경(TEM)은 시료를 뚫고 지나간 전자를 보기 때문에 이런 음영이 없고, 사진이 평평하게 보입니다.
다만 밝기 하나로는 “얼마나 기울었는지”만 알 수 있고 “어느 쪽으로”까지는 모릅니다. 속력은 알지만 방향은 모르는 것과 비슷합니다. 오늘은 한 단계 쉬운 문제부터 풉니다. 방향까지 다 안다면, 모양은 어떻게 되살릴까요?
바늘 그림: 점마다 꽂은 작은 바늘
표면의 모든 점에 수직으로 바늘을 하나씩 꽂았다고 상상해 보세요. 평평한 곳의 바늘은 똑바로 서 있고, 비탈의 바늘은 내리막 쪽으로 기울어집니다. 이 바늘들을 위에서 내려다본 그림을 바늘 그림(needle diagram)이라고 부릅니다.
바늘 그림은 사진 대신 “점마다의 기울기”를 저장합니다. 6강의 포토메트릭 스테레오로 이런 그림을 얻을 수 있습니다.
수학으로는 점마다 숫자 두 개를 적어 둔 것입니다. \(p\)는 오른쪽(\(x\) 방향)으로 한 칸 갈 때 높이가 얼마나 오르는지, \(q\)는 아래쪽(\(y\) 방향)으로 한 칸 갈 때 얼마나 오르는지입니다. 우리가 원하는 건 점마다의 높이 \(z\) 하나입니다. 모르는 값은 점마다 1개인데 측정값은 2개이니, 정보가 남아돕니다. 이 남는 정보가 잠시 뒤에 잡음을 걸러 내는 데 쓰입니다.
기울기를 더하면 높이가 된다
등산할 때 한 걸음마다 “이번 걸음에 몇 cm 올라갔나”를 적어 두었다면, 그걸 다 더하면 지금 고도가 나옵니다. 바늘 그림도 똑같습니다. 출발점에서 원하는 점까지 길을 정하고, 지나가는 칸마다 기울기를 더합니다.
\[z(x, y) = z(0, 0) + \int_{\text{길}} \left( p\,dx + q\,dy \right)\]오른쪽으로 걸을 때는 \(p\)를, 아래로 걸을 때는 \(q\)를 걸음 길이만큼 곱해서 더한다는 뜻입니다. 출발점 높이 \(z(0,0)\)은 기울기만으로는 알 수 없습니다. 바늘 그림은 언덕을 통째로 들어 올려도 똑같기 때문입니다.
문제는 측정에 잡음이 섞일 때입니다. 같은 도착점이라도 어느 길로 가느냐에 따라 답이 달라집니다.
잡음이 섞인 기울기를 두 길로 따라가 더하면 서로 다른 높이가 나옵니다. 둘 다 틀렸고, 어느 쪽을 믿어야 할지도 모릅니다.
한 바퀴 돌면 제자리여야 한다
길 A로 갔다가 길 B로 되돌아오면 출발점으로 돌아온 셈입니다. 진짜 언덕이라면 한 바퀴 돌았을 때 높이 변화의 합은 0이어야 합니다. 계속 올라가기만 하는데 제자리로 돌아오는 계단은 착시 그림 속에만 있습니다.
왼쪽처럼 진짜 언덕에서 나온 기울기는 어느 고리를 돌아도 합이 0입니다. 오른쪽처럼 빙글 도는 성분이 섞이면 어떤 높이 지도로도 설명할 수 없습니다.
큰 고리는 작은 칸짜리 고리들로 쪼갤 수 있습니다. 이웃한 작은 고리끼리는 맞닿은 변을 서로 반대 방향으로 지나서 상쇄되기 때문에, 작은 고리가 모두 0이면 큰 고리도 0입니다. 작은 고리를 한없이 작게 줄이면 아래 조건이 나옵니다(그린 정리로도 같은 결론이 나옵니다).
\[\frac{\partial p}{\partial y} = \frac{\partial q}{\partial x}\]”\(x\) 기울기가 \(y\) 방향으로 변하는 정도”와 “\(y\) 기울기가 \(x\) 방향으로 변하는 정도”가 같아야 한다는 뜻입니다. 진짜 표면에서는 둘 다 \(z\)를 \(x\)와 \(y\)로 한 번씩 미분한 값이라 저절로 같습니다. 하지만 잡음 섞인 측정값은 이 조건을 어깁니다.
최소제곱: 모든 길의 의견을 한꺼번에 듣기
어느 한 길을 고르는 대신, 바늘 그림과 가장 잘 맞는 높이 지도를 찾습니다. 높이 지도를 하나 정하면 거기서 기울기를 다시 계산할 수 있으니, 그게 측정한 \(p, q\)와 얼마나 어긋나는지 제곱해서 모두 더하고, 그 합이 가장 작아지는 \(z\)를 고릅니다.
\[\min_{z} \iint \left( \frac{\partial z}{\partial x} - p \right)^2 + \left( \frac{\partial z}{\partial y} - q \right)^2 \, dx\,dy\]픽셀 격자에서 이 식을 풀면, 칸마다 성립해야 하는 놀랍도록 단순한 규칙이 나옵니다. “내 높이 = 이웃 네 칸 높이의 평균 − 측정한 기울기에서 온 작은 보정.” 식으로는 높이의 라플라시안 \(\nabla^2 z\)가 \(\partial p/\partial x + \partial q/\partial y\)와 같아야 한다는 조건입니다.
이웃 몇 칸에 가중치를 매겨 더하는 이런 패턴을 Horn 교수는 “계산 분자(computational molecule)”라고 부릅니다. 원자가 결합한 모양을 닮았기 때문입니다.
이 규칙은 모든 칸에 동시에 적용하고 바뀌지 않을 때까지 되풀이하면 됩니다. 뜨거운 쇠판의 온도가 이웃끼리 섞이며 고르게 퍼지는 열 확산과 같은 계산이고, 칸마다 이웃만 보면 되니 병렬로 돌리기도 좋습니다. 거대한 연립방정식을 한 번에 푸는 것보다 훨씬 가볍습니다.
한 줄씩 더하면 줄마다 잡음이 따로 쌓여 줄무늬가 생깁니다. 최소제곱은 잡음을 모든 방향으로 고르게 나눠 가져서 훨씬 매끈합니다.
사진 한 장만 있을 때는?
바늘 그림은 보통 조명을 바꿔 가며 여러 장을 찍어야 얻습니다. 사진이 한 장뿐이면 점마다 기울기의 한 방향 성분만 알 수 있습니다. 지난 강의의 하프케(Hapke) 표면(달 표면 같은 재질)이 그 예입니다. 밝기에서 “빛 방향으로의 기울기”는 바로 나오니, 그 방향으로 쭉 더해 가며 높이의 단면을 그릴 수 있습니다.
대신 단면마다 출발 높이를 따로 알아야 해서, 출발선(initial curve) 하나가 필요합니다. 다음 강의에서는 이 방법을 아무 재질에나 쓸 수 있게 일반화합니다.
직접 해 보기
① 길 따라 더하기. 지도 위를 눌러 도착점을 옮겨 보세요. 잡음을 0으로 내리면 두 길이 같은 답을 내고, 잡음을 올리면 갈라집니다. “빙글 도는 성분 섞기”를 켜면 잡음이 0이어도 두 길이 어긋납니다.
② 최소제곱 반복. 같은 잡음 섞인 바늘 그림에서 출발한 두 방법을 비교합니다. 잡음 막대를 움직이면 처음부터 다시 풉니다. 오른쪽 지도가 평평한 상태에서 서서히 언덕으로 떠오르는 걸 지켜보세요.
정리
- 바늘 그림은 점마다 표면 기울기 \((p, q)\)를 담은 그림이고, 기울기를 길 따라 더하면 높이가 나옵니다(출발 높이 하나는 따로 정해야 합니다).
- 진짜 표면이라면 어느 고리를 돌아도 높이 변화의 합이 0입니다. 잡음 섞인 측정값은 이걸 어겨서 길마다 답이 달라집니다.
- 최소제곱으로 풀면 “이웃 평균 − 작은 보정”이라는 단순한 규칙을 되풀이하는 문제가 되고, 잡음이 고르게 퍼져 깔끔한 높이 지도가 나옵니다.
- 사진이 한 장뿐이면 한 방향 기울기만 알 수 있어, 출발선에서 단면을 그려 나가야 합니다.
참고: MIT 6.801/6.866 Machine Vision (Fall 2020), Berthold Horn · Ryan Sander · Tadayuki Yoshitake 강의 노트 (MIT OpenCourseWare, CC BY-NC-SA 4.0)