Ö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
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).