+2

Template Matching giải quyết bài toán Object Detection đơn giản

Template Matching

Hàm cv2.matchTemplate là một kỹ thuật tìm kiếm các vùng của hình ảnh khớp (tương tự) với hình ảnh mẫu (patch) nói cách khác là khớp một mảnh ghép vào hình ảnh thực tế bằng cách “trượt” mảnh ghép đó lên hình ảnh đầu vào (như tích chập 2D) và so sánh mẫu và mảnh ghép dựa trên một số phép chuẩn hóa (Hình 1). Nó trả về một hình ảnh thang độ xám, trong đó mỗi pixel biểu thị mức độ lân cận của pixel đó khớp với mẫu.

Nếu hình ảnh đầu vào có kích thước (WxH) và hình ảnh mẫu có kích thước (wxh), hình ảnh đầu ra sẽ có kích thước là (W-w+1,H-h+1). Sau khi nhận được kết quả, bạn có thể sử dụng hàm cv2.minMaxLoc() để tìm giá trị tối đa/tối thiểu ở đâu. Lấy nó làm góc trên cùng bên trái của hình chữ nhật và lấy (w,h) làm chiều rộng và chiều cao của hình chữ nhật. Hình chữ nhật đó sẽ là vùng mẫu cần tìm.

image.png

Hình 1: cv2.matchTemplate quét một mảnh ghép trên một hình ảnh khác để tìm đối tượng đó trong ảnh. Kích thước template thường tương ứng với kích thước của vật thể trong ảnh tìm kiếm

image.png

Hình 2 Một số phép chuẩn hóa

Trong đó: I biểu thị ảnh đầu vào, T là mẫu, R là hình ảnh kết quả.

Square Difference Matching Method(cv2.TM_SQDIFF)

Phương pháp "cv2.TM_SQDIFF" dựa trên hình ảnh sự khác biệt bình phương (squared difference) giữa cửa sổ mẫu (template window) và các vị trí ứng viên trên hình ảnh mục tiêu. Thuật toán sẽ tìm kiếm vị trí có sự khác biệt bình phương nhỏ nhất và coi đó là vị trí tương tự nhất.

Normalized Square Difference Matching Method (cv2.TM_SQDIFF_NORMED)

Phương pháp "cv2.TM_SQDIFF_NORMED" cũng dựa trên hình ảnh sự khác biệt bình phương (squared difference) giữa cửa sổ mẫu (template window) và các vị trí ứng viên trên hình ảnh mục tiêu, nhưng kết quả được chuẩn hóa để nằm trong khoảng từ 0 đến 1. Các giá trị càng nhỏ, cho thấy sự khớp tốt hơn giữa template và vị trí ứng viên.

Correlation Matching Method (cv2.TM_CCORR)

"cv2.TM_CCORR" là một hằng số được sử dụng để xác định phương pháp tìm kiếm sự tương tự bằng tích chập chuẩn (cross-correlation) trong các thuật toán so khớp hình ảnh.

Phương pháp "cv2.TM_CCORR" dựa trên tích chập chuẩn giữa cửa sổ mẫu (template window) và các vị trí ứng viên trên hình ảnh mục tiêu. Giá trị tương tự càng cao, cho thấy sự khớp tốt hơn giữa template và vị trí ứng viên.

Normalized Cross- Correlation Matching Method(cv2.TM_CCORR_NORMED)

"cv2.TM_CCORR_NORMED" là một hằng số được sử dụng để xác định phương pháp tìm kiếm sự tương tự chuẩn hóa bằng tích chập chuẩn (normalized cross-correlation) trong các thuật toán so khớp hình ảnh.

Phương pháp "cv2.TM_CCORR_NORMED" dựa trên tích chập chuẩn giữa cửa sổ mẫu (template window) và các vị trí ứng viên trên hình ảnh mục tiêu, với kết quả được chuẩn hóa để nằm trong khoảng từ 0 đến 1. Các giá trị càng gần 1, cho thấy sự khớp tốt hơn giữa template và vị trí ứng viên.

Correlation Coefficient Matching Method (cv2.TM_CCOEFF)

"cv2.TM_CCOEFF" là một hằng số được sử dụng để xác định phương pháp tìm kiếm sự tương tự bằng hệ số tương quan (cross-correlation coefficient) trong các thuật toán so khớp hình ảnh.

Phương pháp "cv2.TM_CCOEFF" dựa trên hệ số tương quan giữa cửa sổ mẫu (template window) và các vị trí ứng viên trên hình ảnh mục tiêu. Giá trị tương tự càng cao, cho thấy sự khớp tốt hơn giữa template và vị trí ứng viên.

Normalized Correlation Coefficient Matching Method (cv2.TM_CCOEFF_ NORMED)

"cv2.TM_CCOEFF_NORMED" là một hằng số được sử dụng để xác định phương pháp tìm kiếm sự tương tự chuẩn hóa bằng hệ số tương quan (normalized cross-correlation coefficient) trong các thuật toán so khớp hình ảnh.

Phương pháp "cv2.TM_CCOEFF_NORMED" dựa trên hệ số tương quan chuẩn hóa giữa cửa sổ mẫu (template window) và các vị trí ứng viên trên hình ảnh mục tiêu, với kết quả được chuẩn hóa để nằm trong khoảng từ -1 đến 1. Các giá trị càng gần 1, cho thấy sự khớp tốt hơn giữa template và vị trí ứng viên.

image.png

Hình 3: Kết quả khớp của sáu phương pháp so khớp cho tìm kiếm mẫu được mô tả trong Hình 1

Kết quả khớp tốt nhất cho chênh lệch bình phương là 0 và đối với các phương pháp khác, đó là điểm tối đa; do đó, các kết quả trùng khớp được biểu thị bằng các vùng tối ở cột bên trái và bằng các điểm sáng ở hai cột còn lại.

Tham khảo code: https://docs.opencv.org/3.0-beta/doc/py_tutorials/py_imgproc/py_template_matching/py_template_matching.html

[Tài liệu tham khảo] https://books.google.com.au/books?id=SKy3DQAAQBAJ&lpg=PT607&ots=XGg5zrJXPp&dq=TM_CCOEFF&pg=PT606#v=onepage&q=TM_CCOEFF&f=false

https://theailearner.com/tag/cv2-matchtemplate/


All rights reserved

Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí