AtasoyWeb - Hüseyin Atasoy
Bir bilgisayar mühendisi için programlama dili, öğrendiklerini sınadığı, deneyler yaptığı bir laboratuvardır ve mühendisler deneylerini, kestiremedikleri sonuçları gözlemlemek için değil, öngördükleri sonuçları doğrulamak için yapar...

Araç Plakası Konum Tespiti

GaborFiltresi.dll ve BaglantiliBilesenEtiketleme.dll kütüphanelerini kullanarak bir görüntü üzerinde bir veya birden fazla araç plakasının konumunu tespit eden uygulama.
Araç Plakası Konum Tespiti Uygulaması
Kaynak kodlar (C#) için: 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:

Yöntemler ile ilgili daha fazla bilgi için:

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

Görüntüyü Gri Seviyeye İndirgeme

Her pixelin ana renklerinin ortalaması alınarak((r+g+b)/3) pixeller gri seviyeye indirgenebilir.

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.

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.

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);

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.

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.

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

Leave Comment

 
You are replying to comment #-1. Click here if you want to cancel replying.

 

Comments (12)

Yusuf
Reply
26/12/2014 15:19
#1

Faydalı yazı, tebrikler. İşime çok yaradı.

gunay
Reply
25/02/2015 01:54
#2

Merhaba. Zamaninizi ayirip bunlari yazdiginiz icin tesekkur ederim.
Bir sorum olacakti. Bu yukaridaki islemlerin uygulandigi resimleri ben kendim programi calistirarak her islemden sonra resmi kayd etmek istiyorum. Bunu nasil yapa bilirim? Tesekkurler.

Hüseyin Atasoy
Reply
03/03/2015 15:27
#3

Görüntüyü kaydetmek istediğiniz aşamada Save() fonksiyonunu kullanabilirsiniz:
Örnek: resim.Save(@"C:\resim1.bmp");

ramazan
Reply
02/04/2016 18:24
#4

Merhaba. Uğraşmakta olduğum projede aracın plaka konumunu tespit etmem gerekiyor. Bağlantılı bileşen etiketleme kütüphanenizi indirdim ancak projeme ekleyemiyorum hata veriyor uğraşmama rağmen.Acaba kütüphane içindeki konum tespit metodunuzun kodlarına nasıl ulaşabilirim ? Yardımcı olursanız çok sevinirim.

Hüseyin Atasoy
Reply
11/05/2016 08:40
#5

İndirdiğiniz dosyanın içinde örnek kodlar vardı aslında. Yine de kütüphanenin kodlarını bulabilirsem atarım.

ahmet
Reply
26/04/2016 00:26
#6

merhaba hocam güzel bir iş çıkarmışsınız tebrikler. Benim bir sorum olacaktı zaman ayırıp cevap verirseniz çok sevinirim, ben ayrıca plakadaki karakterleri de okumak istiyorum nasıl yapabilirim, hangi yöntemleri kullanabilirim yani tam olarak nasıl bir yol izlemem gerekiyor ?

Hüseyin Atasoy
Reply
11/05/2016 08:30
#7

Merhaba,
İnternette OCR şeklinde bir arama yaparsanız detaylı bilgi edinebilirsiniz. Konuyla ilgili pek çok yöntem var. Açık kaynak kodlu kütüphaneler de mevcut. Mesela Tesseract ünlüdür, kullanabilirsiniz.

Ahmet
Reply
25/03/2019 16:48
#8

Siteniz çok güzel

hakan yıldız
Reply
30/01/2021 01:10
#9

Hocam selamlar. ben bu plaka tespit programını kuramadım. yardımcı olma şansınız var mı

Hüseyin Atasoy
Reply
31/01/2021 12:51
#10

Bu bir örnek bu aslında. İndirip Visual Studio ortamında derlemeniz gerekiyor. Ama program, kayıp arabaların yerini plaka ile bulan bir program olarak algılanıyor. Böyle bir amaçla kullanmayı düşünüyorsanız, bu porgram böyle bir işleve sahip değil.

Emre
Reply
03/03/2021 15:11
#11

Hocam emeğinize sağlık ben kuramadım yardımcı olabilirmisiniz

Hüseyin Atasoy
Reply
04/03/2021 09:26
#12

İndirdiğiniz dosyada kaynak kodlar mevcut. bin klasörünün içinde derlenmiş hali var onu kurulum yapmadan çalıştırabilirsiniz.

 
Şu an bu sayfada 1, blog genelinde 9 çevrimiçi ziyaretçi bulunuyor. Ziyaretçiler bugün toplam 2940 sayfa görüntüledi.
 
Sayfa 56 sorgu ile 0.582 saniyede oluşturuldu.
Atasoy Blog v4 © 2008-2021 Hüseyin Atasoy