Soru sorPlaka Tanıma Sistemi
32315 tarafından 8 yıl önce soruldu

Öncelikle böyle bir yararlı siteden dolayı teşekkür ederim. Matlabla ilgili türkçe yardım alınabilecek ender sitelerden birisi burası. Soruma gelince plaka tanıma sistemleri ile ilgili proje üzerinde çalışıyorum. Sistemin daha yüksek doğruluk almasını amaçlıyorum. Bununla ilgili dökümanlar internette var ama yeterli doğrulukta çalışan yok. Benim kullandığım kodda sistem plaka üzerinde çalışma yapıyor. Ancak en son plaka bölgelerini çıkartırken fazla aday bölge olacak ki birçok bölge çıkarıyor. Sonuçta plaka da çıkıyor ama diğer gereksiz bölgeler olmasın istiyorum. Acaba kodda nasıl düzenlemeler yapmalıyım. şimdiden yardımlarınız için teşekkür ediyorum. Kodları aşağıda paylaştım.

clc;
clear;
close all;

I = imread('plaka30.jpg'); %görüntüyü oku
figure, imshow(I); %okunan görüntüyü gösterir

Ig = rgb2gray(I); %renkli görüntüyü gri seviyeye çevirir
figure,
subplot(2,2,1), imshow(Ig); %soldaki resim olarak gösterir
 
Ih = histeq(Ig); %histogramı eşitleyerek kontrastı artırır
subplot(2,2,2), imshow(Ih); %sağdaki resim olarak gösterir

figure,
subplot(1,2,1), imhist(Ig); %griye çevrilen görüntü üzerindeki değerlerin dağılımını gösterir
subplot(1,2,2), imhist(Ih);

Ie = edge(Ih, 'sobel'); %sobel kenar bulma algoritmasıyla kenarlar bulunur
figure, 
subplot(1,2,1), imshow(Ie);

Id = imdilate(Ie, strel('diamond',1)); %morfolojik işlem olan genişletme algoritması
subplot(1,2,2), imshow(Id); %strel yapısal filtre elemanıdır. morfolojik işlemi hangi şekil ve parametreyle yapacağımızı gösterir
[adinserter block="2"]
If = imfill(Id,'holes');%imfiil komutu resimde çukur denilen yerleri doldurur.
figure, imshow(If); %yani gri seviyede veya binary modda açıklıkları doldurur
 
[lab, n] = bwlabel(If); % bwlabel komutu resimdeki nesneleri belirler. lab içine nesnelerin pixel değerini
 %n içine kaç tane nesne olduğu atılır
regions = regionprops(lab, 'All');
 regionsCount = size(regions, 1) ;
 for i = 1:regionsCount
 region = regions(i);
 RectangleOfChoice = region.BoundingBox;
 PlateExtent = region.Extent;

PlateStartX = fix(RectangleOfChoice(1));
 PlateStartY = fix(RectangleOfChoice(2));
 PlateWidth = fix(RectangleOfChoice(3));
 PlateHeight = fix(RectangleOfChoice(4));

if PlateWidth >= PlateHeight*3 && PlateExtent >= 0.7
 im2 = imcrop(I, RectangleOfChoice); 
 figure, imshow(im2);

end
end
1 Cevap
hakkans Yönetici tarafından 8 yıl önce cevaplandı

Birçok bölge ortaya çıkmasına yönelik önerebileceğim şey arama kıstaslarınızı artırmak olacaktır. Örneğin plakalar hep sabit boyda veya sabit bir en/boy oranında oluyorsa sadece bu şartları sağlayan bölgeleri ayıklayabilirsiniz. Öte yandan, sıkıntı oluşturan bölgeler istenen plakaya göre daha soluksa, görüntünüzü siyah-beyazdan ziyade binary bir resme dönüştürürseniz bu diğer bölgeler elenebilir (im2bw fonksiyonu ile).