multi template matching dengan open cv

Multi Template Matching dengan OpenCV

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.

multi template matching dengan open cv

Leave a Comment

Your email address will not be published. Required fields are marked *

Scroll to Top