Pada tutorial kali ini kita akan membuat multi template matching dengan OpenCV python. Sebelumnya, apa itu template matching. Template matching merupakan teknik dalam pengolahan citra digital untuk menemukan bagian-bagian kecil dari suatu gambar yang cocok dengan gambar template.
Selain ada Multi Template Matching, terdapat juga Single Template Matching. Terus apa perbedaan antara single template matching dengan multi template matching?
Single matching template menggunakan metode cv2.matchTemplate dan kemudian menggunakan minMaxLoc untuk mendapatkan koordinat titik yang paling mungkin yang cocok dengan template kita dan kotak pembatas pada gambar.
Tetapi dalam multi template matching setelah menggunakan cv2.matchTemplate kita perlu memfilter semua titik yang lebih besar dari threshold dan kemudian menggunakan non-maxima-suppression (NMS) untuk memuluskan beberapa deteksi dan membuat kotak pembatas di sekitar gambar.
Pertama, kita download match image dan template image disini. Setelah itu, kita buat folder dan di dalam folder tersebut buat file dengan nama main.py
Kemudian kita import beberapa libraries yang digunakan antara lain open cv, numpy dan imutils.
import cv2 import numpy as np from imutils.object_detection import non_max_suppression
Selanjutnya, kita load input image dan template image menggunakan cv2.imread()
img = cv2.imread('logo-leravio.jpg') temp = cv2.imread('temp-leravio.jpg')
Sebelum itu, kita perlu mengubah warna gambar dari rgb ke grayscale dengan menggunakan fungsi cvtColor() dengan parameter cv2.COLOR_BGR2GRAY seperti berikut ini.
img_gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) temp_gray = cv2.cvtColor(temp, cv2.COLOR_BGR2GRAY)
Setelah itu, simpan dimensi gambar dan definisikan nilai minimum threshold. Disini kita akan mendefinisikan nilai dari minimum threshold yaitu 0.4
W, H = temp.shape[:2] thresh = 0.4
Selanjutnya, masukkan img_gray dan temp_gray ke dalam cv2.matchTemplate() dengan menggunakan
method cv2.TM_CCOEFF_NORMED.
match = cv2.matchTemplate( image=img_gray, templ=temp_gray, method=cv2.TM_CCOEFF_NORMED)
Match Template akan mengembalikan semua kotak pembatas bahkan dengan akurasi rendah, jadi harus
memfilternya dengan menggunakan nilai threshold yang telah didefinisikan sebelumnya.
(y_points, x_points) = np.where(match >= thresh) boxes = list() for (x, y) in zip(x_points, y_points): boxes.append((x, y, x + W, y + H))
Kemudian, kita akan menerapkan NMS pada kotak pembatas untuk meningkatkan semua prediksi dan
memberi kotak pembatas yang sesuai untuk setiap objek.
boxes = non_max_suppression(np.array(boxes))
Terakhir, saya tampilkan gambar template dan hasil dari Multi Template Matching dengan menggunakan cv2.imshow() seperti berikut.
for (x1, y1, x2, y2) in boxes: cv2.rectangle(img, (x1, y1), (x2, y2), (255, 0, 0), 3) cv2.imshow("Template", temp) cv2.imshow("After NMS", img) cv2.waitKey(0) cv2.destroyAllWindows()
Berikut hasil yang kita dapatkan dari Multi Template Matching dengan menggunakan OpenCV.
