포스트

[MIT 머신비전 9강] 바늘 그림에서 입체 모양 되살리기 | 니들 다이어그램(Needle Diagram)과 표면 복원

MIT 6.801 머신비전(Machine Vision, Berthold Horn) 9강 정리. 표면 법선을 그린 니들 다이어그램(Needle Diagram), 기울기 적분과 적분 가능성 조건, 최소제곱으로 높이 지도를 복원하는 방법을 쉽게 설명합니다.

[MIT 머신비전 9강] 바늘 그림에서 입체 모양 되살리기 | 니들 다이어그램(Needle Diagram)과 표면 복원

MIT OpenCourseWare 6.801 9강 원본 영상 (영어)

한 줄 요약: 사진의 점마다 “표면이 어느 쪽으로 얼마나 기울었는지”를 알면, 그 기울기를 차곡차곡 더해서 높이 지도를 만들 수 있습니다. 측정에 잡음이 섞이면 어느 길로 더하느냐에 따라 답이 달라지는데, 최소제곱(least squares)으로 모든 길의 의견을 한꺼번에 맞추면 깔끔하게 풀립니다.

전자현미경 사진이 입체처럼 보이는 이유

아래는 꽃가루를 주사전자현미경(SEM)으로 찍은 사진입니다. 흑백인데도 공 모양, 가시, 움푹 들어간 구멍이 손에 잡힐 듯 보입니다.

주사전자현미경으로 찍은 여러 꽃가루. 공 모양 알갱이와 가시가 입체적으로 보인다 주사전자현미경(SEM)으로 찍은 꽃가루. 출처: Dartmouth Electron Microscope Facility, Wikimedia Commons (퍼블릭 도메인)

비밀은 음영입니다. SEM은 전자 빔을 한 줄씩 훑으며 표면에서 튀어나오는 2차 전자를 세는데, 그 양이 표면이 기울어진 정도에 따라 달라집니다. 그래서 밝기가 곧 표면 방향의 단서가 되고, 우리 눈은 그걸 입체로 읽습니다. 반면 투과전자현미경(TEM)은 시료를 뚫고 지나간 전자를 보기 때문에 이런 음영이 없고, 사진이 평평하게 보입니다.

다만 밝기 하나로는 “얼마나 기울었는지”만 알 수 있고 “어느 쪽으로”까지는 모릅니다. 속력은 알지만 방향은 모르는 것과 비슷합니다. 오늘은 한 단계 쉬운 문제부터 풉니다. 방향까지 다 안다면, 모양은 어떻게 되살릴까요?

바늘 그림: 점마다 꽂은 작은 바늘

표면의 모든 점에 수직으로 바늘을 하나씩 꽂았다고 상상해 보세요. 평평한 곳의 바늘은 똑바로 서 있고, 비탈의 바늘은 내리막 쪽으로 기울어집니다. 이 바늘들을 위에서 내려다본 그림을 바늘 그림(needle diagram)이라고 부릅니다.

왼쪽은 언덕 두 개짜리 표면에 법선 바늘을 꽂은 3D 그림, 오른쪽은 위에서 본 음영 이미지 위에 바늘을 그린 그림 바늘 그림은 사진 대신 “점마다의 기울기”를 저장합니다. 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로 더하면 +0.75, 길 B로 더하면 +0.28, 진짜 높이는 +0.50 잡음이 섞인 기울기를 두 길로 따라가 더하면 서로 다른 높이가 나옵니다. 둘 다 틀렸고, 어느 쪽을 믿어야 할지도 모릅니다.

한 바퀴 돌면 제자리여야 한다

길 A로 갔다가 길 B로 되돌아오면 출발점으로 돌아온 셈입니다. 진짜 언덕이라면 한 바퀴 돌았을 때 높이 변화의 합은 0이어야 합니다. 계속 올라가기만 하는데 제자리로 돌아오는 계단은 착시 그림 속에만 있습니다.

왼쪽은 언덕에서 잰 기울기 화살표와 사각형 고리, 한 바퀴 합이 0. 오른쪽은 빙글빙글 도는 화살표와 고리, 한 바퀴 합이 +2.00 왼쪽처럼 진짜 언덕에서 나온 기울기는 어느 고리를 돌아도 합이 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\)와 같아야 한다는 조건입니다.

가운데 -4, 상하좌우 1인 라플라시안 계산 분자 그림과 반복 규칙 설명 이웃 몇 칸에 가중치를 매겨 더하는 이런 패턴을 Horn 교수는 “계산 분자(computational molecule)”라고 부릅니다. 원자가 결합한 모양을 닮았기 때문입니다.

이 규칙은 모든 칸에 동시에 적용하고 바뀌지 않을 때까지 되풀이하면 됩니다. 뜨거운 쇠판의 온도가 이웃끼리 섞이며 고르게 퍼지는 열 확산과 같은 계산이고, 칸마다 이웃만 보면 되니 병렬로 돌리기도 좋습니다. 거대한 연립방정식을 한 번에 푸는 것보다 훨씬 가볍습니다.

진짜 모양, 한 줄씩 더하기(가로 줄무늬), 최소제곱 반복 30번(흐릿), 반복 300번(진짜와 비슷)을 나란히 비교한 높이 지도 한 줄씩 더하면 줄마다 잡음이 따로 쌓여 줄무늬가 생깁니다. 최소제곱은 잡음을 모든 방향으로 고르게 나눠 가져서 훨씬 매끈합니다.

사진 한 장만 있을 때는?

바늘 그림은 보통 조명을 바꿔 가며 여러 장을 찍어야 얻습니다. 사진이 한 장뿐이면 점마다 기울기의 한 방향 성분만 알 수 있습니다. 지난 강의의 하프케(Hapke) 표면(달 표면 같은 재질)이 그 예입니다. 밝기에서 “빛 방향으로의 기울기”는 바로 나오니, 그 방향으로 쭉 더해 가며 높이의 단면을 그릴 수 있습니다.

대신 단면마다 출발 높이를 따로 알아야 해서, 출발선(initial curve) 하나가 필요합니다. 다음 강의에서는 이 방법을 아무 재질에나 쓸 수 있게 일반화합니다.

직접 해 보기

① 길 따라 더하기. 지도 위를 눌러 도착점을 옮겨 보세요. 잡음을 0으로 내리면 두 길이 같은 답을 내고, 잡음을 올리면 갈라집니다. “빙글 도는 성분 섞기”를 켜면 잡음이 0이어도 두 길이 어긋납니다.

② 최소제곱 반복. 같은 잡음 섞인 바늘 그림에서 출발한 두 방법을 비교합니다. 잡음 막대를 움직이면 처음부터 다시 풉니다. 오른쪽 지도가 평평한 상태에서 서서히 언덕으로 떠오르는 걸 지켜보세요.

정리

  • 바늘 그림은 점마다 표면 기울기 \((p, q)\)를 담은 그림이고, 기울기를 길 따라 더하면 높이가 나옵니다(출발 높이 하나는 따로 정해야 합니다).
  • 진짜 표면이라면 어느 고리를 돌아도 높이 변화의 합이 0입니다. 잡음 섞인 측정값은 이걸 어겨서 길마다 답이 달라집니다.
  • 최소제곱으로 풀면 “이웃 평균 − 작은 보정”이라는 단순한 규칙을 되풀이하는 문제가 되고, 잡음이 고르게 퍼져 깔끔한 높이 지도가 나옵니다.
  • 사진이 한 장뿐이면 한 방향 기울기만 알 수 있어, 출발선에서 단면을 그려 나가야 합니다.

다음 글: [MIT 머신비전 10강] 특성 띠: 가장 밝은 점에서 모양을 키워 나가기

참고: MIT 6.801/6.866 Machine Vision (Fall 2020), Berthold Horn · Ryan Sander · Tadayuki Yoshitake 강의 노트 (MIT OpenCourseWare, CC BY-NC-SA 4.0)

이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.