基于matlab的車牌識別(含子程序)_第1頁
基于matlab的車牌識別(含子程序)_第2頁
基于matlab的車牌識別(含子程序)_第3頁
基于matlab的車牌識別(含子程序)_第4頁
基于matlab的車牌識別(含子程序)_第5頁
已閱讀5頁,還剩18頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、基于matlab的車牌識別系統一、對車輛圖像進行預處理1.載入車牌圖像:function d=main(jpg)filename, pathname = uigetfile('*.jpg', 'JPEG 文件(*.jpg)');if(filename = 0), return, endglobal FILENAME %定義全局變量FILENAME = pathname filename;I=imread(FILENAME);figure(1),imshow(I);title('原圖像');%將車牌的原圖顯示出來結果如下:2.將彩圖轉換為灰度圖并繪

2、制直方圖:I1=rgb2gray(I);%將彩圖轉換為灰度圖figure(2),subplot(1,2,1),imshow(I1);title('灰度圖像');figure(2),subplot(1,2,2),imhist(I1);title('灰度圖直方圖');%繪制灰度圖的直方圖結果如下所示:3. 用roberts算子進行邊緣檢測:I2=edge(I1,'roberts',0.18,'both');%選擇閾值0.18,用roberts算子進行邊緣檢測figure(3),imshow(I2);title('roberts

3、 算子邊緣檢測圖像');結果如下:4.圖像實施腐蝕操作:se=1;1;1;I3=imerode(I2,se);%對圖像實施腐蝕操作,即膨脹的反操作figure(4),imshow(I3);title('腐蝕后圖像');5.平滑圖像se=strel('rectangle',25,25);%構造結構元素以正方形構造一個seI4=imclose(I3,se);% 圖像聚類、填充圖像figure(5),imshow(I4);title('平滑圖像');結果如下所示:6. 刪除二值圖像的小對象I5=bwareaopen(I4,2000);% 去除聚

4、團灰度值小于2000的部分figure(6),imshow(I5);title('從對象中移除小的對象');結果如下所示 :二、車牌定位y,x,z=size(I5);%返回I5各維的尺寸,存儲在x,y,z中myI=double(I5);%將I5轉換成雙精度tic %tic表示計時的開始,toc表示計時的結束 Blue_y=zeros(y,1);%產生一個y*1的零陣 for i=1:y for j=1:x if(myI(i,j,1)=1) %如果myI(i,j,1)即myI的圖像中坐標為(i,j)的點值為1,即該點為車牌背景顏色藍色 %則Blue_y(i,1)的值加1 Blue

5、_y(i,1)= Blue_y(i,1)+1;%藍色像素點統計 end end end temp MaxY=max(Blue_y);%Y方向車牌區域確定 %temp為向量white_y的元素中的最大值,MaxY為該值的索引 PY1=MaxY; while (Blue_y(PY1,1)>=5)&&(PY1>1) PY1=PY1-1; end PY2=MaxY; while (Blue_y(PY2,1)>=5)&&(PY2<y) PY2=PY2+1; end IY=I(PY1:PY2,:,:); %x方向車牌區域確定 % X方向 % Blue

6、_x=zeros(1,x);%進一步確定x方向的車牌區域 for j=1:x for i=PY1:PY2 if(myI(i,j,1)=1) Blue_x(1,j)= Blue_x(1,j)+1; end end end PX1=1; while (Blue_x(1,PX1)<3)&&(PX1<x) PX1=PX1+1; end PX2=x; while (Blue_x(1,PX2)<3)&&(PX2>PX1) PX2=PX2-1; end PX1=PX1-1;%對車牌區域的校正 PX2=PX2+1; dw=I(PY1:PY2-8,PX1:

7、PX2,:); t=toc; figure(7),subplot(1,2,1),imshow(IY),title('行方向合理區域');%行方向車牌區域確定 figure(7),subplot(1,2,2),imshow(dw),title('定位裁剪后的車牌彩色圖像');的車牌區域如下所示:三、字符分割與處理1.車牌的進一步處理對分割出的彩色車牌圖像進行灰度轉換、二值化、均值濾波、腐蝕膨脹以與字符分割以從車牌圖像中分離出組成車牌的單個字符圖像,對分割出來的字符進行預處理(二值化、歸一化),然后分析提取,對分割出的字符圖像進行識別給出文本形式的車牌。代碼如下:i

8、mwrite(dw,'彩色車牌.jpg');%將彩色車牌寫入彩色車牌文件中a=imread('彩色車牌.jpg');%讀取車牌文件中的數據b=rgb2gray(a);%將車牌圖像轉換為灰度圖imwrite(b,'車牌灰度圖像.jpg');%將灰度圖像寫入文件中 figure(8);subplot(3,2,1),imshow(b),title('車牌灰度圖像')g_max=double(max(max(b);g_min=double(min(min(b);T=round(g_max-(g_max-g_min)/3); % T 為二值

9、化的閾值m,n=size(b);d=(double(b)>=T); % d:二值圖像imwrite(d,'均值濾波前.jpg'); subplot(3,2,2),imshow(d),title('均值濾波前')%均值濾波前% 濾波h=fspecial('average',3);%建立預定義的濾波算子,average為均值濾波,模板的尺寸為3*3d=im2bw(round(filter2(h,d);%使用指定的濾波器h對h進行d即均值濾波imwrite(d,'均值濾波后.jpg'); subplot(3,2,3),imshow

10、(d),title('均值濾波后')% 某些圖像進行操作% 膨脹或腐蝕% se=strel('square',3); % 使用一個3X3的正方形結果元素對象對創建的圖像進行膨脹% 'line'/'diamond'/'ball'.se=eye(2); % eye(n) returns the n-by-n identity matrix 單位矩陣m,n=size(d);%返回矩陣b的尺寸信息, 并存儲在m,n中if bwarea(d)/m/n>=0.365 %計算二值圖像中對象的總面積與整個面積的比是否大于0.

11、365 d=imerode(d,se);%如果大于0.365則圖像進行腐蝕elseif bwarea(d)/m/n<=0.235 %計算二值圖像中對象的總面積與整個面積的比是否小于0.235 d=imdilate(d,se);%如果小于則實現膨脹操作endimwrite(d,'膨脹或腐蝕處理后.jpg'); subplot(3,2,4),imshow(d),title('膨脹或腐蝕處理后');運行結果如下所示:2.字符分割在汽車牌照自動識別過程中,字符分割有承前啟后的作用。它在前期牌照定位的基礎上進行字符的分割,然后再利用分割的結果進行字符識別。字符識別的

12、算法很多,因為車牌字符間間隔較大,不會出現字符粘連情況,所以此處采用的方法為尋找連續有文字的塊,若長度大于某閾值,則認為該塊有兩個字符組成,需要分割。一般分割出來的字符要進行進一步的處理,以滿足下一步字符識別的需要。但是對于車牌的識別,并不需要太多的處理就已經可以達到正確識別的目的。在此只進行了歸一化處理,然后進行后期處理。% 尋找連續有文字的塊,若長度大于某閾值,則認為該塊有兩個字符組成,需要分割%首先創建子函數qiege與getword,而后調用子程序,將車牌的字符分割開并且進行歸一化處理d=qiege(d);m,n=size(d); % subplot(3,2,5),imshow(d),

13、title(n)k1=1;k2=1;s=sum(d);j=1;while j=n while s(j)=0 j=j+1; end k1=j; while s(j)=0 && j<=n-1 j=j+1; end k2=j-1; if k2-k1>=round(n/6.5) val,num=min(sum(d(:,k1+5:k2-5); d(:,k1+num+5)=0; % 分割 endend% 再切割d=qiege(d);% 切割出 7 個字符y1=10;y2=0.25;flag=0;word1=;while flag=0 m,n=size(d); left=1;wi

14、de=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; end d(:,1:wide)=0;d=qiege(d); ende

15、nd% 分割出第二個字符word2,d=getword(d);% 分割出第三個字符word3,d=getword(d);% 分割出第四個字符word4,d=getword(d);% 分割出第五個字符word5,d=getword(d);% 分割出第六個字符word6,d=getword(d);% 分割出第七個字符word7,d=getword(d);figure(9);subplot(2,7,1),imshow(word1),title('1');subplot(2,7,2),imshow(word2),title('2');subplot(2,7,3),ims

16、how(word3),title('3');subplot(2,7,4),imshow(word4),title('4');subplot(2,7,5),imshow(word5),title('5');subplot(2,7,6),imshow(word6),title('6');subplot(2,7,7),imshow(word7),title('7');m,n=size(word1);% 商用系統程序中歸一化大小為 40*20,此處演示word1=imresize(word1,40 20);word2=im

17、resize(word2,40 20);word3=imresize(word3,40 20);word4=imresize(word4,40 20);word5=imresize(word5,40 20);word6=imresize(word6,40 20);word7=imresize(word7,40 20);subplot(2,7,8),imshow(word1),title('1');subplot(2,7,9),imshow(word2),title('2');subplot(2,7,10),imshow(word3),title('3&#

18、39;);subplot(2,7,11),imshow(word4),title('4');subplot(2,7,12),imshow(word5),title('5');subplot(2,7,13),imshow(word6),title('6');subplot(2,7,14),imshow(word7),title('7');imwrite(word1,'1.jpg');imwrite(word2,'2.jpg');imwrite(word3,'3.jpg');imwrit

19、e(word4,'4.jpg');imwrite(word5,'5.jpg');imwrite(word6,'6.jpg');imwrite(word7,'7.jpg');運行結果如下:4、 車牌匹配識別模板匹配是圖象識別方法中最具代表性的基本方法之一,它是將從待識別的圖象或圖象區域f(i,j)中提取的若干特征量與模板T(i,j)相應的特征量逐個進行比較,計算它們之間規格化的互相關量,其中互相關量最大的一個就表示期間相似程度最高,可將圖象歸于相應的類。也可以計算圖象與模板特征量之間的距離,用最小距離法判定所屬類。此處采用相減的方法

20、來求得字符與模板中哪一個字符最相似,然后找到相似度最大的輸出。汽車牌照的字符一般有七個,大部分車牌第一位是漢字,通常代表車輛所屬省份,緊接其后的為字母與數字。車牌字符識別與一般文字識別在于它的字符數有限,漢字共約50多個,大寫英文字母26個,數字10個。為了實驗方便,結合本次設計所選汽車牌照的特點,只建立了7個數字26個字母與10個數字的模板。其他模板設計的方法與此一樣。首先取字符模板,接著依次取待識別字符與模板進行匹配,將其與模板字符相減,得到的0越多那么就越匹配。把每一幅相減后的圖的0值個數保存,即為識別出來的結果。識別的流程圖如下所示:建立自動識別的代碼表讀取分割出來的字符第一個字符與模

21、板中的漢字模板進行匹配第二個字符與模板中的字母模板進行匹配待識別字符與模板字符相減,值越小相似度越大,找到最小的一個即為匹配的最好的識別完成,輸出此模板對應值后5個字符與模板中的字母與數字模板進行匹配源代碼如下:liccode=char('0':'9' 'A':'Z' '京遼魯陜豫浙'); %建立自動識別字符代碼表 SubBw2=zeros(40,20); %產生40*20的全0矩陣l=1;for I=1:7 ii=int2str(I); %轉為串 t=imread(ii,'.jpg'); %讀取圖

22、片文件中的數據 SegBw2=imresize(t,40 20,'nearest'); %對圖像做縮放處理 SegBw2=double(SegBw2)>20; if l=1 %第一位漢字識別 kmin=37; kmax=43; elseif l=2 %第二位 AZ 字母識別 kmin=11; kmax=36; else l>=3 %第三位以后是字母或數字識別 kmin=1; kmax=36; end for k2=kmin:kmax fname=strcat('字符模板',liccode(k2),'.jpg'); %把行向量轉化成字符

23、串 SamBw2 = imread(fname); SamBw2=double(SamBw2)>1; for i=1:40 for j=1:20 SubBw2(i,j)=SegBw2(i,j)-SamBw2(i,j); end end % 以上相當于兩幅圖相減得到第三幅圖 Dmax=0; for k1=1:40 for l1=1:20 if ( SubBw2(k1,l1) > 0 | SubBw2(k1,l1) <0 ) Dmax=Dmax+1; end end end Error(k2)=Dmax; end Error1=Error(kmin:kmax); MinError

24、=min(Error1); findc=find(Error1=MinError); Code(l*2-1)=liccode(findc(1)+kmin-1); Code(l*2)=' ' %輸出最大相關圖像 l=l+1;endfigure(10),imshow(dw),title ('車牌:', Code,'Color','r');子程序代碼:function e=qiege(d)m,n=size(d);top=1;bottom=m;left=1;right=n; %intwhile sum(d(top,:)=0&&top<=m top=top+1;end

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論