﻿ EmguCV – Template Matching(Şablon Eşleştirme) İle Görüntü Üzerinde Nesne Tespiti | Yazılım Mimarileri ve Tasarım Desenleri Üzerine
Yazar: Gençay · 02 Ağustos 2017
Görüntü işlemede; bir parçayı, o parçanın koparıldığı bütünden bağımsız bir şekilde değerlendirip tespit edebilmek için mühendisler birden çok farklı yaklaşım ve bu yaklaşımlara eşlik eden yöntemler oluşturmuşlardır. Bu içeriğimizde nesneyi tespit edebilme yaklaşımlarına genel olarak değinecek, bunlardan bir tanesini(Template Matching) pratikte ele alacağız.
Nesne tespiti için temelde dört farklı yöntem mevcuttur. Bunlar;
Template Matching(Şablon Eşleştirme)
Kaynak görüntü üzerinde nesneyi tüm piksellerde dolaşarak aramaktadır. Buda görüntünün birebir aynısı olarak aranması demektir. Bu yüzden nesneyi ayırt etmede çok fazla başarılı değildir.
Bu yöntemin başarılı olması için aranan nesnenin kaynaktan kesilmiş olması gerekmektedir. Eğer ki, siz bir elma arıyorsunuz ama kaynaktaki elma yarım elma ise arama sonucu başarısız olacaktır. Ayriyetten kaynaktaki nesne ile eldeki nesne görüntüsü arasındaki boyut oranları birebir aynı olmalıdır. Denklik durumunda bile arama sonucu olumsuz olabilir.
Template Matching yöntemi ile kaynak görsel üzerinde aranan nesne Sliding Window(Kayan/Sürgülü Pencere) yöntemi ile aranır. Kaynak üzerinde nesne (1, 1) koordinatlarına yerleştirilir ve tüm pikseller üzerinde tek tek kaydırılarak eşleştirilir.
XML alt yapılı olan bu veri setleri bir nesnenin negatif ve pozitif değerlerini tutmakta ve karşılaştırma esnasında kullanılmaktadır. Bununla ilgili en güzel örnekleri şu ve şu makalelerde bulabilirsiniz.
LBP – Local Binary Pattern
Bu yöntem kaynak görüntüde aranan nesneyi piksel yoğunluğuna(intensity) göre bulmaktadır. Daha teknik olarak, bir noktanın etrafındaki piksellerin yoğunluk değerlerine göre oluşan ikili(binary) örüntülerden yaratılır ve bu örüntüler üzerinde işlemler gerçekleştirerek nesneyi aramaktadır.
Template Matching yöntemi dışındaki yöntemler “Sınıflandırıcı” olarak tanımlanan Machine Learning algoritmalarıdır.
Şimdi Template Matching yöntemini EmguCV ile teknik olarak ele alalım.
Image<Bgr, byte> kaynak = new Image<Bgr, byte>(Resimler.r1);
Image<Bgr, byte> nesne = new Image<Bgr, byte>(Resimler.r2); //Aranan Nesne
//Template Matching MatchTemplate ile uygulanmaktadır.
using (Image<Gray, float> result = kaynak.MatchTemplate(nesne, TM_TYPE.CV_TM_CCOEFF_NORMED))
Point minLocations, maxLocations;
//Benzerlik eşiği. İdeal olanı siz seçeceksiniz.
if (maxValues > 0.6)
Rectangle match = new Rectangle(maxLocations, nesne.Size);
kaynak.Draw(match, new Bgr(Color.Red), 3);
pictureBox1.Image = kaynak.Bitmap;
Gördüğünüz üzere kaynak görüntüden bir parça olan şeklimizi Template Matching yöntemiyle tespit ederek etrafını çizdirmiş olduk.
Zamanla diğer algoritmalar üzerinede istişare edeceğimiz ümidindeyim. O halde şimdilik hoşçakalın diyorum.
Etiketler: EmguCV Nesne TespitiHAAR CascadeHistogram of Oriented GradientsHOGHOG - Histogram of Oriented GradientsLBPLBP - Local Binary PatternLocal Binary PatternMachine LearningMachine Learning AlgoritmalarıMachine Learning AlgoritmasıŞablon EşleştirmeSliding WindowTemplate Matching
04 Ekim 2017, 17:39
Projeye dahil ettiğiniz kütüphaneleri yazar mısınız ?
Sonraki yazı EmguCV – Multiple Face Recognition(Çoklu Yüz Tanıma)
Önceki yazı SQL Server 2016 İle DATEDIFF_BIG Fonksiyonu