Section 1. 템플릿 매칭
1. 템플릿 매칭 (Template matching)
입력 영상에서 (작은 크기의) 템플릿 영상과 일치하는 부분을 찾는 기법
2. 템플릿 매칭 원리
- 템플릿을 입력 영상좌측 상단에서부터 우측 하단까지 모든 부분과 비교하여 스캔
- 유사도 - 비교 부분의 동일한 정도를 나타냄 -> 최댓값 선택
- 비유사도 - 비교 부분의 차이를 나타냄 -> 최솟값 선택
3. 템플릿 매칭 함수
- image - 입력 영상
- templ - 템플릿 영상 (image 보다 같거나 작은 크기, 같은 타입)
- method - 비교 방법 (cv2.TM_으로 시작하는 플래그 지정)
- result - 비교 결과 행렬
- image의 크기가 W x H 이고, templ의 크기가 w x h 이면 result 크기는 (W - w + 1) x (H - h +1)
- 템플릿 영상의 왼쪽 상단이 입력 영상 좌표 (x,y)에 있을 때 비교 결과값이 저장됨
4. 템플릿 매칭 방법
5. 템플릿 매칭 방법 비교
- CCORR 방식은 두 영상파일의 비교 부분 픽셀 값을 곱한 것으로 큰 값일 수록 비슷하다고 판단하므로 입력 영상의 밝은 부분은 무조건 큰 값을 띠게 되어 비슷하다고 판단됨
- 이외의 방식은 모두 제대로 템플릿 매칭에 성공
6. 유사도 및 비유사도 행렬 그레이스케일로 표현
- 템플릿 매칭 함수의 결과값 (유사도 및 비유사도 값) 행렬을 그레이스케일로 변환
- SQDIFF 방식은 비유사도 방식이므로 가장 비슷한 부분에 0에 가까운 값을 나타냄
- 나머지는 유사도 방식이기 때문에 비슷할 수록 밝은 점으로 나타남
6. 템플릿 매칭 실습
- 오른쪽의 회로 영상 파일에서 왼쪽의 크리스탈을 검출하는 템플릿 매칭
- 핵심 코드 부분
① 회로 사진을 src 변수로 가져옴
② 하나의 크리스탈 영상 파일 (템플릿 영상)을 templ 변수로 가져옴
③ 회로 영상 파일에 평균 50, 시그마 10인 가우시안 잡음을 randn 함수를 이용하여 적용
④ ccoeff 정규화 방식으로 매치 템플릿 함수를 수행하고 유사도 결과를 res 에 저장
⑤ 해당 유사도 행렬을 그레이스케일로 화면에 출력하기 위해 normalize 함수 이용
⑥ res 변수에서 가장 큰 값을 갖는 좌표값을 얻기 위해 minmaxloc 함수 이용
⑦ 해당 좌표를 기준으로 템플릿의 가로크기와 세로크기를 더한 빨간색 직사각형 출력
- 출력 결과