Matlab ile Plaka Tanıma Sistemi-1
Selam arkadaşlar,
Üniversitede yapmış olduğum bitirme projemi burada paylaşmak istedim. Detaylı olarak anlatacağımdan dolayı bütün raporu anlatmam biraz uzun sürecektir. Plaka tanıma sistemi üç aşamada gerçekleşmektedir. Araç plakasının yerinin tespit edilmesi ve kesilmesi, plakanın temizlenmesi ve karakterlerin bölütlenmesi, üçüncü aşama ise karakterlerin tanımlanması işlemidir.
1. Plakanın Yerinin Bulunması
Plakanın yerinin bulunması için çeşitli yöntemler bulunmaktadır. Projemde bunlardan biri olan kenar belirleme yöntemini kullandım. Burada dikkat edilmesi gereken plakanın sabit bir uzaklıktan çekilmiş olmasıdır. Aksi taktirde plakanın yerinin bulunması oldukça güçleşecektir. Çalışmalarımda 240x320 boyutlarındaki bir resim ile çalıştım. Bu resimler araca yaklaşık 4-6 metre mesafede çekilmiştir. 4-6 metre mesafede çekmeniz şart değil sadece programda gerekli yerleri değiştirmeniz gerekmektedir. 240x320 boyutunda ve 4-6 metre uzaklıktan çekilen aracın plakasının boyu yaklaşık olarak 25x85 boyutundadır.
Boyut kısmını geçtikten sonra resim üzerinde çeşitli işlemler uygulanmaktadır. Bunlar; Resmi siyah beyaz yapma ve kenar belirlenmesi için filtreler.
2. Görüntüde Filtreleme Operasyonları
Filtreleme adından da anlaşılacağı gibi görüntüde belirli ayrıntıların ayıklanması ya da daha belirgin hale getirilmesi vb. gibi operasyonları gerçekleştiren operatörlerdir. Farklı amaçlar için farklı filtreleme operatörleri mevcuttur.
Filtreler aslında çekirdek matris formundadır. Programda kullanılan Laplace operetörüdür ve Laplace operatörü her yönde keskinleştirme yapmaya yarar. Aşağıda laplace operatörünün matrisi yer almaktadır.
|
0 |
-1 |
0 |
|
-1 |
4 |
-1 |
|
0 |
-1 |
0 |
Bir resmi filtrelemek demek aslında filtre matrisini resim üzerinde gezdirmekten diyebiliriz. Örneğin yukardaki Laplace filtre matrisini resim üzerinde 3x3'lük pikseller şeklinde uygularız. Aşağıda ise i,j pikselin komşuluk ilişkisi yer almaktadır.
|
i-1,j-1 |
i,j-1 |
i+1,j-1 |
|
i-1,j |
i,j |
i+1,j |
|
i-1,j+1 |
i,j+1 |
i+1,j+1 |
Yukardaki matrisimiz bir resim olduğunu düşünebiliriz ve bu resmi filtrelemek için aşağıdaki işlemi yapmamız gerekir.
I(i-1,j)+I(i,j-1)+I(i,j+1)+I(i+1,j)-(4*I(i,j))
Burada I resim matrisimiz ve görüldüğü gibi birinci matrisimiz ile ikinci matrisimizin çarpılması sonucunda resmimizi filtrelemiş oluruz.
Hikaye kısmımızı anlattığımıza göre artık anlattığımız yere kadar kodları paylaşma zamanımız geldi sanırım
%Resim Alınıyor
f=imread('image/plaka6.png');
%Resmi 240x320 standart boyuta ayarlıyoruz.
KucukResim=imresize(f,[240 320],'nearest');
r1 = imadjust(KucukResim,[0.25 0.75], [0 1]);
%Laplacian Filtresi uyguluyoruz.
h=fspecial('laplacian');
r1=im2double(r1);
s=imfilter(r1,h,'replicate');
%%figure,imshow(s);%Resim Alınıyor
f=imread('image/plaka6.png');
KucukResim=imresize(f,[240 320],'nearest');,
r1 = imadjust(KucukResim,[0.25 0.75], [0 1]);
h=fspecial('laplacian');
r1=im2double(r1);
s=imfilter(r1,h,'replicate');
I=imcomplement(s);
n=319;
m=239;
%resmin kenarlarını belirleme
for j = 2:n
for i = 2:m
toplam=abs(I(i-1,j)+I(i,j-1)+I(i,j+1)+I(i+1,j)-(4*I(i,j)));
if toplam>1.5
b(i,j,:)=0;
else
b(i,j,:)=255;
end
end
end
max=0;
x=25;
y=80;
%%Plakanın yerinin bulunması
h=n-y;
t=m-x;
for j = 1:h
for i =1:t
sifir=0;
for k = 1:x
for l =1:y
if b(i+k,j+l)<1
sifir=sifir+1;
end
end
end
if sifir > max
max=sifir;
c=i;
d=j;
end
end
end
Öncelikle resmimizi açıyoruz. Filtreleri uyguladıktan sonra resmin kenarlarının bulunması işlemi yapıyoruz ve bu işlemi yaptıktan sonra göreceksiniz ki en yoğun bölüm plakanın bulunduğu yerdir. Plakanın bulunduğu yeri bulma işleminde aslında en yoğun 25x80 boyutundaki bir alanı bulmaya çalışıyoruz.
Resimde plakanın yerinin kesilmesi ve karakterlerin bölütlenmesi konulu bir sonraki yazımda görüşmek üzere.
Şuana kadar 2638 defa okundu.
16 Ağustos 2010, 12:34
benim de bitirme projem plaka tanımlama sistemi kaynak kodlarınızdan yararlanabilirmiyim…
11 Mayıs 2010, 21:45
merhabalar
ikinci kisim ne zaman gelebilir acaba bizde bu konu da bi projeye basladik karakter tanima bizimki.. henuz baslangictayiz, ornegin bir harf yazildi onu webcam ile aldik histogram esitlenerek binary sini de aldik sonra harfin yerini nasil tesbit edecegiz yani oradaki harfi bulup onu olcekleme nasil olacak….
tesekkurler….
09 Mayıs 2010, 20:36
Merhaba testlere uygun bir kod değil maalesef. Yeniz yazmış olduğum kod bitince sonuçları paylaşırım.
08 Mayıs 2010, 15:55
Selamlar,
Projeniz şu an ne aşamadadır acaba?
Sahada plaka tanıma yapabilirmi?
Size sahadan alınmış plaka jpeg resimleri göndersem bunlar üzerinde bir training yapıp sonuçlara bana yollayabilirmisiniz?
Eğer güzel sonuç alırsak ticari ürün haline getirebiliriz.
02 Mayıs 2010, 01:43
Pardon yorumunuzu gördüm fakat cevap veremedim. Plaka için siyah beyaz fotoğraflar var elimde. İşinize yarar ise upload edebilirim.
26 Nisan 2010, 22:54
RAmazan bey ,elinizde projemde kullanmak üzere plaka fotoğrafları var mı ?
24 Nisan 2010, 16:27
Merhaba,
Plakanın yerini bulduktan sonra karakterleri teker teker kesipte train yapmanız gerekiyor. Yakın zamanda karakter tanıma kısmı ile ilgili bir çalışmam olacak hem karakterleri gruplayarak otomatik öğretme, hem de karakterleri tanıma işlemi sizin iş ne kadar acil bilemiyorum. Bu arada plakanın yerini bulmak için hangi algoritmayı kullandınız acaba?
23 Nisan 2010, 18:03
>>merhabalar, bu olayı 3 değişik yöntem kullanarak yaptım fakat son yaptığım iyi oldu plakayı %100e yakın tesbit edebiliyor kullanılacağı yerde acaba bu harf tesbit olayını nasıl geliştirebiliriz Neural Network te bir dosya yaptım kendi içinde 0.9 noise verene kadar bile bulabiliyor rakamları doğru biçimde fakat benim plakadan getirdiklerimin şekli şemali azıcık farklı oluyor ve bu konuda sıkıntı yaşıyor acaba bunu çözmek için plakalardan karakter kesiptemi train etmeliyim teşekkürler
21 Şubat 2010, 12:41
Yazının ikincisi yayınlanmadı henüz. Resmi threshold yapıyoruz. Onun için for döngüsü ile resmi piksel piksel gezip maskeleme yapıyoruz. En yoğun noktayı yatay ve dikey histogram kontrolu ile bulabilirsin. Plakanın yerini bulduktan sonra Matlab’da crop komutu bulunmakta bu komutu kullanarak resmi kesebilirsiniz(http://www.mathworks.com/access/helpdesk/help/toolbox/images/imcrop.html). Plaka tanıma’da araçların uzaklığı önem taşımaktadır. pikseli bulduktan sonra aracın resimdeki uzaklığına göre plakanın yükseklik ve genişlik değerlerini vermeniz gerekiyor. Onları ayarlayabilirseniz düzenli bir şekilde çıkacaktır.
Son olarak, Kara yani sizin yorumlarınızı hiç onaylanmamıştı. Bunun sebebi ise yazmış olduğunuz yazı istenmeyen yorumlara takılmış ve yeni fark ettim.
20 Şubat 2010, 20:52
görmüyormusunuz yoksa yazdıklarımı umursamıyorsunuz ? çünkü kara isimli biri yazmıştı benden önce onun mesajlarının silinmiş olduğunu gördüm
19 Şubat 2010, 18:52
ben bu uygulamayı denedim ve plakayı çok yüzdesiz bir biçimde buluyor acaba neden?
17 Şubat 2010, 23:21
ki tek pixel buluyoruz peki buradan plakayı nasıl kesebiliriz biraz açıklama yapılabilirmi acaba bu konuyla alakalı
17 Şubat 2010, 23:17
Birde bu en yoğun noktayı tek pixel olarakmı buluyoruz yani aslında harflerden birtanesinin üzerinde bir noktamı bulacağız çünkü gerekli filtrelemeden sonra harfler dışında plaka üzeri temizlendi.
17 Şubat 2010, 23:10
burada resim kenarları belirlemedeki for döngüsünün amacı nedir görüntüyü etrafındakilerden çıkarıp 1.5 ten büyükse siyah değilse beyaz veriyoruz da buna ne tip bir gereksinim var edge bulmadımır amacımız daha açıklayıcı olabilirmisin o kısımla ilgili.yoksa tam olarak ne yapmaya çalışıyoruz orada sonradan taratırken yoğunluğu illa w/b image üzerindemi incelemek gerekir?
17 Şubat 2010, 21:06
Bunun 2.si yayınlandımı acaba çok güzel bir şekilde açıklanmış fakat 2.sini bulamadım sitede
09 Ocak 2010, 19:30
Öznur maalesef elimde bulunan dökümanı kaybettim harddiskimin bozulmasından dolayı. Şuan bu konu üzerinde geliştirdiğim proje mevcut ondan dolayı bu konuda yakın zamanda olmasa da yazılarım devam edecektir. Projende başarılar.
23 Aralık 2009, 20:51
elinize, emeğinize sağlık. güzel bir çalışma olmuş..
benim de dönem sonunda “matlab programı ile plaka tanıma” konulu araştırma projesi teslim etmem gerek..kaynak bulabiliyorum ama çalışma prensibini tam olarak anlamam için kodlara da ihtiyacım var..mümkünse bu konudaki çalışmanızın tamamını paylaşırmısınız?
şimdiden teşekkür ediyorum..çalışmalarınızda başarılarınızın devamını diliyorum..
20 Aralık 2009, 23:15
Merhaba Emel, Emrah Üstün’ü bir yazısında lastik izi tanımayı anlatmıştı. O yazı sizin işinize daha çok yarayacağı kanaatindeyim. Yazıyı buradan okuyabilirsiniz. http://www.emrahustun.com/goruntu-isleme-ile-lastik-izi-tanima/182
Kolay gelsin…
20 Aralık 2009, 20:36
ELLERİNİZE SAĞLIK GÜZEL BİR ÇALIŞMA.BENİM BİR SORUM OLACAK BENİM PROJEM LASTİK İZİ TANIMLAMA ACABA YAZDIĞINIZ AÇIKLAMALAR ŞEKLİNDE Mİ İLERLEYECEĞİM PROJE OLUŞUMUNDA ?
09 Kasım 2009, 10:52
Yüz tanıma için aynı yapı tam olarak kullanılabilir diyemem. Yüz tanıma için hiç uğraşmadım açıkçası ama plaka tanıma sistemi için uğraşırken epey örnek görmüştüm ve yüz tanımada da benzer algoritmalar bulunmaktaydı. Çok güzel bir açık kaynak kodlu bir uygulama bulmuştum zamanında ama maalesef arşivimde bulamadım.
08 Kasım 2009, 01:02
bir sorum var bu yöntemi yüz tanımada kullansak ne kadar başarılı oluruz.
08 Kasım 2009, 01:01
benim bir sorum var acaba yüz tanımadada bu yöntemi kullansak olur mu?
18 Ekim 2009, 00:22
peki bu işlemi yüz tanımada yapsaydık nasıl yapardık..
10 Ekim 2009, 17:02
bu site için teşekkürler
beniğm bir ricam olacaktı bu yazının devam etmesi yada dökümanın bana ulaşması mümkünse memnun olurum
bitirmeye bu konuyu aldım ama sıfırım döküman konusunda sıkıntı çekiyorum ödevinizi alabilirsem yararlanmak istiyorum.
25 Eylül 2009, 20:03
Anlatım için teşekkürler
Yazının devamını bekliyorum
Selamlar