Template Matching Methods

Kategori: Computer Vision , 10 Şubat 2020 , JanFranco


Daha önce Template Matching tekniğini görmüştük, uygulamasını yapmıştık. OpenCV kütüphanesindeki matchTemplate methodu ile, resim üzerinde hedef resmi kaydırma yöntemi ile gezdirerek, parametre methoda göre sonuçlar üretebiliriz. Parametre methodlar şunlardır: cv2.TM_CCOEFF, cv2.TM_CCOEFF_NORMED, cv2.TM_CCOR, cv2.TM_CCORR_NORMED, cv2.TM_SQDIFF, cv2.TM_SQDIFF_NORMED. 3 farklı method ve 3 farklı methodun normalize edilmiş halleri mevcut. cv2.TM_SQDIFF ile başlayalım:

Template Matching

Bu methodda, hedef resim (I), aradığımız resim üzerinde (T) piksel piksel gezdirilir. Örneğin hedef resim 2x2 boyutunda olsun. Aranacak resmin (0, 0) koordinatından başlayalım:

R(0, 0) = (T(0, 0) - I(0, 0))^2 + (T(0, 1) - I(0, 1))^2 + (T(1, 0) - I(1, 0))^2 + (T(1, 1) - I(1, 1))^2

R de bir resimdir, bir matris. Bu matrisin boyutu, template'ın arandığı resim ile aynı boyuttadır. Bu methodu kullandığımız eşleşmenin tam olduğu yerin başlangıç koordinatının değeri 0 olur. Bu da grayscale bir resimdeki en parlak noktadır. OpenCV kütüphanesindeki minMaxLoc methodu ile bu koordinatı alıp, hedef resmin bulunduğu yeri kare içine alabiliriz. Bunu daha önceki uygulamamızda yapmıştık, inceleyebilirsiniz. cv2.TM_SQDIFF_NORMED ile devam edelim:

Template Matching

Formülde görüyoruz ki paydanın üst kısmı bir önceki method ile aynı. Yani cv2._TM_SQDIFF ile elde ettiğimiz matristeki değerleri hedef resmin piksellerinin karelerinin toplamı x hedef resmin bulunduğu bölgedeki piksellerinin karelerinin toplamının sonucunun kareköküne bölüyoruz. Böylelikle sonucu normalize etmiş oluyoruz. Daha hassas objeleri veya daha küçük objeleri ararken oldukça işe yarayabilir. cv2.TM_CCOR ile devam edelim:

Template Matching

Yine hedef resim, aranan resim üzerinde gezdiriliyor, diğer tüm methodlarda olduğu gibi fakat burada farklarının karelerinin toplamını değil, çarpımlarının toplamını alıyoruz. Yine 3x3 bir hedef resim düşünelim ve aranan resmin (0, 0) koordinatındayız:

R(0, 0) = (T(0, 0) * I(0, 0)) + (T(0, 1) * I(0, 1)) + (T(1, 0) * I(1, 0)) + (T(1, 1) * I(1, 1))

Eşleşmenin olduğu kısımda sonuç en büyük değer olacak. Yine minMaxLoc methodu ile bu değeri bulabilir ve dikdörtgen vs. çizdirebiliriz. Önceki methodlarda eşleşmenin olduğu kısım en parlak kısımken bu methodda ise en koyu kısımdır. cv2.TM_CCORR_NORMED methodu ise aynı formülün normalize edilmiş halidir. O yüzden geçiyorum cv2.TM_CCOEFF methoduna:

Template Matching

Bu method aslında cv2.TM_CCOR methoduna oldukça benziyor. cv2.TM_CCOR methodunda hedef resim ile aranan resmin pikselleri çarpılıp bir sonuç elde ediliyordu. Bu methodda ise hedef resim ile aranan resmin pikselleri ile 1/toplam piksel sayısı*piksellerin toplamının farkı çarpılıyor. cv2.TM_CCOEFF_NORMED methodu ise bu methodun normalize edilmiş versiyonu. Yine hedef resim ile aranan resmin pikselleri çarpıldığından, en doğru eşleşme maksimum değer olacak. Yani yine en koyu kısımları arayacağız.


Sonraki Yazı: Template Matching with Multiple Objects
Yorumlar

Henüz bir yorum bulunmuyor.