MATLAB多方法车牌识别系统(bp+模板+GUI)
一、課題介紹
?資源鏈接https://gitee.com/chending006/cpsbhttps://gitee.com/chending006/cpsb
隨著汽車數量的增加,城市交通狀況日益受到人們的重視,如何進行有效的交通管理更是成為了人們關注的焦點。智能交通系統通過車輛檢測裝置對過往的車輛實施檢測,提取有關交通數據,達到監控、管理和指揮交通的目的。因此,它已成為世界交通領域研究的重要課題。 車牌識別系統作為智能交通系統的一個重要組成部分,已在高速公路、城市交通和停車場等項目的管理中占有無可取代的重要地位。它在不影響汽車狀態的情況下,由計算機自動完成車牌的識別,從而降低交通管理工作的復雜度。
該課題為基于MATLAB的汽車出入庫識別系統,帶有豐富的人機交互GUI界面。目前畢業設計選題中,傳統的中規中矩的車牌識別不易得到高分,必須要在此基礎上有所創新方得可以避開其他雷同課題,不會輕易被導師被否決而導致畢設不過。因此建議在車牌識別基礎上加入多種方法的對比,看看哪種方法的精度高。雖然目前有很多方法的車牌識別,但是都是在各自的測試庫里面測試的,比如測試的車牌圖像不同,字符庫不同,導致無法做對比。整個設計在一個GUI界面上完成。
傳統基礎版:中規中矩的車牌識別【只看到車屁股】
靚點1版本:可做成 復雜背景的車牌識別【可以看到全車以及周邊其他物體】
靚點2版本:可做成 具備判斷是否為庫內車牌的車牌識別,并且計時計費(智慧停車場)
靚點3版本:可做成 具備語音播報的車牌識別,把識別結果通過聲音方式播報出來
靚點4版本:可做成 兩種方法的對比,本課題為模板匹配和bp神經網絡方法的對比
二、基本流程
車牌識別部分:
①圖像預處理:在整個車牌識別系統中,由于采集進來的圖像為真彩圖,再加上實際采集環境的影響以及采集硬件等原因,圖像質量并不高,其背景和噪聲會影響字符的正確分割。和識別,所以在進行車牌分割和識別處理之前,需要先對車牌圖像進行圖像預處理操作。
②車牌定位:首先對車牌的二值圖片進行形態學濾波,使車牌區域形成一個連通區域,然后根據車牌的先驗知識對所得到的連通區域進行篩選,獲取車牌區域的具體位置,完成從圖片中提取車牌的任務。
③車牌分割:首先對車牌進行水平投影,去除水平邊框;再對車牌進行垂直投影。通過對車牌進行投影分析可知,與最大值峰中心對應的為車牌中第二個字符和第三個字符的間隔,與第二大峰中心距離對應的即為車牌字符的寬度,并以此為依據對車牌進行分割。
④字符識別:
神經網絡:先用bp神經網絡訓練測試集中涉及到的字符,如粵、閩等,A-Z,0-9;進行比對識別;
模板匹配:來對車牌進行識別。識別過程中,首先建立標準字庫,再將分割所得到的字符進行歸一化,將歸一化處理后的字符與標準字庫里的字符逐一比較,最后把誤差最小的字符作為結果顯示出來。
三、GUI設計圖(學習好GUI,有助于畢業后從事UI界面設計類工作,如深圳創維,康佳,彩虹電視等需要大量該類崗位,適合女孩子居多,該類工作居于程序員和文員之間)
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); ticwhite_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)<3)&&(PX1<x)) PX1=PX1+1; end PX2=x; while ((white_x(1,PX2)<3)&&(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)],:))); 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 l==1 %第一位漢字識別kmin=37;kmax=43;elseif l==2 %第二位字母識別kmin=11;kmax=36;else l>=3 %第三位后字母或數字識別kmin=1;kmax=36;endfor k2=kmin:kmaxfname=strcat('字符模板\',liccode(k2),'.jpg');SamBw2=imread(fname);SamBw2=double(SamBw2)>1;for i=1:40for j=1:20SubBw2(i,j)=SegBw2(i,j)-SamBw2(i,j);endend%相當于兩幅圖相減得第三幅圖Dmax=0;for k1=1:40;for l1=1:20if(SubBw2(k1,l1)>0 || SubBw2(k1,l1)<0)Dmax=Dmax+1;endendendError(k2)=Dmax;endError1=Error(kmin:kmax);MinError=min(Error1);findc=find(Error1==MinError);Code(l*2-1)=liccode(findc+kmin-1);Code(l*2)=' ';l=l+1; end t=toc; set(handles.text4,'string',Code)總結
以上是生活随笔為你收集整理的MATLAB多方法车牌识别系统(bp+模板+GUI)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: SpringBoot框架DataSour
- 下一篇: 笙默考试管理系统——学员