一、課題介紹
該課題為基于MATLAB的多方法車牌識别識别系統,帶有豐富的人機互動GUI界面。目前畢業設計選題中,傳統的中規中矩的車牌識别不易得到高分,甚至過不了。
必須要在此基礎上有所創新方得可以避開其他雷同課題,不會輕易被導師被否決而導緻畢設不過。是以建議在車牌識别基礎上加入多種方法的對比,看看哪種方法的精度高。雖然目前有很多方法的車牌識别,但是都是在各自的測試庫裡面測試的,比如測試的車牌圖像不同,字元庫不同,導緻無法做對比。整個設計在一個GUI界面上完成。
傳統基礎版:中規中矩的車牌識别【隻看到車屁股】
靓點1版本:可做成 複雜背景的車牌識别【可以看到全車以及周邊其他物體】
靓點2版本:可做成 具備判斷是否為庫内車牌的車牌識别,并且計時計費(智慧停車場)
靓點3版本:可做成 具備語音播報的車牌識别,把識别結果通過聲音方式播報出來
靓點4版本:可做成 兩種方法的對比,本課題為模闆比對和bp神經網絡方法的對比
二、基本流程
車牌識别部分:
①圖像預處理:在整個車牌識别系統中,由于采集進來的圖像為真彩圖,再加上實際采集環境的影響以及采集硬體等原因,圖像品質并不高,其背景和噪聲會影響字元的正确分割。和識别,是以在進行車牌分割和識别處理之前,需要先對車牌圖像進行圖像預處理操作。
②車牌定位:首先對車牌的二值圖檔進行形态學濾波,使車牌區域形成一個連通區域,然後根據車牌的先驗知識對所得到的連通區域進行篩選,擷取車牌區域的具體位置,完成從圖檔中提取車牌的任務。
③車牌分割:首先對車牌進行水準投影,去除水準邊框;再對車牌進行垂直投影。通過對車牌進行投影分析可知,與最大值峰中心對應的為車牌中第二個字元和第三個字元的間隔,與第二大峰中心距離對應的即為車牌字元的寬度,并以此為依據對車牌進行分割。
④字元識别:
神經網絡:先用bp神經網絡訓練測試集中涉及到的字元,如粵、閩等,A-Z,0-9;進行比對識别;
模闆比對:來對車牌進行識别。識别過程中,首先建立标準字庫,再将分割所得到的字元進行歸一化,将歸一化處理後的字元與标準字庫裡的字元逐一比較,最後把誤差最小的字元作為結果顯示出來。
三、GUI設計圖(學習好GUI,有助于畢業後從事UI界面設計類工作,如深圳創維,康佳,彩虹電視等需要大量該類崗位,适合女孩子居多,該類工作居于程式員和文員之間)
資源連接配接:https://gitee.com/liplip/chepaishibie
https://gitee.com/liplip/chepaishibie
GUI制作說明:GUI是MATLAB的人機互動式GUI界面,有GUI界面,所有操作可在一個界面上完成,可以為畢設增分不少。GUI可在MATLAB指令行視窗輸入guide回車快速打開,GUI常用的控件有axes,edit,putton,text幾個元件,不同元件之間通過回調函數來進行連接配接,觸發操作,可教學GUI制作,以及友情推薦同類崗位工作。
四、主函數附錄
1、車牌載入
[filename,filepath]=uigetfile(’.jpg’,‘輸入車牌圖像’);% 直接自動讀入%
file=strcat(filepath,filename); %strcat函數:連接配接字元串;把filepath的字元串與filename的連接配接,即路徑/檔案名
I=imread(file);
axes(handles.axes1)%讓車牌顯示在axes1控件中
imshow(I)%顯示
title(‘車牌’)
2、圖像預處理
I1=rgb2gray(I); %灰階處理
I2=edge(I1,‘roberts’,0.15,‘both’); %邊緣檢測
se=[1;1;1];
I3=imerode(I2,se);
se=strel(‘rectangle’,[25,25]);
I4=imclose(I3,se); %閉運算,去除雜質影響
I5=bwareaopen(I4,2000); %膨脹操作
3、車牌定位
[y,x,z]=size(I5);
myI=double(I5);
tic
white_y=zeros(y,1);
for i=1:y
for j=1:x
if(myI(i,j,1)==1)
white_y(i,1)= white_y(i,1)+1;
end
end
end
[temp MaxY]=max(white_y);
PY1=MaxY;
while ((white_y(PY1,1)>=5)&&(PY1>1))
PY1=PY1-1;
end
PY2=MaxY;
while ((white_y(PY2,1)>=5)&&(PY2<y))
PY2=PY2+1;
end
IY=I(PY1:PY2,: ;
white_x=zeros(1,x);
for j=1:x
for i=PY1:PY2
if(myI(i,j,1)==1)
white_x(1,j)= white_x(1,j)+1;
end
end
end
PX1=1;
while ((white_x(1,PX1)❤️)&&(PX1<x))
PX1=PX1+1;
end
PX2=x;
while ((white_x(1,PX2)❤️)&&(PX2>PX1))
PX2=PX2-1;
end
PX1=PX1-2;
PX2=PX2+3;
dw=I(PY1:PY2-8,PX1:PX2,:);
axes(handles.axes2)
imshow(dw)
title(‘定位的車牌’)
4、字元分割
% 切割出 7 個字元
y1=10;y2=0.25;flag=0;word1=[];
while flag==0
[m,n]=size(d);
left=1;wide=0;
while sum(d(:,wide+1))~=0
wide=wide+1;
end
if wide<y1 % 認為是左側幹擾
d(:,[1:wide])=0;
d=qiege(d);
else
temp=qiege(imcrop(d,[1 1 wide m]));
[m,n]=size(temp);
all=sum(sum(temp));
two_thirds=sum(sum(temp([round(m/3):2*round(m/3)] ));
if two_thirds/all>y2
flag=1;word1=temp; % WORD 1
end
d(:,[1:wide])=0;d=qiege(d);
end
end
% 分割出第二個字元
[word2,d]=getword(d);
% 分割出第三個字元
[word3,d]=getword(d);
% 分割出第四個字元
[word4,d]=getword(d);
% 分割出第五個字元
[word5,d]=getword(d);
% 分割出第六個字元
[word6,d]=getword(d);
% 分割出第七個字元
[word7,d]=getword(d);
5、字元識别
liccode=char([‘0’:‘9’ ‘A’:‘Z’ ‘京津滬渝冀豫雲遼黑湘皖魯新蘇浙贛鄂桂甘晉蒙陝吉閩貴粵青藏川甯瓊’]);%SubBw2=zeros(40,20);
l=1;
for I=1:7;
ii=int2str(I);
t=imread([ii,’.jpg’]);
SegBw2=imresize(t,[40 20],‘nearest’);
SegBw2=double(SegBw2)>20;
if l1 %第一位漢字識别
kmin=37;
kmax=43;
elseif l2 %第二位字母識别
kmin=11;
kmax=36;
else l>=3 %第三位後字母或數字識别
kmin=1;
kmax=36;
五、運作效果圖、
部分運作效果圖
備注:如果有做Matlab車牌識别課題,想創新的可以聯系我,車牌識别網絡上爛大街,但是要如何創新,有亮點确實是另一回事,包括加入GUI,多方法,論文,對比,語音播報,出入庫,剩餘車位這些功能,完全是畢設的完美作品。歡迎交流探讨。