Derinlemesine yazılım eğitimleri için kanalımı takip edebilirsiniz...

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...

5 Cevaplar

  1. Mehmet dedi ki:

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

  2. alp dedi ki:

    B*k gibi olmuş ne yazdığın belli ne kaynak Image nesnesine ne atıyoruz Resimler nesnesinin türü ne onu nasıl elde ettin hiç bişe yok

    Uyarı!!!
    Üslüpsuz olan kelime tarafımca düzeltilmiştir.

    • Gençay dedi ki:

      Evet okuduğunu anlamaktan aciz bir salaktan yorum geldi 🙂 Zavallı birinin klavye aracılığıyla kelimeleri yan yana yazarak anlamlı birşeyler üretebildiğini geleceğe delil olsun diye burada paylaşıyorum.

      • Batuhan dedi ki:

        Alp bey haklı kendine göre yazıp burada paylaşmak pek doğru bir öğretim yolu değil biraz daha açıklayıcı olabilir saygınızı bozmanıza gerek yok.

        • Gençay dedi ki:

          Yukarıdaki gibi bir ifadeyi kullanan birine haklı diyebilmekte ayrı bi nasip 🙂 Birilerinin edepsizlik yapmaya hakkı varsa benim de hicvetmeye hakkım olsun dimi… Neyse saygım olmasa yukarıdaki zavallıyla sizin yorumlarınızı paylaşıyor olmazdım.

Bir cevap yazın

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