Görüntü İşleme
 
Üye Girişi
E-mail:

Şifre:



 
Blog Arama Motoru
 
19 Mayıs 2012
Mustafa Kemal Atatürk
 
E-mail Aboneliği
Yeni yazılar yazıldığında e-mail adresinize bildirim gelmesini isterseniz aşağıdaki kutucuğa e-mail adresinizi girip 'Abone Ol'a tıklayabilirsiniz.

E-mail:

 
 
Araç Plakası Konum Tespiti
Araç Plakası Konum Tespiti Uygulaması
Kaynak Kodlar(C#): Tıklayınız

   Son yazdığım 2 kütüphanenin nerelerde kullanılabileceğine ilişkin iyi bir örnek olacağını düşünerek C# ile bir araç plakası konum tespit uygulaması hazırladım.

   Programda çeşitli parametrelere verdiğim değerler, birkaç araba resmi üzerinde yaptığım ölçümlere dayanıyor. Normalde en uygun değerler yüzlerce araba resmi üzerinde yapılan testler sonucunda  elde edilir ama elimde o kadar görüntü yok. Zaten elimdekilerini de google görsellerinden aldım...

   Programın kullandığı kütüphaneler ile ilgili daha fazla bilgi için:
   • GaborFiltresi.dll
   • BaglantiliBilesenEtiketleme.dll

   Yöntemler ile ilgili daha fazla bilgi için:
   • Gabor Filtresi
   • Bağlantılı Bileşen Etiketleme (Connected Component Labeling)
   • Gri Seviye Ve Binary Dönüşüm

   Aşağıdaki resimler görüntülerin adım adım hangi işlemlerden geçirildiğini gösteriyor:

Orjinal görüntü
1. Orjinal görüntü
Gri görüntü
2. Gri görüntü
Gabor filtresinden geçmiş görüntü
3. Filtreli görüntü(Gabor ile)
İkili görüntü
4. Eşiklenmiş ikili görüntü
Yatayda genişletilmiş
5. Yatayda genişletilmiş görüntü
Etiketlenmiş Bileşenler
6. Etiketlenmiş bileşenler

Adım 1: Görüntüyü Gri Seviyeye İndirgeme
   Her pixelin ana renklerinin ortalaması alınarak((r+g+b)/3) pixeller gri seviyeye indirgenir.

Adım 2: Görüntüyü Gabor Filtresinden Geçirme
   Bu işlem GaborFiltresi.dll kütüphanesi tarafından yapılır. Görüntüdeki dik ayrıtlar dışındaki tüm ayrıtlar gabor filtresi ile filtrelenir. Böylece yataya dik ve dike yakın açılar yapan ayrıtlar elde edilir. Görüntüler üzerinde dik ayrıtların en yoğun olduğu bölgeler plaka karakterlerinin bulunduğu bölgelerdir. Yoğunluğun tespiti ileriki adımlarda yapılır. Programda gabor filtresi kütüphanesine gönderilen parametreler; yönelim açısı 90, faz açısı 0, en/boy oranı 0.9, band genişliği 1, standart sapma 0(0 değeri standart sapmanın kütüphane tarafından hesaplanmasını sağlar), dalga boyu 4.

Adım 3: Görüntüyü İkili Biçime Dönüştürme
   Görüntü sabit bir eşik değeri ile eşiklenerek ikili biçime dönüştürülür. Programda kullanılan eşik değer; 70.

Adım 4: Yatayda Genişletme
   Elde edilen ikili görüntü yatay doğrultuda genişletilir. Programda hem ikili seviyeye dönüşüm hem de genişletme işlemleri .NET'in Graphic sınıfından yararlanılarak gerçekleştirilmiştir. İkili seviye dönüşümü için basit bir eşikleme yapılmış, genişletme işlemindeyse görüntü üzerinde rastlanan her bir beyaz pixel için, pixeli orta nokta kabul eden 16 pixel genişliğinde yatay çizgiler çizilmiştir.
resim = new Bitmap(genislik, yukseklik);
Graphics grafik = Graphics.FromImage(resim);
Pen kalem = new Pen(Brushes.White);
grafik.Clear(Color.Black);
for (y = 0; y < yukseklik; y++)
   for (x = 0; x < genislik; x++)
       if (gPixeller[y * genislik + x] > esik) // gPixeller[]: gabordan geçmiş gri pixel dizisi
            grafik.DrawLine(kalem, x - genisletmeMiktari, y, x + genisletmeMiktari, y);

Adım 5: Görüntüdeki Bileşenleri Etiketleme
   Bu işlem BaglantiliBilesenEtiketleme.dll kütüphanesi tarafından yapılır. Görüntüdeki bileşenler bağlantılı bileşen etiketleme yöntemi ile etiketlenir. Böylece koordinatlarının tespiti kolaylaşır.

Adım 6: Bileşenlerin Koordinatlarını Tespit Etme
   Bu işlem de BaglantiliBilesenEtiketleme.dll kütüphanesi tarafından yapılır. Her bir etiketlenmiş bileşenin en sol-üst ve en sağ alt pixellerinin konumu tespit edilir. Bu değerler kullanılarak en ve boy bilgileri hesaplanır.

Adım 7: Plaka Bölgesini Doğrulama
   Elde edilen bileşenlerin tümü plakalara ait değildir. Bileşenlerin en ve boy değerleri plakaOlabilirMi() fonksiyonuna yollanır ve burada basit bir en/boy oranı kontrolünden geçirilir:
private bool plakaOlabilirMi(int en, int boy)
{
    if (boy < 5) return false;
    // Aşağıdaki oranı ve tölerans değerini birkaç plaka örneğini deneyerek buldum.
    // Bu yüzden bu yöntem tüm plaka konumlarının tespit edilmesini sağlayamayabilir.
    if (Math.Abs((float)en / boy - 4.5) < 2 && en > 40) return true;
    return false;
}

   Plaka sağa veya sola eğimli olabileceği için en/boy oranına +-2 kadarlık fark töleransı tanınmalıdır. Ayrıca farklı oranlarda plakalar da kullanıldığından, bu fonksiyona farklı değerler eklenerek farklı oranlara sahip plaka tiplerinin de doğrulanması sağlanabilir...
Yayınlanma Tarihi: 21 Şubat 2011 Pazartesi - 16:39
Anahtar Kelimeler: araç plakası yer tespiti, plaka konum tespiti, gabor filtresi, bağlantılı bileşen etiketleme, görüntü işleme

Onaylı yorum bulunmuyor.
Yorum/Görüş Bildir
Yorumları html kodu veya özel karakter kullanmadan, yazım kurallarına
dikkat ederek ve düzgün bir Türkçe kullanarak yazalım...
 
Atasoy Blog v3.0 © 2009-2012 Hüseyin Atasoy | Tema Tasarımı: Hüseyin Atasoy