traffic signs detection application with Morphological Image Processing
Bu uygulamanın amacı yoldaki levhaların otomatik olarak algılanması ve bizim sağladığımız veriler ile aracın veya sürücünün yönlendirilmesi.
1 of 5
Download to read offline
More Related Content
Uygulama trafik levhası algılama
1. Uygulama Trafik Levhası Algılama
Bu uygulamada amacımız yoldaki levhaların otomatik olarak algılanması ve
bizim sağladığımız veriler ile aracın veya sürücünün yönlendirilmesi. Bizim
uygulamamız sadece levhanın şeklini söylüyor yuvarlak üçgen gibi .
4.2.2.Bölütlüme
Renk tabanlı bölütlüme ile trafik levhasının kırmızı kısmını seçiyoruz. Bu uygulama
giriş seviyesindeki bir uygulama olduğu için sadece kırmızı renk levhaları algılamaktadır.
Bunu geliştirmesi çok kolay kodları yazdığımda kırmızı rengi seçtiğim bölümde mavi sarı
gibi renklerinde nasıl seçildiğini göstereceğim.
Kırmızı Rengin Seçilmesi
I = imread('ucgen.jpg');
redBand = I(:, :, 1);
greenBand = I(:, :, 2);
blueBand = I(:, :, 3);
redThresholdLow = graythresh(redBand);
redThresholdHigh = 255;
greenThresholdLow = 0;
greenThresholdHigh = graythresh(greenBand);
blueThresholdLow = 0;
blueThresholdHigh = graythresh(blueBand);
% redThresholdLowKırmızı Renk için olana RGB değerleri
redThresholdLow = 85;
redThresholdHigh = 255;
greenThresholdLow = 0;
greenThresholdHigh = 70;
blueThresholdLow = 0;
blueThresholdHigh = 90;
redMask = (redBand>= redThresholdLow) & (redBand<=
redThresholdHigh);
greenMask = (greenBand>= greenThresholdLow) & (greenBand<=
greenThresholdHigh);
blueMask = (blueBand>= blueThresholdLow) & (blueBand<=
blueThresholdHigh);
Bölütleme
Gürültüleri Yok Et
Morfolojik Boşluk Doldurma(imfill)
Hangi Şekil Olduğuna Karar Verme
2. redObjectsMask = uint8(redMask&greenMask&blueMask);
imshow(redObjectsMask,[])
Yukarıdaki kod'da 'redThresholdLow' kısmında kırmızı renk için olacak
kırmızı,mavi ve yeşil renklerin eşik değerleri belirlendi bu eşik değeri sağlayan
yerler kırmızı renk olarak seçildi.Eğer mavi renk seçilecek olsa idi mavi renk için
olan eşik değerleri kullanılacaktı.
Şekil-33 Trafik levhası ve bölütlenmesi
4.2.3.Gürültülerin Giderilmesi
Bölütlüme işleminden sonra resmi ikili resim'e çevirdim ama bu çevirme
sırasında bazı gürültüler oluştu şimdiki adımımızda bu gürültüleri yok edeceğiz.
Şekil-34 Bölütlenen resmin ikili resmi resim gürültülü bir resim
Bu resimde objenin üzerinde küçük noktalardan oluşan gürültüler var.
Gürültüleri yok etmek için kapama işlemini kullanıyorum. Bu sorunu yayma işlemi
ile de çözebilirdim fakat objenin boyutlarını fazla değiştirmek istemediğim için
kapama işlemini kullandım.
3. Şekil-35 Gürültüleri yok edilmiş obje
se = strel('square',5);
m_C = imclose(I_bw,se);
imshow(im_C)
4.2.4.Morfolojik Boşluk Doldurma
Benim kurduğum algoritma objenin alanından hareket ediyor alanı hesaplarken
objenin beyaz noktalarını sayıyor bundan dolayı objemin içini doldurman gerekli.
Şekil-37 Morfolojik doldurma
4.2.5.Hangi Şekil Olduğuna Karar Ver
Hangi şekil olduğuna karar verme algoritması şu şekilde çalışıyor. ilk önce içini
doldurduğumuz objeyi bir kare içerisine alıyor sonra geometrik alan formülleri ile
karenin içindeki beyaz noktaların toplamını birbirinden çıkartıyoruz fark hangisinde
daha az ise o şekil olduğunu söylüyor.
4. Şekil-38 Şeklin belirlenmesi
[B,L] = bwboundaries(im_c_f,'noholes');
boundary = B{1};
min_y = min(boundary(:,1));
max_y = max(boundary(:,1));
min_x = min(boundary(:,2));
max_x = max(boundary(:,2));
kose1=[min_xmin_y];
kose2=[min_xmax_y];
kose3=[max_xmin_y];
kose4=[max_xmax_y];
figure
imshow(im_c_f)
hold
plot(kose1(1),kose1(2),'*')
plot(kose2(1),kose2(2),'*')
plot(kose3(1),kose3(2),'*')
plot(kose4(1),kose4(2),'*')
Hangi şekil olduğuna karar verme algoritması.
im_c = imcrop(im_er,[kose1(1) kose1(2) (kose4(1)-
kose1(1)) (kose4(2)-kose1(1))]);
%beyaz noktaların alanı
alan = sum(im_c); %*
alan = sum(alan); %*
%**
%şekilin tespiti
alan2 = size(im_c,1)*size(im_c,2);
%ucgen için kontrol
5. ucgen_alan = alan2 / 2;
daire = pi * (size(im_c_f,1)/2)^2;
rect = alan2;
alanlar = [ucgen_alan - alan , daire - alan , rect-
alan];
for i=1:length(alanlar)
if alanlar(i)<0
alanlar(i) = alanlar(i)*(-1);
end
end
sonuc = min(alanlar);
sonuc = find(alanlar==sonuc);
figure
imshow(im_c)
ifsonuc == 1
title({'UCGEN'});
elseifsonuc == 2
title({'DAIRE'});
elseifsonuc == 3
title({'RECT'});
end
Şekil-39 Şeklin belirlenmesi
Gayet başarılı diğer levhalarda da sorunsuz şekilde çalışmakta.
UCGEN