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

Simetrik Genel yapı

Simetrik değil

Bloksal

Oluksal

kavisli. oluklar olabilir Merkez bloklu Çevresel oluklar Düz. zigzag Merkez oluklu Düz kavisli .Pürüzsüz Kıvrık Merkez özelliği Lastiğin orta kısmında bloklar olabilir.

zigzag Ana bloklar Lastiğin merkezi etrafına dağılmış ana blokların şekil özellikleri. L şekilli dörtgen s şekilli Yatay çıkıntılar v şekilli .

imgenin renk ve ışıklılık bilgilerini.Düz Eğri * Yapacağım testler her lastiğin niteliğini bu özellikler bazında bulmaya yönelik olacaktır. Bunu Matlab’ın hazır . Arasındaki değerler ise geri ve tonlarıdır. (ekranı temizler) Lastik izi içeren imgeyi Matlab’ta açmak Bir imgeyi Matlab’ta açmak. 0 255 255 255 0 255 255 255 0 Şekil 1 Tablo 1 8 bitlik bir BMP formatlı siyah-beyaz bir imgede siyahı 0. İskelet çıkarmak İlk olarak kalın blokları incelterek vektör haline getirmeye çalıştım. imge) clc. (kaydedilmiş bütün değişkenleri siler) close all.örn: grafik. Matlab’ta bir matrise atmak anlamına gelir. MATLAB’TA GÖRÜNTÜ İŞLEME *Her programın başına kolaylık olması amacıyla şu satırları yazacağım: clear all. Ö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. (Matlab ve komut penceremiz dışındaki bütün pencereleri kapatır. beyazı 255 temsil eder.

bmp’). cikis = bwmorph(imge. Şekil 2 İmgeyi lojik hale getirmek Şekil 3 İmgedeki her pikseli 1 veya 0 değerli hale getirmektir. Şekil 4 I=imread(‘HPIM4621. Kendi çizdiğim lastik izine (şekil2) aşağıdaki programı uygulayıp şekil 3 teki vektörel izleri elde ettim. diğer düz yüzeyler siyah oldu. imge=imread(‘lastik. Böylece lastikteki karanlık yerler (gölgede kalan oluklar. imge=rgb2gray(I).fonksiyonu olan bwmorhp’un iskelet özelliği ile yaptım.jpg’).’skel’.Inf). Şekil 5 . Bunun için bir eşik değer belirledim. Bu bana çalışmada kolaylık sağladı. girintiler) beyaz. birli=(imge<113). Belli bir ışıklılık değerinin altındaki pikselleri 1 ve üstündekileri 0 yaptım.

Bu programda imgeyi açtıktan sonra Matlab’ın hazır fonksiyonu olan rgb2gray kullanılarak imge siyah beyaz hale getirilmiştir. kernel = [-1 -1 -1.-1 10 -1. ‘average’ ortalama . Konvolusyon Konvolusyonda bir pikselin değeri çevresindeki piksellerin ağırlıklı ortalamasıyla bulunur. Filtre oluşturmak Matlab’ın hazır fonksiyonu olan fspecial bize istediğimiz filtre matrisini oluşturur. filt=conv2(imge.kernel). Sıfırlar kerneli: zeros(boyut).-1 -1 -1]. imge=rgb2gray(I). şekil 6 Kernel oluşturmak Birler kerneli: ones(boyut).JPG’). Konvolusyon örneği: I=imread(‘HPIM4603. Denemelerden sonra bu imge için eşit değeri 113 bulunmuştur.

Şekil 7 ‘disk’ örneği clear all.JPG’).‘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.10). Burada ‘average’ kullanarak 10×10 luk bir filtre matrisi oluşturduk.kernel). filt=conv2(imge. Daha sonra imgemizle convolusyona soktuğumuzda şekil 8 deki imgeyi elde ettik. imge=double(rgb2gray(I)). kernel = fspecial(‘average’.close all. Şekil 8 .

imge=double(rgb2gray(I)). Bu programda bir matris içinde yarıçapı 4 olan daire oluşturulmuştur.JPG’).kernel). Burada imgeyi 1×101 lik hareket filtresi matrisi ile konvolusyona sokuyoruz. Şekil 9 ‘motion’örneği I=imread(‘HPIM4603. kernel = fspecial(‘motion’. imge=double(rgb2gray(I)). filt=conv2(imge. Matrisin boyutu 2*yarıçap+1 dir.4). kernel = fspecial(‘disk’.kernel). .100).JPG’).I=imread(‘HPIM4603. filt=conv2(imge.

1000 0.0500 0.Şekil 10 10’luk hareket filtresi matrisi : 0.1000 0.0500 Morfolojik işlemler Yapısal işlemlerdir. İmge içerisindeki şekiller üzerinde yapılan açma(opening).1000 0.1000 0. kapatma küçültür.1000 0. Açma işlemi . kapatma(closing) işlemleridir.1000 0.1000 0. Açma şekli büyütür. Şekle dayalı görüntü işlemede çok kullanılan bir yöntemdir.1000 0.1000 0.

kernel2=ones(20.Inf).Kapatma işlemi Oluk tespiti Olukların tespiti için denediğim bir yöntem: I=imread(‘HPIM4603. i4=conv2(BW3.’skel’.100).JPG’).300). kernel3=ones(1.kernel2). kernel = fspecial(‘motion’. BW3 = bwmorph(birli.kernel). filt=conv2(imge.1). birli=255*(filt<70). imge=double(rgb2gray(I)). .

Bu filtreyi imgemizle konvolusyona sokuyoruz. Şekil 14 • • • Şekil 13 Şekil 14 Bwmorhp kullanarak iskelet çıkarıyoruz.i5=imerode(i4. ( imgenin eni 400 piksel. Bu değeri 300 piksel olarak kabul edelim. Denemelerden sonra en uygun eşik değeri 70 olarak bulunmuştur. Yani baskın olukların vektörlerini buluyoruz. İmgemiz 299×400 boyutlarındadır. uzun bloklar 300 pikseli geçer) Ancak elimizdeki imge sadece vektörlerden oluşan bir imge olduğu için en ufak bir eğim sonucu hataya götürür. Filtrenin boyutu denemelerden sonra en uygun olan 100 seçilmiştir.kernel3). Şekil 16 . Bu hassasiyeti önlemek için iskeletleri içeren imgeye 20×1 lik bir matris ile boyuna açma uyguluyoruz ve daha sonra yatay konvolusyona sokuyoruz. Uzun blokların tespiti için ise bir değer belirleyip o değerden uzun olanları alıyoruz. Bize lazım olansa uzun bloklardır. Şekil 15 Bu işlem lastiğin dış kenarlarını ve küçük kıvrımları da almaktadır. Şekil 12 • • • Şekil 11 Şekil 12 100 elemanlık bir hareket filtresi oluşturuyoruz. Şekil 13 Oluşan imgeyi lojikleştiriyoruz. • İmgemizi Matlab’ta açıp siyah – beyaz hale getiriyoruz.

h). Şekil 17 Şekil 17 *Üzerinde çalıştığımız lastik merkez oluklu ve çevresel olukları baskın. [w.close all. yatayyay1=(yatayyay==0). if yatayyay1(1. yatay=imfilter(imge.h]=size(imge). yatayyay=imdilate(yataylojik.h). kernel=fspecial(‘motion’. imge=(rgb2gray(imread(‘HPIM4621.8). Blokların tespiti için denediğim başka bir yöntem: clear all.kernel).kernel). yataylojik=(yatay>(mean(mean(yatay)))).• Şekil 15 Şekil 16 Sonuçta uzun blokların bulunduğu bölgelerin 1 olduğu bir imge elde ediyoruz. etiketyatay=bwlabel(yatayyay1. 3 oluklu bir lastiktir ki şekil 17’de bunların yeri tespit edilmiştir.jpg’))).1)==1 . kernel=ones(1.

*(~(etiketyatay==1)). end oran . c=1. end end oran=0. [wdizi.Inf).*(~(etiketyatay==max(max(etiketyatay)))).h)==1 yatayyay1=yatayyay1. for i=1:(adet-1) oran(i)=(bosluk(i+1)-bosluk(i))/(bosluk(adet)-bosluk(1)).((h/2):(h/2))))’.’skel’. for i=1:hdizi adet=adet+dizi(i). dizi=(iskelet((1:w).yatayyay1=yatayyay1. for i=1:hdizi if dizi(i)==1 bosluk(c)=i.adet). c=c+1. end if yatayyay1(w. end iskelet= bwmorph(yatayyay1.hdizi]=size(dizi). adet=0. end bosluk=zeros(1.

• • İmgemizi Matlab’ta açıp siyah – beyaz hale getiriyoruz. Şekil 21 • • Şekil 20 Şekil 21 Elde ettiğimiz imgede 1’leri 0. Şekil 22 Bwmorhp kullanarak iskelet çıkarıyoruz. bu sefer imfilter kullanıyoruz. Şekil 18 Şekil 19 • • mean(mean(yatay)) ile imgenin ortalama ışıklılık değerini buluyoruz. Şekil 20 1xh boyutlarında 1’lerden bir Kernel matrisi oluşturuyoruz ve imgeyi bu kernelle yayıyoruz. 0’ları 1 yaparak renkleri ters çeviriyoruz. Ve Şekil 19’u elde ediyoruz. üstündekileri 1 yaparak imgeyi lojikleştiriyoruz. Şekil 23 . Diğer yöntemdeki gibi konvolusyon değil. Bu ışıklılık değerinin altındaki piksellerin değerini 0. Böylece 1 değeri içeren her satır 1 değerini almış oluyor. Şekil 18 İmgemizin eninin piksel adeti uzunluğunda (h) bir hareket filtresi oluşturuyoruz.

ve 2. 1’ler kümesindeki pikseller 3… değerini alır. Bunu için ilk (1. en alttaki çizgiler (en üstte olması da mümkündür) lastik oluğu değildir. Etiketleme Etiketleme sadece 1 ve 0’lardan oluşan imgelerde 1 kümelerine sırayla değer vermektir.h) piksellere bir test yapıyoruz. 2. aralığın oranı: 0. Bunun için şekil 23 kullanılacak. aralığın oranı: 0. son pikselin değeri 1 ise son etiketi çıkarırız ki bu fotoğraf çekilirkenki ışıklılığın uygun olmadığını göstermektedir. 1’ler kümesindeki pikseller 2. Bunları göz önüne almamamız gerekmektedir.• • • • Şekil 22 Şekil 23 Şekil 21 ve şekil 22’ de görülen. siyahlar piksellerin değeri 0. Yani 1. Yapacağımız testte ilk pikselin değeri 1 ise ilk etiketi.4914 2. İlk olarak etiketleme yaparak her beyaz bölgeyi birbirinden ayırırız.((h/2):(h/2)) Bu dizi 0’lardan oluşan ve 3 adet bloğun olduğu yerlerde 1 olan bir dizidir. Daha sonra bu dizinin içinde kaç tane 1 olduğuna bakarak oluk sayısını tespit ediyoruz ki bu lastikte 3’tür. Örnek • • Orijinal imgemiz siyah beyaz Şekil 24. 3. Şekil 26 .5086’dır.1) ve son (w. beyaz piksellerin değeri 1 Şekil 25 Sırayla beyaz kümelere değer atanır. 1’ler kümesindeki pikseller 1. 3 oluk içerisinde 2 tane aralık barındırmaktadır. aralıkların tüm aralıkların toplamına oranını buluruz. aralıkların içerdiği piksel adedini buluruz. Şekil 23’ün orta noktasından dikey bir dizi alıyoruz. Daha sonra 1. 1. lastik fotoğrafının çekilirken oluşan gölgeden dolayı oluşmuş. iskelet((1:w). ve 2. Olukların konumları ve aralarındaki mesafelerin oranına bakarak bir test yapmak için olukların bulunduğu piksel değerlerini buluruz. Bu lastik için 1.

Bu iş için polyfit ve polyval fonksiyonlarını kullanacağız. kat. polyfit ve polyval fonksiyonları nasıl çalışır? Polyfit fonksiyonuna 3 eleman veririz.3 içeren şekillerini ayrı ayrı çağırabiliriz. . polinom katsayısı olarak bulunacak. b= 1:1:10.2. sıra dizisi. Örnek olarak imge==3 komutu bize şekil 27’yi gönderir. Şekil 27 Eğri uydurma Lastikteki bir ize polinom benzeteceğiz. İmgenin 1. Böylece o izin verileri elimizde imge olarak değil. Böylece izler üzerinde işlem yapmak çok daha kolaylaşacak. Bunlar. değer dizisi . Örnek a=[2 3 5 10 15 20 30 40 50 55].Şekil 24 Şekil 25 Şekil 26 Bu yöntem morfolojik çalışmada çok kullanışlıdır.

Polyfit fonksiyonu ile her b değerine karşılık gelen a değerlerine yaklaşık ve 2 katlı bir polinom oluşturuldu.b. uydurulmuş polinomun değerleri olan deger ve b değişkenlerini de yeşil çizgiyle çizdiririz. . for i=1:w for j=1:h if imge(i.a. c=1.deger. [w.’o'. Yeni figür açıp eğri uydurulacak noktalarımızı ‘o’ ile.j)==1 b(c)=w-i. sütun bilgilerini polyfit’e göndermemiz gerekir. Grafik 1 Grafik 1 İmgeye polinom uydurmak Bir imgeye polinom uydurmak için 1 olan pikselleri tespit edip bu piksellerin satır.plot(a.2).b).fit=polyfit(b.a(c)=j. • • • • • 10 elemanlı a dizisi rasgele oluşturuldu Sıra numaralarını temsil etmesi amacıyla 1’den 10’a kadar 10 elemanlı b dizisi oluşturuldu.h]=size(imge). deger=polyval(fit.b). figure. Polyval kullanılarak her b değeri için karşılık gelen fit değeri deger değişkenine atandı.

end end end • • • • • İmgenin satır ve sütun boyutlarını buluruz. Pikselin değeri 1 ise o pikselin satır ve sütun bilgilerini alırız. Bu imgede1600 kat yakınlaştırma vardır. c değişkeni burada testi geçen pikselin adresinin satır ve numara dizisindeki atanacak adreslerini temsil etmektedir. Kaç tane 1 olduğunu bilmediğimiz için testi geçen her piksel için c değişkenini 1 artırırız. grafikte sol alt olduğu için numara bilgisi. Şekil 27 Grafik 2 (Şekil 27’nin grafiğe dökülmüş hali) *Şekil 27’de her bir beyaz kara 1 değeri içeren 1 pikseli göstermektedir.0) noktası sol üst. yani sütun bilgisi direk a değişkenine atanmaktadır. İç içe iki for döngüsü ile imgedeki bütün piksellere 1’e eşitlik testi uygularız. . ancak imgede (0. Değer bilgisi. yani satır bilgisi’ni imgenin boyundan çıkarıp b değişkenine atıyoruz.c=c+1.

filt=imfilter(imge. (benim üzerinde çalıştığım imgede dikey çıkıntılar) I=imread(‘HPIM4603. [w.Grafik 3 (oluşturulan polinom) Yatay çıkıntılara polinom uydurmak Grafik 4 Yukarıda gösterdiğimiz polyfit fonksiyonunu kullanarak yatay çıkıntılara polinom uyduracağım.JPG’). isiklilikdegeri=mean(mean(imge)). imge=double(rgb2gray(I)). birli=(filt>isiklilikdegeri). for i=1:w1 .etiketmax).kernel).h1]=size(etiket). etiketmax=max(max(etiket)).h]=size(imge). morph = bwmorph(birli. kernel = fspecial(‘sobel’)'. kok=10. etiket=bwlabel(morph. [w1.Inf).8).’skel’. etiketsay=zeros(1.

end end tara=(etiket==maxdegeri). c=1.kok).j)==k etiketsay(k)=etiketsay(k)+1.for j=1:h1 for k=1:etiketmax if etiket(i. . c=c+1. for i=1:w2 for j=1:h2 if tara(i. end end end end for i=1:etiketmax if etiketsay(i)==(max(max(etiketsay))) maxdegeri=i. end end end fit=polyfit(b.j)==1 b(c)=h2-i.a(c)=j.a. [w2.h2]=size(tara).

Şekil 28 Şekil 29 Şekil 30 Şekil 31 . fspecial ile dikey kenar bulma kerneli olan Sobel filtresi oluşturuyoruz ve lojik imgemizle filtre ediyoruz. • • • • • • • • İmgeyi açıp siyah – beyaz hale getirdikten sonra ortalama ışıklılık değeri referans alınarak imgeyi lojik hale getirdik. Şekil 29 Daha sonra iskelet bulup imgeye etiket uyguluyoruz.) En büyük etiketin numarasını tespit edip sadece onu çağırıyoruz Şekil 31 Daha sonra 1 iz içeren Şekil 31’deki imgeye yukarıda anlattığım polinom uydurma algoritmasını uyguluyoruz. Yatay çıkıntı polinomu bulmak için en çok piksel içeren. Şekil 30 for döngüleri ile etiket sayısını bulup. her etiketin piksel sayısını hesaplıyoruz. Uydurduğumuz polinomu grafiğe dökersek Grafik 5’i elde ederiz. (en net görünen. en az gölgesel kayba uğrayan etiket en büyük olandır. yani en büyük etiketi kullanıyoruz.deger=polyval(fit.b).

0000 0.0032 0.0609 -0.Grafik 5 Uydurulan polinom: 1.0000 -0.0000 -0. .0e+003 * 0.0000 -0.3380 *Yapılan denemeler sonucunda bu iz için en uygun polinom katının 10 olduğu tespit edilmiştir.0001 -0.0000 0.0000 0.6762 3.

Sign up to vote on this title
UsefulNot useful