EmguCV – Template Matching(Şablon Eşleştirme) İle Görüntü Üzerinde Nesne Tespiti

Merhaba,

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.

  • HAAR Cascade
    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.
  • HOG – Histogram of Oriented Gradients

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))
            {
                double[] minValues, maxValues;
                Point[] minLocations, maxLocations;
                result.MinMax(out minValues, out maxValues, out minLocations, out maxLocations);

                //Benzerlik eşiği. İdeal olanı siz seçeceksiniz.
                if (maxValues[0] > 0.6)
                {
                    Rectangle match = new Rectangle(maxLocations[0], nesne.Size);
                    kaynak.Draw(match, new Bgr(Color.Red), 3);
                }
            }
            
            pictureBox1.Image = kaynak.Bitmap;

EmguCV - Template Matching(Şablon Eşleştirme) İle Görüntü Üzerinde Nesne Tespiti

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.

Sonraki yazılarımda görüşmek üzere…
İyi çalışmalar…

Bunlar da hoşunuza gidebilir...

1 Cevap

  1. Mehmet dedi ki:

    Projeye dahil ettiğiniz kütüphaneleri yazar mısınız ?

Bir Cevap Yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

CAPTCHA (Şahıs Denetim Kodu) Resmi

*

Copy Protected by Chetan's WP-Copyprotect.