[MIT 머신비전 13강] 사진 속에서 그 물건 찾기: 템플릿 매칭과 PatQuick | 패턴 인식과 정규화 상관(NCC)
MIT 6.801 머신비전(Machine Vision, Berthold Horn) 13강 정리. 이진화와 블롭 분석, 템플릿 매칭(Template Matching), 정규화 상관(Normalized Cross-Correlation), Cognex PatQuick 패턴 인식을 쉽게 설명합니다.
MIT OpenCourseWare 6.801 13강 원본 영상 (영어)
한 줄 요약: 본보기 그림(템플릿)을 사진 위에 이리저리 대 보며 가장 닮은 자리를 찾습니다. 밝기가 달라져도 속지 않으려면 “정규화 상관”을 쓰고, 더 빠르고 튼튼하게 하려면 그림 전체 대신 경계 위의 탐침 점 몇 개만 비교합니다.
공장 카메라의 숙제
컨베이어 벨트 위로 부품이 지나갑니다. 로봇 팔이 그 부품을 집으려면 카메라가 먼저 답해야 합니다.
- 찾기: 사진 어디에 있나?
- 알아보기: 그게 내가 찾는 그 부품이 맞나?
- 자세: 어느 방향으로, 얼마나 크게 놓여 있나?
- 검사: 흠집이나 빠진 곳은 없나?
왼쪽 본보기와 같은 모양을 장면에서 찾아, 위치·각도·크기까지 알아내는 것이 목표입니다. 원과 사각형은 무시해야 합니다.
여기서 “자세(pose)”는 위치와 방향을 합친 말입니다. 강의 노트에 나오는 특허는 이것을 “본보기를 사진 위에 겹쳐 놓는 변환”이라고 정의합니다. 이 강의에서는 지난 두 강의에서 배운 경계선(에지) 찾기가 이미 잘 된다고 놓고 시작합니다.
가장 쉬운 방법: 흑백으로 나누고 세기
가장 오래된 방법은 사진을 밝기 기준(문턱값)으로 검은색과 흰색 두 가지로만 나누는 것입니다. 그러면 물건이 “덩어리”로 남고, 픽셀을 세기만 해도 많은 걸 알 수 있습니다.
픽셀 수를 세면 면적, 좌표를 평균 내면 무게중심이 나옵니다. 오일러 수는 “덩어리 수 − 구멍 수”입니다.
- 면적: 흰 픽셀 개수 (0차 모멘트)
- 무게중심: 흰 픽셀 좌표의 평균 (1차 모멘트)
- 모양: 더 높은 차수의 모멘트로 길쭉한 정도 등을 잽니다
- 오일러 수: 덩어리 수에서 구멍 수를 뺀 값. 구멍 하나인 와셔는 0, 구멍 두 개인 판은 −1입니다
빠르고 간단하지만 약점이 있습니다. 문턱값으로 자르는 순간 애매한 픽셀을 너무 일찍 버립니다. 조명이 조금만 바뀌어도 덩어리 모양이 달라집니다.
본보기를 대 보며 닮은 자리 찾기
다음 방법은 템플릿 매칭입니다. 본보기 그림을 투명 필름에 그려서 사진 위에 대고, 한 칸씩 옮기며 얼마나 닮았는지 점수를 매긴다고 생각하면 됩니다.
템플릿을 모든 자리에 대 보고 점수를 매기면 오른쪽 같은 지도가 나옵니다. 가장 진한 점이 찾은 위치입니다.
점수를 매기는 가장 단순한 방법은 겹친 픽셀끼리 밝기 차이를 제곱해서 더하는 것입니다. 작을수록 닮았습니다. 식을 풀어 보면 이것은 두 그림을 픽셀끼리 곱해서 더한 값(상관)을 크게 만드는 것과 거의 같습니다.
밝기가 바뀌면 속는다: 정규화 상관
문제는 조명입니다. 공장 불이 조금 어두워지거나 카메라 노출이 바뀌면, 같은 물건인데도 차이 제곱 점수가 확 나빠집니다.
해결책은 비교하기 전에 두 가지를 맞춰 주는 것입니다.
- 밝기 맞추기: 각 그림에서 평균 밝기를 뺍니다. 전체가 밝아지거나 어두워진 효과가 사라집니다.
- 대비 맞추기: 밝기가 들쭉날쭉한 정도(표준편차)로 나눕니다. 흐릿한 사진과 쨍한 사진이 같은 눈금이 됩니다.
이렇게 계산한 점수가 정규화 상관(통계의 피어슨 상관계수)입니다.
\[\text{정규화 상관} = \frac{\sum (\text{사진}-\text{사진 평균})(\text{템플릿}-\text{템플릿 평균})}{\sqrt{\sum (\text{사진}-\text{사진 평균})^2}\;\sqrt{\sum (\text{템플릿}-\text{템플릿 평균})^2}}\]결과는 항상 −1과 1 사이이고, 1이면 밝기·대비만 다를 뿐 똑같은 무늬, −1이면 밝고 어두운 것이 정반대인 무늬입니다.
어둡게 하거나 대비를 낮춰도 정규화 상관은 1.00 그대로입니다. 하지만 물건이 반쯤 가려지면 0.42로 뚝 떨어집니다.
그래프 오른쪽 끝이 이 방법의 약점입니다. 정규화를 해도 물건 일부가 가려지면 점수가 크게 무너집니다.
PatQuick: 그림 대신 탐침 점 몇 개만
강의 노트가 소개하는 특허(US 7,016,539, 강의에서는 “PatQuick”이라고 부릅니다)는 한 걸음 더 나아갑니다. 본보기 그림을 통째로 저장하지 않고, 경계선 위에 고르게 찍은 점들만 저장합니다. 이 점을 탐침(probe)이라고 합니다.
학습 단계는 이렇습니다.
- 본보기 사진에서 경계 점을 찾고, 방향이 이어지는 점끼리 연결해 사슬을 만듭니다.
- 짧거나 약한 사슬은 버리고, 꺾이는 모서리에서 사슬을 토막 냅니다.
- 토막을 따라 고른 간격으로 탐침을 찍고, 각 탐침에 위치·방향·가중치를 적어 둡니다.
탐침은 “여기서 밝기가 이쪽으로 바뀌어야 한다”는 약속입니다. 맞는 자세에 올리면 거의 모든 탐침이 맞습니다(초록 점).
찾을 때는 탐침들을 후보 자세(위치, 회전, 크기…)로 옮겨 사진 위에 올리고, 그 자리의 밝기 변화 방향이 탐침 방향과 맞는지만 봅니다. 방향은 밝기나 대비가 바뀌어도 그대로라서 튼튼하고, 사진 전체가 아니라 점 수십 개만 보니까 빠릅니다. 모든 후보 자세를 훑어서 점수가 가장 높은 곳을 고릅니다. 다만 후보를 일정 간격으로만 훑기 때문에, 정확도는 그 간격만큼으로 제한됩니다. 이 한계를 메우는 방법은 15강에서 다룹니다.
직접 해 보기
① 밝기와 대비 바꿔 보기. 아래 슬라이더로 장면을 어둡게, 밝게, 흐릿하게 만들어 보세요. 주황 상자(차이 제곱)와 파란 상자(정규화 상관) 중 어느 쪽이 먼저 길을 잃는지 비교해 보세요.
밝기를 끝까지 올리고 대비를 낮추면 차이 제곱은 엉뚱한 곳을 고르지만, 정규화 상관은 끝까지 L자를 찾습니다. “물건 일부 가리기”를 켜면 정규화 상관 점수도 크게 떨어집니다.
② 탐침 맞춰 보기. L자 탐침 묶음을 끌어서 사진 속 L자 위에 올리고, 회전 슬라이더로 각도를 맞춰 보세요. 초록 점이 많을수록 점수가 올라갑니다.
“전부 훑어서 찾기”를 누르면 PatQuick처럼 위치 2픽셀, 각도 6° 간격으로 모든 자세를 시험해 가장 좋은 자세를 고릅니다. 물건 밝기를 배경보다 어둡게 내리면 탐침이 모두 틀리지만, “밝기 반전도 허용”을 켜면 다시 찾습니다.
정리
- 흑백으로 나눠 덩어리를 세는 방법은 빠르지만, 문턱값으로 정보를 너무 일찍 버립니다.
- 템플릿 매칭은 본보기를 모든 자리에 대 보고 가장 닮은 곳을 찾습니다.
- 정규화 상관은 평균을 빼고 들쭉날쭉한 정도로 나눠서, 밝기·대비가 바뀌어도 같은 점수를 줍니다. 단, 가려짐에는 약합니다.
- PatQuick은 경계 위 탐침 점의 방향만 비교해서 빠르고 조명에 강하지만, 훑는 간격만큼만 정확합니다.
참고: MIT 6.801/6.866 Machine Vision (Fall 2020), Berthold Horn · Ryan Sander · Tadayuki Yoshitake 강의 노트 (MIT OpenCourseWare, CC BY-NC-SA 4.0)