21 Mart 2017 Salı

PLAKA TANIMA SİTEMİ

Görüntü Yüklemek

İşlem yapılacağımız görüntü  C# programlama diliyle yazılan programı yardımıyla bilgisayar içirisinde kayıtlı görüntülerden elde edilecektir. Elde edilen renkli görüntü 640x480 piksel olup RGB formatındadır.
Orjinal görüntü
Benim kullanmış olduğum dosya seçme kodlarım aşağıdaki gibidir. Sizde istediğiniz amaca uygun başka bir kod ile bu işlemi gerçekleştirebilirsiniz.

 private void Dosyasec(object sender, EventArgs e)
        {
            openFileDialog1.Filter = "Resim Dosyaları (*.bmp)|*.jpg;*.gif;*.bmp;*.png;*.jpeg";
            openFileDialog1.Multiselect = false;
            openFileDialog1.FileName = "";
            if (openFileDialog1.ShowDialog() != System.Windows.Forms.DialogResult.OK) return;
            resimYukle(openFileDialog1.FileName);
        }

Görüntünün Gri Seviyeye Dönüştürülmesi

RGB formatındaki görüntü üzerinde daha hızlı işlem yapabilmek için gri seviyeli formata dönüştürülmüştür. Dönüştürme işleminde aşağıda verilen algoritma kullanılarak ortalama değer yöntemi ile gri seviyeye dönüşüm yapılmıştır.
Görüntünün gri seviyeye dönüştürülmesine ait akış diyagramı


Görüntünün gri seviyeye dönüştürülmesi
if (pictureBox1.Image == null)
            {
                MessageBox.Show("Önce bir resim Seçin");
            }
            else
            {
                int i, j;
                Color ort;              
                for (i = 0; i <= bmp.Width - 1; i++)//dikey olarak görüntümüzü tarıyoruz.
                {
                    for (j = 0; j <= bmp.Height - 1; j++)//yatay olarak görüntümüzü tarıyoruz. 
                    {
                        ort = bmp.GetPixel(i, j);
                        ort = Color.FromArgb((byte)((ort.R + ort.G + ort.B) / 3), (byte)((ort.R + ort.G + ort.B)               / 3), (byte)((ort.R + ort.G + ort.B) / 3));
                        bmp.SetPixel(i, j, ort);
                       
                    }
                }
            }


Median Filtresi Uygulamak

Gri seviyeye dönüştürülmüş görüntünün renkleri arasındaki keskin geçişleri minimuma indirmek için kullanılmıştır.  Median filtreler 3x3, 5x5, 7x7  gibi tek sayılı matrisler tarafından elde edilir. Matris boyutu arttıkça görüntü bulanıklığı artar. Aşağıdaki çıktıda yani projemde median[3x3] filtresi uyguladım.
Median filtresi uygulanmış görüntü

Sobel Filtresi Uygulamak

Medyan Filtesi uyguladığımız görüntü üzerinde kenarları bulmak için uygulayacağımız kenar bulma filtrelerinde biri olan sobel filtresini kullanacağız.
Sobel fitresi uygulanmış görüntü

Otsu Algoritması Kullanmak

Gri seviyeli bir görüntüden ikili seviyeye dönüşüm yapılırken bir eşik değeri kullanılır. Gri seviye görüntüdeki her piksel tek tek değerlendirilerek belirlenen eşik değerinden küçük olan pikseller 0 yani siyah, diğer pikseller 255 yani beyaz olarak atanır. Farklı aydınlık düzeylerinde yapılan deneylerde eşik değerinin sabit kalması durumunda istenen düzeyde ikili seviye görüntü elde edilememiştir.
Otsu  uygulanmış görüntü

Morfolojik İşlemler Uygulamak

1-Aşındırma işlemi Uygulamak

Morfolojik işlemlerden erosion işlemi birbirine ince bir gürültü ile bağlanmıs¸ iki veya daha fazla nesneyi birbirinden ayırmak için kullanılır. Bizde bu işlemi uygulayarak görüntü üzerindeki ince görültü ile bağlamıs¸ nesneleri birbirinden ayırarak gürültü miktarnı minimuma indirdik.

Aşınma ˙işleme uygulanmış görüntü

2-Genişletme işlemi Uygulamak

Genişletme işlemi ise aynı nesnenin bir gürültü ile ince bir şekilde bölünerek ayrı iki nesne gibi görünmesini engellemek için kullanılır.

 Genişletme ˙işleme uygulanmış görüntü


 Görültü Yok Etme

Görüntü üzerinde filtreleme ve morfolojik işlmlerimizi yaptıktan sonra görüntü üzerinde kalan görültüleri temizlemek için AForge kütüphanesin BlobsFiltering yani damla filtreleme işlemini uygulayarak bizim verdiğimiz boyutlar dışında kalan bölgeleri temizledik. Burda genişliği 70 pixel, yüksekliği 40 pixel den küçük olan gürültüleri yok etmek için kullandım.

BlobsFiltering  uygulanmış görüntü
Görüldüğü gibi görüntü üzerindeki noktasal görültüler isteğimiz üzerine görüntüden silindi. Hemde bunu bir kaç satır kod ile hallettik.

Kod Parçası:
 
 Morfolojik işlemleri ve  bu işlemi isteğimiz sonuca ulaşıncaya dek tekrar tekrar görüntü üzerinde uygulamak zorundayız. Ben bir çok kez kullandım ve paylaşımın en altında görüntü olarak paylaşmaya çalışacağım. 


Plaka Çevresini Çizdirme Counter yöntemi

Gerekli işlemleri yaptıktan sonra elde ettiğimiz görüntünün üzerinde konum tespit etmek için plaka bölgesinin etrafını çizdireceğiz. Bu işlem için Aforge kütüphansinden yararlanacağız.




Görüldüğü gibi filtreleme işlemlerinin ardından elimizde kalan tek yer plaka bölgesidir. Bu bölgenin etrafını aşağıdaki kodlar yardımıyla çizdik.

 

Türkiye' deki araç plakalarının birçogunun görünümü dikdörtgen bir şekildedir. Bizde en son elde etmiş olduğumuz görüntünün yani etrafını yamuk bir şekilde çizmiş olduğumuz görüntüyü bir kere daha elden geçirmemiz lazım. yazni çizimimizi dikdörtgen yapmamız lazım.

 Dikdötgen ile çizdirme

Yukarıdaki şekilden de görüldüğü gibi uygulamıs olduğumuz çizim şekle göre şekillenmiştir. Biz düzgün bir dikdörtgen çizmek için en ve boydan büyük olanlara göre işlem yaptık. Yani ortaya çıkan geometrik tabiri ile çokgen veya yamuk da diyebiliriz bu şeklin karşılıklı kenarlarını karşılaştırdık ve büyük olanı küçük olana atadık. Bu şekilde çizimimiz dikdörtgen şeklini almış oldu.



Sınır değerlerini yeniden oluşturmamız için dizilerden yararlandık. Her bir sınır noktasını yani uç noktaları dizinin elemanlarına atadık.






Bulduğumuz pilaka bölgesinin etrafını temiz bir dikdörtgen elde ederek çizdik. Bu dikdörtgeni hemen altta görünen orjinal görütü üzerinde gösterdik.






Plaka olabilir mi ?

Bulmuş olduğumuz plaka bölgesinin plaka olabilir mi diye ön elemeden geçirmemiz şart.Türkiye’de kullanılan plaka boyutları ön taraf 11*52 arka taraf ise 21*32 boyutlarındadır. Biz burada ön taraf plaka boyutlarına göre işlem yaptık. Yani en/boy oranından yola çıkara belirli iki değer arasında kalan ortalamalar plaka olarak değerlendirildi ve görüntü üzerinde çizim yapıldı. Burada kullandığım oran ise 4 ile 6 arasında değişmektedir.







Sıra geldi bulmuş olduğumuz plakayı kesme işlemine. Bu işlemde oldukça basit ve bir kaç satır kod ile işlemimizi tamamlıyoruz.


  


Son olarak elde ettiğimiz görüntümüz yani plakamız kesimi sanal formumuzda gözükmektedir.






Form application arayüzümüz aşagıdaki gibidir





Uygulama sırasında gerçekleşen adımlar aşağıdaki gibi birbirini takip etmiştir.




Adımların daha rahat anlaşılabilmesi için  ekran çıktılarını aşağıdaki gibi listeledim. Umarım yardımcı ve bilgilendirici olmuşumdur.




Projemde OpenCv veya EmguCv kütüphanelerini kullanmadım. Sadece çizim ufak tefek yerlerde AForge kütüphanesini kullandım.


Görüntü işleme üzerinde veya bu alanda çalışma yapacak arkadaşlar kaynak kodlar :
https://github.com/burhanarslan/Automatic-number-plate-recognition












4 yorum:

  1. Gun oydin nasilsiniz ne bu program ishlamiyor ?

    YanıtlaSil
  2. bu projenin matlab kodları var mı elinizde?

    YanıtlaSil
  3. bu projenin matlap kodlarını verme gibi bir şansınız varmı?

    YanıtlaSil
  4. Burhan bey merhaba size ulaşmak istiyorum konuyla ilgili bir kaç sorum ve yardım talebim olucakta sizden rica etsem iletişime geçebilir miyiz

    YanıtlaSil