Görüntü işleme ile lastik izi tanıma
|
2005 Yaz staj raporum. Kocaeli Üniversitesi Elektronik ve Haberleşme Mühendisliği İşaret ve Görüntü İşleme Laboratuarı. Tüm katkılarından ve yardımlarından dolayı Sarp Ertürk, Oğuzhan Urhan ve Kemal Güllü’ye teşekkür ederim.
GİRİŞGörüntü işleme ile lastik izi tanıma projesinin açıklaması Bu projede Matlab 6.5 uygulaması ile çeşitli program algoritmaları kullanarak lastik izi tanımlaması yapılacaktır. Program bir fotoğraftaki lastik izinin yerini tespit edecek, lastik izindeki olukların ve blokların dizilimine göre daha önceden hazırladığımız veri bankası ile karşılaştıracak ve o fotoğraftaki lastik izinin markasını, modelini tahmini olarak belirleyecek. Veri bankasında birçok lastik izinin yapısal bilgileri, markaları, modelleri bulunmaktadır. Pratik olarak eşleme testlerinde ele alınan noktalar şunlardır: Olukların açıları, blok genişlikleri, zigzaglı yapı, baskın yapı, dikey oluklar, yatay oluklar vb… Nerelerde kullanılır? Kullanım alanı genelde kriminal vakalardır. Herhangi bir polisiye vakada olay yerindeki lastik izlerinin marka model tespiti davanın sonuçlarını büyük oranda etkileyecektir. Bunun dışında bu programı lastik üreticileri kalite kontrolde kullanabilir. Lastik izi tanımlamada görüntü işleme ve kimyasal analizin farkı Kimyasal analiz ile lastik izi tanımlama şu anda kriminal laboratuarları tarafından kullanılan en yaygın yöntemdir. Bu yöntemde beton veya asfalt gibi sert yüzeylerde yapılan frenlerin yüzeyde bıraktığı fiziksel kalıntının analizi yapılır. Yerden alınan lastik kalıntılarının karbon ve çeşitli element analizlerinden lastiğin yapısına ve yaşına ulaşmak yaklaşık olarak mümkündür. Ne var ki bu yöntem sadece sert yüzeylerde yapılan frenlerde kullanılabiliyor. Görüntü işleme ile yapılan tanımlama ise yumuşak ortamlarda kullanılabiliyor. Aracın kum, toprak, çamur gibi yumuşak yüzeyden geçmesi sonucu lastik bu yüzeyde iz yapacaktır. Bu izin resminin çekilip, sayısallaştırılıp, programa verilmesi sonucunda bu lastiğin markası ve modeli tespit edilecektir. Şartları Bu programın çalışabilmesi için lastik izinin çekildiği yerdeki ışıklılık oldukça önemlidir. Işığı dik açıyla alan, lastik iziyle ilgisi olmayan gölgeleri barındırmayan bir fotoğraf çekilmelidir. Bunun dışında izin içinde taş gibi bir tepecik ve bir oyukluk olması gerçek marka, model tahmine yaklaşma olasılığını düşürür. LASTİKLERİN YAPILARIBu projede lastiklerin yapısal olarak değerlendirilecek özellikleri şunlardır: Simetriklik, genel yapı, merkez özelliği, çevresel oluklar, ana bloklar, yatay çıkıntılar. Bu özellikler lastikleri birbirinden ayıran özelliklerdir. Simetriklik Sağ ve sol tarafları aynı olan lastiklerdir.
Genel yapı
Merkez özelliği Lastiğin orta kısmında bloklar olabilir, oluklar olabilir
Çevresel oluklar Düz, kavisli, zigzag
Ana bloklar Lastiğin merkezi etrafına dağılmış ana blokların şekil özellikleri.
Yatay çıkıntılar
* Yapacağım testler her lastiğin niteliğini bu özellikler bazında bulmaya yönelik olacaktır. MATLAB’TA GÖRÜNTÜ İŞLEME*Her programın başına kolaylık olması amacıyla şu satırları yazacağım: clear all; (kaydedilmiş bütün değişkenleri siler) close all; (Matlab ve komut penceremiz dışındaki bütün pencereleri kapatır.örn: grafik, imge) clc; (ekranı temizler) Lastik izi içeren imgeyi Matlab’ta açmakBir imgeyi Matlab’ta açmak, imgenin renk ve ışıklılık bilgilerini, Matlab’ta bir matrise atmak anlamına gelir. Örneğin her kutucuğun bir pikseli ifade ettiği aşağıdaki 9 piksellik imgenin Matlab’taki matrise dökülmüş hali yanındaki gibidir.
8 bitlik bir BMP formatlı siyah-beyaz bir imgede siyahı 0, beyazı 255 temsil eder. Arasındaki değerler ise geri ve tonlarıdır. İskelet çıkarmak İlk olarak kalın blokları incelterek vektör haline getirmeye çalıştım. Bunu Matlab’ın hazır fonksiyonu olan bwmorhp’un iskelet özelliği ile yaptım. Kendi çizdiğim lastik izine (şekil2) aşağıdaki programı uygulayıp şekil 3 teki vektörel izleri elde ettim. imge=imread(’lastik.bmp’); cikis = bwmorph(imge,’skel’,Inf);
İmgeyi lojik hale getirmek İmgedeki her pikseli 1 veya 0 değerli hale getirmektir. Bunun için bir eşik değer belirledim. Belli bir ışıklılık değerinin altındaki pikselleri 1 ve üstündekileri 0 yaptım. Böylece lastikteki karanlık yerler (gölgede kalan oluklar, girintiler) beyaz, diğer düz yüzeyler siyah oldu. Bu bana çalışmada kolaylık sağladı.
I=imread(‘HPIM4621.jpg’); imge=rgb2gray(I); birli=(imge<113); Bu programda imgeyi açtıktan sonra Matlab’ın hazır fonksiyonu olan rgb2gray kullanılarak imge siyah beyaz hale getirilmiştir. Denemelerden sonra bu imge için eşit değeri 113 bulunmuştur. Konvolusyon Konvolusyonda bir pikselin değeri çevresindeki piksellerin ağırlıklı ortalamasıyla bulunur. Konvolusyon örneği: I=imread(’HPIM4603.JPG’); imge=rgb2gray(I); kernel = [-1 -1 -1;-1 10 -1;-1 -1 -1]; filt=conv2(imge,kernel);
Kernel oluşturmak Birler kerneli: ones(boyut); Sıfırlar kerneli: zeros(boyut);
Filtre oluşturmak Matlab’ın hazır fonksiyonu olan fspecial bize istediğimiz filtre matrisini oluşturur. ‘average’ ortalama ‘disk’ dairesel ‘gaussian’ Gauss alçak geçiren ‘laplacian’ 2 boyutlu Laplas ‘log’ Gauss filtresinin laplası ‘motion’ hareket filtresi ‘prewitt’ Prewitt yatay kenar bulma ’sobel’ Sobel yatay kenar bulma ‘unsharp’ keskinlikleri yok etme, yumuşatma ‘average’ örneği: I=imread(’HPIM4603.JPG’); imge=double(rgb2gray(I)); kernel = fspecial(’average’,10); filt=conv2(imge,kernel); Burada ‘average’ kullanarak 10×10 luk bir filtre matrisi oluşturduk. Daha sonra imgemizle convolusyona soktuğumuzda şekil 8 deki imgeyi elde ettik.
‘disk’ örneği clear all;close all; I=imread(’HPIM4603.JPG’); imge=double(rgb2gray(I)); kernel = fspecial(’disk’,4); filt=conv2(imge,kernel); Bu programda bir matris içinde yarıçapı 4 olan daire oluşturulmuştur. Matrisin boyutu 2*yarıçap+1 dir.
‘motion’örneği I=imread(‘HPIM4603.JPG’); imge=double(rgb2gray(I)); kernel = fspecial(’motion’,100); filt=conv2(imge,kernel); Burada imgeyi 1×101 lik hareket filtresi matrisi ile konvolusyona sokuyoruz.
10’luk hareket filtresi matrisi : 0.0500 0.1000 0.1000 0.1000 0.1000 0.1000 0.1000 0.1000 0.1000 0.1000 0.0500
Morfolojik işlemler Yapısal işlemlerdir. İmge içerisindeki şekiller üzerinde yapılan açma(opening), kapatma(closing) işlemleridir. Açma şekli büyütür, kapatma küçültür. Şekle dayalı görüntü işlemede çok kullanılan bir yöntemdir. Açma işlemi
Kapatma işlemi
Oluk tespiti Olukların tespiti için denediğim bir yöntem: I=imread(‘HPIM4603.JPG’); imge=double(rgb2gray(I)); kernel = fspecial(’motion’,100); filt=conv2(imge,kernel); birli=255*(filt<70); BW3 = bwmorph(birli,’skel’,Inf); kernel2=ones(20,1); i4=conv2(BW3,kernel2); kernel3=ones(1,300); i5=imerode(i4,kernel3);
*Üzerinde çalıştığımız lastik merkez oluklu ve çevresel olukları baskın, 3 oluklu bir lastiktir ki şekil 17’de bunların yeri tespit edilmiştir. Blokların tespiti için denediğim başka bir yöntem: clear all;close all; imge=(rgb2gray(imread(’HPIM4621.jpg’))); [w,h]=size(imge); kernel=fspecial(’motion’,h); yatay=imfilter(imge,kernel); yataylojik=(yatay>(mean(mean(yatay)))); kernel=ones(1,h); yatayyay=imdilate(yataylojik,kernel); yatayyay1=(yatayyay==0); etiketyatay=bwlabel(yatayyay1,8); if yatayyay1(1,1)==1 yatayyay1=yatayyay1.*(~(etiketyatay==1)); end if yatayyay1(w,h)==1 yatayyay1=yatayyay1.*(~(etiketyatay==max(max(etiketyatay)))); end iskelet= bwmorph(yatayyay1,’skel’,Inf); dizi=(iskelet((1:w),((h/2):(h/2))))’; [wdizi,hdizi]=size(dizi); adet=0; for i=1:hdizi adet=adet+dizi(i); end bosluk=zeros(1,adet); c=1; for i=1:hdizi if dizi(i)==1 bosluk(c)=i; c=c+1; end end oran=0; for i=1:(adet-1) oran(i)=(bosluk(i+1)-bosluk(i))/(bosluk(adet)-bosluk(1)); end oran
Etiketleme Etiketleme sadece 1 ve 0’lardan oluşan imgelerde 1 kümelerine sırayla değer vermektir. Yani 1. 1’ler kümesindeki pikseller 1, 2. 1’ler kümesindeki pikseller 2, 3. 1’ler kümesindeki pikseller 3… değerini alır. Örnek
Bu yöntem morfolojik çalışmada çok kullanışlıdır. İmgenin 1,2,3 içeren şekillerini ayrı ayrı çağırabiliriz. Örnek olarak imge==3 komutu bize şekil 27’yi gönderir.
Eğri uydurma Lastikteki bir ize polinom benzeteceğiz. Böylece o izin verileri elimizde imge olarak değil, polinom katsayısı olarak bulunacak. Böylece izler üzerinde işlem yapmak çok daha kolaylaşacak. Bu iş için polyfit ve polyval fonksiyonlarını kullanacağız. polyfit ve polyval fonksiyonları nasıl çalışır? Polyfit fonksiyonuna 3 eleman veririz. Bunlar; değer dizisi , sıra dizisi, kat. Örnek a=[2 3 5 10 15 20 30 40 50 55]; b= 1:1:10; fit=polyfit(b,a,2); deger=polyval(fit,b); figure;plot(a,b,’o',deger,b);
İmgeye polinom uydurmak Bir imgeye polinom uydurmak için 1 olan pikselleri tespit edip bu piksellerin satır, sütun bilgilerini polyfit’e göndermemiz gerekir. [w,h]=size(imge); c=1; for i=1:w for j=1:h if imge(i,j)==1 b(c)=w-i;a(c)=j; c=c+1; end end end
*Şekil 27’de her bir beyaz kara 1 değeri içeren 1 pikseli göstermektedir. Bu imgede1600 kat yakınlaştırma vardır.
Yatay çıkıntılara polinom uydurmak Yukarıda gösterdiğimiz polyfit fonksiyonunu kullanarak yatay çıkıntılara polinom uyduracağım. (benim üzerinde çalıştığım imgede dikey çıkıntılar) I=imread(’HPIM4603.JPG’); imge=double(rgb2gray(I)); [w,h]=size(imge); kok=10; isiklilikdegeri=mean(mean(imge)); kernel = fspecial(’sobel’)'; filt=imfilter(imge,kernel); birli=(filt>isiklilikdegeri); morph = bwmorph(birli,’skel’,Inf); etiket=bwlabel(morph,8); [w1,h1]=size(etiket); etiketmax=max(max(etiket)); etiketsay=zeros(1,etiketmax); for i=1:w1 for j=1:h1 for k=1:etiketmax if etiket(i,j)==k etiketsay(k)=etiketsay(k)+1; end end end end for i=1:etiketmax if etiketsay(i)==(max(max(etiketsay))) maxdegeri=i; end end tara=(etiket==maxdegeri); [w2,h2]=size(tara); c=1; for i=1:w2 for j=1:h2 if tara(i,j)==1 b(c)=h2-i;a(c)=j; c=c+1; end end end fit=polyfit(b,a,kok); deger=polyval(fit,b);
Uydurulan polinom: 1.0e+003 * 0.0000 -0.0000 0.0000 -0.0000 0.0000 -0.0000 0.0001 -0.0032 0.0609 -0.6762 3.3380 *Yapılan denemeler sonucunda bu iz için en uygun polinom katının 10 olduğu tespit edilmiştir. YORUM VE EKLEMELERBu raporda stajım boyunca lastik izi tanımlama projesi içinde gerek öğrenmek gerek sonuca ulaşmak amaçlı denediğim, öğrendiğim, başarılı olduğum, başarısız olduğum yöntem ve algoritmaları örnek resim ve grafiklerle sundum. Projem bitmediği için proje-1 olarak bu dönem projeme devam edeceğim. Farklı yöntemleri denemeye devam ediyorum. Şu anda piksel takip yöntemiyle iz belirleme üzerinde çalışıyorum. Genel olarak yöntemim ise raporun başında anlattığım, lastikleri birbirinden ayıran özelliklerin incelenmesi olacak. Bunu tahminen polinom uydurma ve piksel takip yöntemi ile yapacağım. Kocaeli Üniversitesi Elektronik ve Haberleşme Mühendisliği İşaret ve Görüntü İşleme Laboratuarında yaptığım yaz stajımın çok faydalı olduğu rapordan görülebilir. Zira staja başlamadan önce imge işleme hakkında bilgi sahibi değildim. Altı haftada bu seviyeye geldim. |





























































24 Eylül, 2007 saat 00:36
[...] ders. İlk kez alıyorum. Çok rahat geçerim. Daha önce çok çalışma yaptım bununla ilgili. örnek, örnek, [...]
30 Eylül, 2007 saat 12:10
slm sanırımm sen bayağı bilgilsn bu konuda ben görüntü işleme dersii için araştırma yapıyodum da
desen tanıma(pattern recognition) konusunda bi bilgn varsa benle paylaşabilr misin acaba?sağol.
30 Eylül, 2007 saat 13:10
konuyu tam olarak bilmeden pek birşey söyleyemem ama temel olarak yapman gereken şey (benim de bu projede yaptığım gibi) matematiksel modelleme olacak.
önce kenar tespiti yapabilirsin (birçok kenar tespit yöntemi var, çalıştığın konuya göre seçilmeli) sonra bulduğun kenarlara polinom uydurabilirsin. Bu tabi bize %100 kesinlik vermeyecek. Biraz sapma ile en yakın polinomu bulup karşılaştırmalar yapacaksın yaklaşık olarak bir sonuç elde edeceksin…
kolay gelsin.
16 Ocak, 2008 saat 17:44
bu konuda bu kadar bilgin olması gerçekten güzel… bende image processing dersini yeni alıyorum. bir konu hakkında proje yapmam gerekiyor. bana fikir verebilecen bir konu varmı acaba?
16 Ocak, 2008 saat 18:01
bizim daha önceki imge işleme dersi ödevlerine bir göz at istersen.
şurada ve şurada.
kolay gelsin.
16 Ocak, 2008 saat 18:24
teşekkürler. Yine birşey olursa sorarım artık..:)
1 Şubat, 2008 saat 11:32
bir görüntüde kaç adet nesne olduğunu tespit eden bir Matlab kodunu nasıl yazabilriz?
1 Şubat, 2008 saat 11:33
Ve birde bir görüntüde kaç adet yüzey olduğunu tespt eden bir Matlab kodunu nasıl yazabilriz?
4 Mart, 2008 saat 00:55
slm. ben proje olarak lastik izi tanimayi aldim. ve isin henuz baslangicindayim. senin de belirttigin gibi birçok lastik izinin yapısal bilgileri, markaları, modelleri bulunduran veri bankasina ihtiyacim var.bu konuda yardimci olabilirsen sevinirim..
4 Mart, 2008 saat 01:10
yardımcı olmak isterdim ama üzerinden 3 yıl geçtiği için elimde hiçbir doküman kalmadı. bu projeyle ilgili sadece burada yayında olan rapor kaldı.
ben zamanında nasıl bulduğumu söyliyeyim,
internetten birçok araştırma yaptım, sırf bu işle uğraşan şirketler var. yabancı tabi. hepsine eposta gönderdim. belki 100 kişiye gönderdim. bundardan 3-5 tanesi cevap verdi. 1 tanesi (zannediyorum bulgaristanda bir şirket) dünyadaki tüm lastik izlerinin veritabanını tutuyormuş ve bunları satıyormuş. (şirketi işi bu, çok ilginç değil mi) ben projemden bahsetmiştim, amcalar bana “sample cd” gönderdiler öğrenciyim diye. 1000 tane falan vardı içinde, dahasını satarız dediler.
ama sana önerim şu (ben şimdi keşke öyle başlasaymışım diyorum)
lastik izi araştırmaktansa elinle bir tane kaba birşey çiz onun üzerinde çalış. çünkü verimli bir lastik imgesi bulmak çok zor. ışıklılık yetersiz gelecek, gölgöler olacak falan filan. zamanımın çoğunu onlara harcamıştım ben. halbuki elimle çizseydim gölgeleri tespit etmek gibi bir derdim olmayacaktı.
ve tabi ana algoritman bu yazının başında anlattığım gibi lastik yapılarını karşılaştırmak olmalıdır.
bir sıkıntı olursa elimden geldiğince…
iyi çalışmalar, kolay gelsin…
5 Mart, 2008 saat 16:12
herseyden once yardimin icin saol. bu proje benim bitirme projem ve veremezsem okulum uzayacak. elinde projeyle ilgili dokumanin kalmadigini soylemissin. su bahsettigin CD ye bir goz atsan inan proje icin buyuk katki yapmis olacaksin. cunku elimde lastik verileri olmadan projeye baslayamiyorum ve mayisin sonunda teslim etmem gerekiyor. ayrica matlabi da bu projeyle ogrenicem diyebilirim yani zaman su asamada cok onemli.
lastik izlerini elinde ciz demissin ama hoca sanirim kabul etmez cunku uygulanabilirlik uzerinden projeyi vermisti.
sen bu verileri ararken kriminal polis laboratuvarindan istemismiydin (tanidigin yoksa muhtemelen vermeyeceklerdir ama)
ilgin ve yardimlarin saol
6 Mart, 2008 saat 00:35
elimde cd de yok. olsa direk gönderirdim sana kargoyla falan. hiçbir şey yok elimde gerçekten.
şimdi diyorum ki, elinle çizip algoritmayı geliştir daha sonra lastik fotoğrafları üzerinde çalışırsın. ben ilk başta direk sanayideki lastikçilere gitmiştim lastik fotoğrafı çekmiştim birsürü. Ama sorunlar çıkmıştı, ışıklılık, gölge. Mesela burada şekil 4′ten şekil 5′e geçişe bakarsan verimsizliği göreceksin. İşte benim projemi yetiştirememin sebebi bu olmuştu.
Sen beni dinle, elinle çiz, algoritmanı çıkar sonra geçersin gölgöle ışıklı lastik fotoğrafına.
diğer soruya cevap, ben polis kriminal laboratuvarlarından istemedim, vermezler tabiki. özel kriminal araştırmalar yapan laboratuvarlar vardı onların bile bir kısmı cevap vermişti işte.
Ama şunu hatırlıyorum, “tire track” yazınca çıkan ilk birkaç yüz sonucu da incelemişimdir, başka aramalar da yaparak binlerce site gezmişimdir…
21 Mart, 2008 saat 13:33
[...] yazı. Kulis‘te stajdayız. Benim projem için lastik fotoğrafına ihtiyacım vardı. Yılmazla okulun karşısındaki sanayiye [...]
27 Mart, 2008 saat 23:52
Slm Emrah ben hala lastik verilerini bulmak icin ugrasiyorum (yada zaman kaybediyorum). En son yazdigin mesaj okunamiyor. verilerle mi ilgili merak ettim