[OpenCV] Template Matching
Template Matching
입력 영상에서 작은 크기의 부분 영상 위치를 찾고 싶은 경우에 템플릿 매칭(Template Matching)을 사용합니다.
-
템플릿(Template) : 찾고자 하는 대상
-
템플릿 매칭 : 작은 크기의 템플릿 영상을 입력 영상 전체 영역에 대해 이동하면서 가장 비슷한 위치를 수치적으로 찾아내는 방식
템플릿 매칭 동작 방식
입력영상의 모든 위치에서 템플릿과 유사도(Similarity)와 비유사도(dissimilarity)를 계산하고, 그 결과를 그레이스케일 영상으로 나타냅니다.
-
유사도를 계산할 경우에는 템플릿 영상과 비슷한 부분에서 값이 작게 나타납니다.
-
비유사도를 계산할 경우에는 템플릿 영상과 비슷한 부분에서 값이 작게 나타납니다.
matchTemplate() 함수
opencv의 matchTemplate() 함수를 사용하여 템플릿 매칭을 수행할 수 있습니다.
파라미터
- image : 입력영상
- templ : 템플릿 영상. 입력영상 image보다 같거나 작아야 하며, image와 타입이 같아야 함
- result : 비교 결과를 저장할 행렬. CV_32FC1 타입
- method : 템플릿 매칭 비교 방법
- mask :
- 찾고자 하는 템플릿의 마스크 영상
- templ과 같은 크기, 같은 타입이어야 함
- TM_SQDIFF 와 TM_CCORR_NORMED 방법에서만 지원가능
유사도 맵 또는 비유사도 맵은 result인자로 반환됩니다.
image의 크기가 $W x H$ 이고 templ 크기가 $x x h$ 인 경우, result 행렬의 크기는 (W - w + 1) x(H - h + 1)로 결정됩니다.
method (템플릿 매칭 비교 방법)
- TM_SQDIFF : 제곱차 매칭 방법
- TM_SQDIFF_NORMED : 정규화된 제곱차 매칭 방법
- TM_CCORR : 상관관계 매칭 방법
- TM_CCORR_NORMED : 정규화된 상관관계 매칭 방법
- TM_CCOEFF : 상관관계 매칭 방법
- TM_CCOEFF_NORMED : 정규화된 상관관계 매칭 방법
TM_SQDIFF : 제곱차 매칭 방법
두 영상이 완벽하게 일치하면 0이 되고 서로 유사하지 않으면 0보다 큰 양수를 갖습니다.
result결과 행렬에서 최솟값 위치를 가장 매칭이 잘 된 위치로 선택해야 합니다.
TM_SQDIFF_NORMED : 정규화된 제곱차 매칭 방법
영상의 밝기 차이 영향을 줄여 주는 정규화 수식이 추가된 것
TM_CCORR : 상관관계 매칭 방법
두 영상이 유사하면 큰 양수가 나오고 유사하지 않으면 작은 값이 나옵니다.
TM_CCORR_NORMED : 정규화된 상관관계 매칭 방법
영상의 밝기 차이 영향을 줄여 주는 정규화 수식이 추가된 것
가장 좋은 결과를 제공하지만 계산 수식이 가장 복잡하여 연산량이 많을 수 있습니다.
TM_CCOEFF : 상관관계 매칭 방법
비교할 두 영상을 미리 평균 밝기로 보정한 후 상관관계 매칭을 수행하는 방식입니다.
두 비교 영상이 유사하면 큰 양수가 나오고, 유사하지 않으면 0에 가까운 양수 또는 음수가 나옵니다.
result 결과 행렬에서 최댓값 위치가 가장 매칭이 잘 된 위치로 선택해야 합니다.
TM_CCOEFF_NORMED : 정규화된 상관관계 매칭 방법
영상의 밝기 차이 영향을 줄여 주는 정규화 수식이 추가된 것
매칭 결괏값이 -1 에서 1사이의 실수로 나타납니다. 두 방법 모두 결괏값이 1에 가까울 수록 매칭이 잘 되었음을 의미합니다
### Template Matching을 이용한 OCR논문
Optical Character Recognition By Using Template Matching (Alphabet)
Leave a comment