Görüntü İşleme (Arsiv Ana sayfa) => Matlab Projeleri ve Uygulamaları

Konu: Görüntü işleme ile lastik izi tanıma

Sayfa: [ 1 ]

admin 01.07.2007 02:15:09
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 birfotoğraftaki lastik izinin yerini tespit edecek, lastik izindekiolukların ve blokların dizilimine göre daha önceden hazırladığımız veribankası ile karşılaştıracak ve o fotoğraftaki lastik izinin markasını,modelini tahmini olarak belirleyecek. Veri bankasında birçok lastikizinin 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ı, dikeyoluklar, yatay oluklar vb…
Nerelerde kullanılır?
Kullanım alanı genelde kriminal vakalardır. Herhangi bir polisiyevakada olay yerindeki lastik izlerinin marka model tespiti davanınsonuç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 kriminallaboratuarları tarafından kullanılan en yaygın yöntemdir. Bu yöntemdebeton veya asfalt gibi sert yüzeylerde yapılan frenlerin yüzeydebıraktığı fiziksel kalıntının analizi yapılır. Yerden alınan lastikkalıntılarının karbon ve çeşitli element analizlerinden lastiğinyapısına ve yaşına ulaşmak yaklaşık olarak mümkündür. Ne var ki buyöntem sadece sert yüzeylerde yapılan frenlerde kullanılabiliyor.
Görüntü işleme ile yapılan tanımlama ise yumuşak ortamlardakullanılabiliyor. Aracın kum, toprak, çamur gibi yumuşak yüzeydengeçmesi sonucu lastik bu yüzeyde iz yapacaktır. Bu izin resmininçekilip, sayısallaştırılıp, programa verilmesi sonucunda bu lastiğinmarkası 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 iziyleilgisi olmayan gölgeleri barındırmayan bir fotoğraf çekilmelidir. Bunundışında izin içinde taş gibi bir tepecik ve bir oyukluk olması gerçekmarka, 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
Simetrik değil
Genel yapı
Bloksal
Oluksal
Pürüzsüz
Kıvrık


Merkez özelliği
Lastiğin orta kısmında bloklar olabilir, oluklar olabilir
Merkez bloklu
Merkez oluklu
Çevresel oluklar
Düz, kavisli, zigzag
Düz
kavisli
zigzag
Ana bloklar
Lastiğin merkezi etrafına dağılmış ana blokların şekil özellikleri.
L şekilli
dörtgen
s şekilli
v şekilli
Yatay çıkıntılar
Düz
Eğri

* 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çmak
Bir 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 piksellikimgenin Matlab’taki matrise dökülmüş hali yanındaki gibidir.
0
255
255
255
0
255
255
255
0
Şekil 1
Tablo 1
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);
Şekil 2
Şekil 3
İmgeyi lojik hale getirmek
İmgedeki her pikseli 1 veya 0 değerli hale getirmektir. Bunun içinbir eşik değer belirledim. Belli bir ışıklılık değerinin altındakipikselleri 1 ve üstündekileri 0 yaptım. Böylece lastikteki karanlıkyerler (gölgede kalan oluklar, girintiler) beyaz, diğer düz yüzeylersiyah oldu. Bu bana çalışmada kolaylık sağladı.
Şekil 4
Şekil 5
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);
şekil 6

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 eldeettik.
Şekil 7
Şekil 8
‘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.
Şekil 9


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

Şekil 10
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ılanaç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);
  • İmgemizi Matlab’ta açıp siyah – beyaz hale    getiriyoruz. Şekil 12

Şekil 11
Şekil 12
  • 100 elemanlık bir hareket filtresi oluşturuyoruz. Filtrenin boyutudenemelerden sonra en uygun olan 100 seçilmiştir. İmgemiz 299×400boyutlarındadır.
  • Bu filtreyi imgemizle konvolusyona sokuyoruz. Şekil 13
  • Oluşan imgeyi lojikleştiriyoruz. Denemelerden sonra    en uygun eşik değeri 70 olarak bulunmuştur. Şekil 14
Şekil 13
Şekil 14
  • Bwmorhp kullanarak    iskelet çıkarıyoruz. Yani baskın olukların vektörlerini buluyoruz. Şekil 15
  • Bu işlem lastiğin dış kenarlarını ve küçük    kıvrımları da almaktadır. Bize lazım olansa uzun bloklardır.
  • Uzun blokların tespiti için ise bir değer belirleyip o değerdenuzun olanları alıyoruz. Bu değeri 300 piksel olarak kabul edelim. (imgenin eni 400 piksel, uzun bloklar 300 pikseli geçer) Ancakelimizdeki imge sadece vektörlerden oluşan bir imge olduğu için en ufakbir eğim sonucu hataya götürür. Bu hassasiyeti önlemek için iskeletleriiçeren imgeye 20×1 lik bir matris ile boyuna açma uyguluyoruz ve dahasonra yatay konvolusyona sokuyoruz. Şekil 16
Şekil 15
Şekil 16
  • Sonuçta uzun blokların bulunduğu bölgelerin 1    olduğu bir imge elde ediyoruz. Şekil    17

Şekil 17
*Ü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
  • İmgemizi Matlab’ta açıp siyah – beyaz hale    getiriyoruz. Şekil 18
  • İmgemizin eninin piksel adeti uzunluğunda (h) bir hareket filtresioluşturuyoruz. Diğer yöntemdeki gibi konvolusyon değil, bu sefer imfilter kullanıyoruz.    Ve Şekil 19’u elde ediyoruz.
Şekil 18
Şekil 19


  • mean(mean(yatay)) ile imgenin ortalama ışıklılık değerinibuluyoruz. Bu ışıklılık değerinin altındaki piksellerin değerini 0,üstündekileri 1 yaparak imgeyi lojikleştiriyoruz. Şekil 20
  • 1xh boyutlarında 1’lerden bir Kernel matrisi oluşturuyoruz veimgeyi bu kernelle yayıyoruz. Böylece 1 değeri içeren her satır 1değerini almış oluyor. Şekil 21

Şekil 20
Şekil 21
  • Elde    ettiğimiz imgede 1’leri 0, 0’ları 1 yaparak renkleri ters çeviriyoruz. Şekil 22
  • Bwmorhp kullanarak    iskelet çıkarıyoruz. Şekil 23
Şekil 22
Şekil 23
  • Şekil 21 ve şekil 22’ de görülen, lastik fotoğrafının çekilirkenoluşan gölgeden dolayı oluşmuş, en alttaki çizgiler (en üstte olması damümkündür) lastik oluğu değildir. Bunları göz önüne almamamızgerekmektedir. Bunu için ilk (1,1) ve son (w,h) piksellere bir testyapıyoruz. İlk olarak etiketleme yaparak her beyaz bölgeyi birbirindenayırırız. Yapacağımız testte ilk pikselin değeri 1 ise ilk etiketi, sonpikselin değeri 1 ise son etiketi çıkarırız ki bu fotoğraf çekilirkenkiışıklılığın uygun olmadığını göstermektedir.
  • Olukların konumları ve aralarındaki mesafelerin oranına bakarak birtest yapmak için olukların bulunduğu piksel değerlerini buluruz. Bununiçin şekil 23 kullanılacak. Şekil 23’ün orta noktasından dikey bir dizialıyoruz. iskelet((1:w),((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.
  • 3 oluk içerisinde 2 tane aralık barındırmaktadır. 1. ve 2.aralıkların içerdiği piksel adedini buluruz. Daha sonra 1. ve 2.aralıkların tüm aralıkların toplamına oranını buluruz. Bu lastik için1. aralığın oranı: 0.4914 2. aralığın oranı: 0.5086’dır.
Etiketleme
Etiketleme sadece 1 ve 0’lardan oluşan imgelerde 1 kümelerinesı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
  • Orijinal    imgemiz siyah beyaz Şekil 24,    siyahlar piksellerin değeri 0, beyaz piksellerin değeri 1 Şekil 25
  • Sırayla    beyaz kümelere değer atanır. Şekil    26
Şekil 24
Şekil 25
Şekil 26


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.
Şekil 27
Eğri uydurma
Lastikteki bir ize polinom benzeteceğiz. Böylece o izin verilerielimizde imge olarak değil, polinom katsayısı olarak bulunacak. Böyleceizler ü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);
  • 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.
  • Polyfit fonksiyonu ile her b    değerine karşılık gelen a değerlerine yaklaşık ve 2 katlı bir polinom    oluşturuldu.
  • Polyval kullanılarak her b değeri    için karşılık gelen fit değeri deger değişkenine atandı.
  • Yeni figür açıp eğri uydurulacak noktalarımızı ‘o’ ile, uydurulmuşpolinomun değerleri olan deger ve b değişkenlerini de yeşil çizgiyleçizdiririz. Grafik 1
Grafik 1
İmgeye polinom uydurmak
Bir imgeye polinom uydurmak için 1 olan pikselleri tespit edip bupiksellerin 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
  • İmgenin    satır ve sütun boyutlarını buluruz.
  • İç içe    iki for döngüsü ile imgedeki    bütün piksellere 1’e eşitlik testi uygularız.
  • Pikselin    değeri 1 ise o pikselin satır ve sütun bilgilerini alırız.
  • Kaç tane 1 olduğunu bilmediğimiz için testi geçen her piksel için cdeğişkenini 1 artırırız. c değişkeni burada testi geçen pikselinadresinin satır ve numara dizisindeki atanacak adreslerini temsiletmektedir.
  • Değer bilgisi, yani sütun bilgisi direk a değişkenine atanmaktadır,ancak imgede (0,0) noktası sol üst, grafikte sol alt olduğu için numarabilgisi, yani satır bilgisi’ni imgenin boyundan çıkarıp b değişkenineatıyoruz.
Ş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. Bu imgede1600 kat yakınlaştırma vardır.
Grafik 3  (oluşturulan polinom)
Grafik 4
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 imgededikey çı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);
  • İmgeyi açıp siyah – beyaz hale getirdikten sonra ortalama ışıklılık değeri referans alınarak imgeyi lojik hale getirdik.
  • fspecial ile dikey kenar bulma    kerneli olan Sobel filtresi oluşturuyoruz ve lojik imgemizle filtre    ediyoruz. Şekil 29
  • Daha    sonra iskelet bulup imgeye etiket uyguluyoruz. Şekil 30
  • for    döngüleri ile etiket sayısını bulup, her etiketin piksel sayısını    hesaplıyoruz.
  • Yatay çıkıntı polinomu bulmak için en çok piksel içeren, yani enbüyük etiketi kullanıyoruz. (en net görünen, en az gölgesel kaybauğrayan etiket en büyük olandır.)
  • 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.
  • Uydurduğumuz    polinomu grafiğe dökersek Grafik 5’i    elde ederiz.
Şekil 28
Şekil 29
Şekil 30
Şekil 31
Grafik 5
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.
                                                                                                  Emrah Üstün


Sayfa: [ 1 ]

eXTReMe Tracker