İlgili Bağlantılar: GaborFiltresi.dll, Görüntü Filtreleri, Araç Plakası Konum Tespiti
Geçenlerde filtrenin internet üzerinden denenmesine olanak tanıyan bir sayfa ile karşılaşmıştım. Filtre gerçekten ilginç sonuçlar üretiyor. Bugünlerde, ilerde çok işime yarayacağını düşündüğüm bu yöntemin bir kütüphanesini yazmaya çalışıyorum. [ -> GaborFiltresi.dll ]
Gabor filtresi, görüntü analizinde kullanılan önemli yöntemlerden bir tanesi. Filtre yardımıyla bir görüntü üzerinde belli bir yöne uzanan ayrıtlar tespit edilebilmektedir. Bu özelliği sayesinde plaka tanıma, parmak izi tanıma, iris tanıma, yüz tanıma gibi görüntü işleme tekniklerine dayalı pek çok yöntem için önemli bir adım niteliğindedir...
Filtreye ait çekirdek matris yukarıdaki fonksiyon yardımıyla hesaplanır. Bu fonksiyon bir komplex sayı döndürür. Çarpımın gerçel ve imajinal bileşenleri ayrı ayrı hesaplanabilir. Aşağıdaki ifade dönüş değerinin gerçel, bir sonraki de imajinal kısmıdır.
Her iki fonksiyon kullanılarak hem reel hem de imajinal değerler hesaplanıp, bu değerlerin karelerinin toplamının karekökleri alınarak elde edilecek sonuç kullanılabilir. Ancak genelde sadece reel değerlerin hesaplanması yeterli olmaktadır.
Şimdi fonksiyondaki ifadeleri, işlenmek üzere alınan parametreleri ve bu parametrelerdeki değişimlerin sonuca etkilerini inceleyelim.
Çekirdek matris hesaplanırken kullanılır. Çekirdek matris genelde bir kare matristir. nxn boyutundaki bu matris hem x hem y değerlerine, [-((n-1)/2), ((n-1)/2)] kapalı aralığındaki değerler verilerek elde edilir. Ancak matris dolaşılırken x ve y değerleri değil, elemanların satır ve sütun numaraları kullanılmalıdır. Matrisin boyutu için en uygun değerin nasıl hesaplandığını, dalga boyu ve en/boy oranı değerlerini anlattıktan sonra vermek sanırım daha mantıklı olacak...
Gabor filtresini anlatan kaynaklarda bu iki eşitlik ile ilgili bilgiye rastlayamamıştım. Biraz kurcalayınca aslında bu eşitliklere, daha önce lineer cebir dersinde öğrendiğimiz koordinat dönüşüm(transformation) işlemleri ile ulaşıldığını farkettim. Bir vektörün koordinatları bir dönüşüm matrisi yardımıyla değiştirilir. Yukarıdaki eşitlik elde edilirken kullanılan dönüşüm matrisi, iki boyutlu rotasyon matrisi adı verilen aşağıdaki matristir:
Teta açısı pozitifken saat yönünün tersine döndürme(rotasyon) yapan bu matriste, açı negatif alınırsa döndürme işlemi saat yönünde yapılır.
Ancak bilgisayarda bir görüntü düşünüldüğünde, örneğin bir picturebox göz önünde bulundurulduğunda, +y yönü koordinat düzlemine göre -y(aşağı doğru) yönüdür. Bu yüzden genelde saat yönünde döndürme tercih edilir ve bunu sağlamak için teta, -teta olarak alınır. cos(-teta)=cos(teta) ve sin(-teta)=-sin(teta) olduğundan, dönüşüm matrisinde -sin(teta) ve sin(teta) ifadelerinin yerleri değişir. Çarpım sonucunda, x ve y koordinatlarından saat yönünde teta kadar dönmüş x' ve y' koordinatları elde edilir.
Bu açı, tespit edilmek istenen ayrıtların yönünü belirler. Açı 0 değerinde iken, x eksenine dik olan ayrıtlar tespit edilir. Bu durum size ters gelirse teta açısı yerine teta+90 açısını kullanıp, teta 0 iken yatay ayrıtların tespit edilmesini sağlayabilirsiniz. Açı arttırıldıkça, rotasyon matrisinin döndürme yönüne göre artan açılara sahip ayrıtlar tespit edilir.
Fonksiyondaki 2. çarpan bir gaussian fonksiyondur. Bu değer, 2. çarpanın standart sapma değeridir ve band genişliği ile dalga boyu paramatreleri kullanılarak hesaplanabilir.
Cosinüs çarpanının dalga boyunu belirler. Birimi pixeldir. Bu parametreye 2 veya 2den büyük değerler verilmelidir.
Band genişliği sıfırdan büyük bir reel sayıdır. Düşük band genişliği, dolayısıyla büyük standart sapma, filtreli görüntüdeki paralel şeritlerin sayısının artmasına sebep olur. Band genişliği, standart sapma ve dalga boyu arasında aşağıdaki gibi bir ilişki vardır:
Bu eşitlik, band genişliği, standart sapma ve dalga boyu değerlerinin herhangi ikisi kullanılarak, diğerinin hesaplanabilmesini sağlar. Genelde band genişliği 1 alınır. Bu durumda standart sapma, dalga boyu ve band genişliği değerleri kulanılarak sigma=0.56*landa olarak bulunur.
Gaussian fonksiyonu, çan eğrisi biçiminde bir grafik meydana getirir. En/boy oranı bu eğrinin eninin boyuna oranıdır. Bu değer, elde edilecek filtreli görüntüye aynı şekilde yansır. Yani değer değiştirildikçe, elde edilecek ayrıtların en/boy oranı aynı oranda değişir.
Cosinüs çarpanının faz açısıdır. Bu değer 0 ve 180 iken, gaussian eğrisi merkezde(x=0) konumlanır. Farklı faz açıları, grafiği x eksenine göre sola veya sağa kaydırır ve eğrinin y eksenine göre asimetrik olmasına sebep olur. Asimetriklik aynen filtreli görüntüye yansır. Yani filtreli görüntüde, ayrıtları temsil eden paralel şeritler parlaklık bakımından asimetrik olur.
Dalga boyuna 2 değeri verilmişken, faz açısına 90 veya -90 değeri verilmemelidir. Çünkü bu durumda çekirdek matrisin elemanlarına gabor fonksiyonunun sıfırdan geçiş noktaları denk gelir ve elde edilecek çekirdek matris, filtrelenmesi istenen görüntünün tüm pixellerini sıfırlar.
Çekirdek matrisin boyutunu elle girmek mümkündür. Matris kare alındığında, boyutu belirleyen en uygun n değeri 8*sigma/gama ifadesine en yakın küçük tamsayı seçilerek belirlenebilir.
Filtre görüntü üzerinde gezdirilirken, çekirdek matrisin elemanları ile filtrelenecek görüntüde matrisin örttüğü aynı boyuttaki pixel matrisinin elemanları birbirleri ile çarpılır ve bu çarpımlar toplanır. Elde edilen toplam değerinin karesinin karekökü (yani aslında mutlak değeri) alınır ve bu son değer, görüntü üzerinde o an işlenen pixel matrisinin tam ortasındaki pixele yerleştirilir. Tüm pixeller gezildiğinde, filtreli görüntü elde edilmiş olur.
Denemelerimde, ilk başlarda bu adımı gözardı ettiğim için filtreli görüntüyü internet üzerindeki online uygulamanın çıktısına benzetememiştim.
Normalizasyon, pixellerin değerlerinin 0-255 aralığına genişletilmesi işlemidir. Eğer bu adım atlanırsa, pixeller dar bir aralıktan değer alabileceğinden, çok parlak veya çok sönük görüntüler elde edilebilir. Bunu önlemek amacıyla filtreli görüntüdeki en parlak pixelin 255 değerine sahip olmasının sağlanması ve bu yüzden en parlak pixelin değeriyle çarpılması gereken katsayının hesaplanıp(=255/EnParlakPixelDeğeri) diğer tüm pixellerin bu katsayıyla çarpılması gerekir. Böylece normalizasyon tamamlanır ve görüntü gabor filtresinden geçirilmiş olur...
Yaptığınız iş gerçekten takdire şayan. Fakat Kaynaklar kısmında verdiğiniz wiki sayfalarını okuyabiliyorsanız, yani ingilizceniz var ise ülkemiz insanlarının faydalanmaları için hazır okumuşken çevirip wiki' ye eklerseniz çok dah faydalı bir iş yapmış olursunuz. Saygılar
Teşekkür ederim.
Aslında iyi olurdu ama buraya bile yazmak için zaman ayırmakta zorlanıyorum.
Muhtemelen bu sayfaya bir arama sonucunda geldiniz. Önemli olan da bu işte. Eğer bilgi arandığında bulunabiliyorsa, bu bilginin nerede yer aldığının çok önemi yok sanırım...
Hüseyin bey merhaba. Uzunca bir süredir Gabor filtresini ve FFT'u anlamaya çalışıyorum, henüz bitiremedim :) Şu örneğinizin sonucuna baktığınızda aklıma ilk gelen soru şu oluyor. Bu sonuc resmini nasıl kullanabiliriz. Yani ben örneğin şekil tanımak istiyorum veya plaka tanımak istiyorum. Resimde Plaka veya şekiller her açıda olabilir. Gabora açı yazarken hangi açıyı yazağım. Diyelimki açıyı çözdüm gelen sonucu nasıl kullanacağım veya algılamalıyım. Belirgin çizgiyi baz alıp diğerleri gürültüdür mü demeliyim? Not: Lütfen cevabınızı e-posta adresime gönderirseniz sevinirim. Web'e herzaman bakamıyorum. İyi çalışmalar.
Bu filtre yardımıyla araç plakası konum tespitinin nasıl yapıldığını şu yazıda anlatmaya çalışmıştım.
Aynı sayfadan programın kaynak kodlarına da ulaşabilirsiniz.
İyi çalışmalar.
merhaba hocam
gabor filtresinde kullandığınız teta sigma landa gama değerlerini nasıl ayarlıyoruz? siz kendi kütüphanenizde hangi değerleri kullandıınız yazabilir misiniz?