車牌識別及matlab程序_第1頁
車牌識別及matlab程序_第2頁
車牌識別及matlab程序_第3頁
車牌識別及matlab程序_第4頁
車牌識別及matlab程序_第5頁
已閱讀5頁,還剩9頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、車牌識別及matlab附錄車牌識別程序clear;closeall;%Stepl獲取圖像裝入待處理彩色圖像并顯示原始圖像Scolor=imreadC3.jpg*);%lmread函數(shù)讀取圖像文件%將彩色圖像轉(zhuǎn)換為黑白并顯示Sgray=rgb2gray(Scolor);%rgb2gray轉(zhuǎn)換成灰度圖figure,Imshow(Scolor),title('原始彩色圖像');%figure命令同時顯示兩幅圖figure,imshow(Sgray),title('原始黑白圖像');%Step2圖像預處理對Sgray原始黑白圖像進行開操作得到圖像背景s=strel(&#

2、39;disk',13);%strel函數(shù)Bgray=imopen(Sgray八);打開sgrays圖像figure,imshow(Bgray);tltle(,背景圖像,);輸出背景圖像%用原始圖像與背景圖像作減法,增強圖像Egray=imsubtract(Sgray,Bgray);%兩幅圖相減figure,imshow(Egray);titleC增強黑白圖像,);輸出黑白圖像%Step3取得最佳閾值,將圖像二值化fmaxl=double(max(max(Egray);%egray的最大值并輸出雙精度型fminl=double(min(min(Egray);%egray的最小值并輸出雙

3、精度型level=(fmaxl-(fmaxl-fminl)/3)/255;%獲得最佳閾值bw22=im2bw(Egray,level);%轉(zhuǎn)換圖像為二進制圖像bw2=double(bw22);%Step4對得到二值圖像作開閉操作進行濾波figure,Imshow(bw2);title0圖像二值化');得到二值圖像grd=edge(bwl/canny*)%用canny算子識別強度圖像中的邊界figure,imshow(grd);title(,圖像邊緣提取,);輸出圖像邊緣bgl=imclose(grd,strel('rectangle*,5,19);%取矩形框的閉運算figure

4、,imshow(bgl);title圖像閉運算5,19');%輸出閉運算的圖像bg3=imopen(bglNrel('rectangle*,5,19);%取矩形框的開運算figure,imshow(bg3);title(,圖像開運算5J9,);%輸出開運算的圖像bg2=imopen(bg3八trel('rectangle*,19,1);%M矩形框的開運算figure,imshow(bg2);title(,圖像開運算19,1');%輸出開運算的圖像%Step5對二值圖像進行區(qū)域提取,并計算區(qū)域特征參數(shù)。進行區(qū)域特征參數(shù)比較,提取車牌區(qū)域L,num=bwlabel(

5、bg2,8);%標注二進制圖像中已連接的部分Feastats=imfeature(L,'basic*);%計算圖像區(qū)域的特征尺寸Area=Feastats.Area;%區(qū)域面積BoundingBox=Feastats.BouncIingBox;%xywidthheight車牌框架大小RGB=labe!2rgb(L,'spring*,'k'shuffle*);%標志圖像向RGB圖像轉(zhuǎn)換figure,imshow(RGB);title(,圖像彩色標記,);輸出框架的彩色圖像lx=0;forl=l:numwidth=BoundlngBox(1-1)*4+3);%框架寬

6、度的計算hight=BoundingBox(1-1)*4+4);%框架高度的計算if(width>98&widthv160&hight>25&hightv50)%框架的寬度和高度的范圍lx=lx+l;Getok(lx)=1;fork=l:lxl=Getok(k);startcol=BoundingBox(1-1)*4+1)?2;%開始列startrow=BoundingBox(1-1)*4+2)?2;%開始行wi(lth=BoundlngBox(1-1)*4+3)+8;%車牌寬hight=BoundingBox(1-1)*4+4)+2;%車牌高rato=wi

7、dtii/hight;%計算車牌長寬比ifrato>2&rato<4break;endendsbwl=bw2(startrow:startrow+hight八startcol:startcol+width-l);%獲取車牌二值子圖subcoll=Sgray(startrow:startrow+hight,startcol:startcol+width-l);%獲取車牌灰度子圖figure,subplot(2,1,1)Jmshow(subcoll);tltle('車牌灰度子圖*);%輸出灰度圖subplot(2,1,2)Jmshow(sbwl);title(,車牌二值

8、子圖,);%輸出車牌的二值圖%Step6計算車牌水平投影,并對水平投影進行峰谷分析histcoll=sum(sbwl);%計算垂直投影histrow=sum(sbwl');%計算水平投影figure,subplot(2,1,1),bar(histcoll);title(唾直投影(含邊框)*);%輸出垂直投影subplot(2,1,2),bar(histrow);title('水平投影(含邊框)');%輸出水平投影figure,subplot(2,1,1),bar(histrow);title('水平投影(含邊框)*);%輸出水平投影subplot(2,1,2),

9、imshow(sbwl);title(,車牌二值子圖,);%輸出二值圖%對水平投影進行峰谷分析meanrow=mean(histrow);%求水平投影的平均值minrow=min(histrow);%求水平投影的最小值levelrow=(meanrow+minrow)/2;%求水平投影的平均值count1=0;1=1;fork=l:hightifhistrow(k)<=levelrowcountl=countl+l;elseifcountl>=lmarkrow(1)=k;%上升點markrowl(1)=countl;%谷寬度(下降點至下一個上升點)1=1+1;endcountl=0

10、;enclendmarkrow2=diff(markrow);%峰距離(上升點至下一個上升點)ml,nl=slze(markrow2);nl=nl+l;markrow(1)=hlght;markrowl(1)=countl;markrow2(nl)=markrow(1)-markrow(1-1);1=0;fork=l:nlmarkrow3(k)=markrow(k+1)-markrowl(k+1);%下降點markrow4(k)=markrow3(k)-markrow(k);%峰寬度(上升點至下降點)markrow5(k)=markrow3(k)-double(uintl6(markrow4(

11、k)/2);%峰中心位置end%Step7計算車牌旋轉(zhuǎn)角度%(1)在上升點至下降點找第一個為1的點m2,n2=size(sbwl);%sbw1的圖像大小ml,nl=slze (markrow4) ;%markrow4 的大小 maxw=max(markrow4);%最大寬度為字符ifmarkrow4(1)?=maxw%檢測上邊ysite=l;kl=l;forl=l:n2fork=l:markrow3(ysite)%從頂邊至第一個峰下降點掃描ifsbwl(kJ)=1xdata(kl)=1;ydata(kl)=k;kl=kl+l;break;endenclenclelse%檢測下邊yslte=nl

12、;ifmarkrow4(nl)=0ifmarkrow4(nl-1)=maxvvysite=0;%無下邊elseysite=nl-1;endendifvsite?=0kl=l;forl=l:n2k=m2;whilek>=markrow(ysite)%從底邊至最后一個峰的上升點掃描ifsbwl(k,l)=1xdata(kl)=1;vdata(kl)=k;kl=kl+l;break;endk=k-l;endendendend%(2)線性擬合,計算與x夾角fresult=fit(xdataAydata'/polyl1);%polylY=pl*x+p2pl=fresult.pl;angle

13、=atan(fresult.pl)*180/pi;%弧度換為度,360/2pi,pi=3.14%(3)旋轉(zhuǎn)車牌圖象subcol=imrotate(subcoll,angle,'bilinear','crop');%旋轉(zhuǎn)車牌圖象sbw=imrotate(sbwl,angle,'bilinear1,'crop*);%旋轉(zhuǎn)圖像figure,subplot(2,1,1)Jmshow(subcol);title('車牌灰度子圖');%輸出車牌旋轉(zhuǎn)后的灰度圖像標題顯示車牌灰度子圖subplot(2,1,2),imshow(sbw);title

14、(n);%輸出車牌旋轉(zhuǎn)后的灰度圖像title(車牌旋轉(zhuǎn)角:num2str(angle),?Color1,'r');%顯示車牌的旋轉(zhuǎn)角度%Steps旋轉(zhuǎn)車牌后重新計算車牌水平投影,去掉車牌水平邊框,獲取字符高度histcoll=sum(sbw);%計算垂直投影histrow=sum(sbw');%計算水平投影figure,subplot(2,1,1),bar(histcoll);title(唾直投影(旋轉(zhuǎn)后)');subplot(2,1,2),bar(histrow);title('水平投影(旋轉(zhuǎn)后)');figure,subplot(2,1,1)

15、,bar(histrow);title('水平投影(旋轉(zhuǎn)后)9;subplot(2,1,2),imshow(sbw);title(,車牌二值子圖(旋轉(zhuǎn)后)*);%去水平(上下)邊框,獲取字符高度maxhight=max(markrow2);findc=find(markrow2=maxhight);rowtop=markrow(findc);rowbot=markrow(findc+1)?markrowl(findc+1);sbw2=sbw(rowtop:rowbot,:);%子圖為(rowbot?i*owtop+l)行maxhight=rowbot-rowtop+1;%字符高度(ro

16、wbot?n)、vtop+1)%Step9計算車牌垂直投影,去掉車牌垂直邊框,獲取車牌及字符平均寬度histcol=sum(sbw2);%計算垂直投影figure,subplot(2,1,1),bar(histcol);tltle('垂直投影(去水平邊框后)*);%輸出車牌的垂直投影圖像subplot(2,1,2),imshow(sbw2);%輸出垂直投影圖像title(車牌字符高度:*,int2str(maxhight),Color,r,);%輸出車牌字符高度%對垂直投影進行峰谷分析meancol=mean(histcol);%求垂直投影的平均值mincol=min(histcol)

17、;%求垂直投影的平均值levelcol=(meancol+mincol)/4;%求垂直投影的1/4countl=0;1=1;fork=l:widthifhistcol(k)<=levelcolcountl=countl+l;elseifcountl>=lmarkcol(1)=k;%字符上升點markcoll(l)=countl;%谷寬度(下降點至下一個上升點)1=1+1;endcountl=0;enclendmarkcol2=diff(markcol);%字符距離(上升點至下一個上升點)ml,nl=size(markcol2);nl=nl+l;markcol(1)=wldth;ma

18、rkcoll(1)=countl;markcoI2(nl)=markcol(1)-markcol(1-1);%Step10計算車牌上每個字符中心位置,計算最大字符寬度maxwidth1=0;fork=l:nlmarkcoB(k)=markcol(k+1)-markcoll(k+1);%字符下降點markcol4(k)=markcol3(k)-markcol(k);%字符寬度(上升點至下降點)markcol5(k)=markcol3(k)-double(uintl6(markcol4(k)/2);%字符中心位置endmarkcol6=diff(markco!5);%字符中心距離(字符中心點至下一

19、個字符中心點)maxs=max(markcol6);%查找最大值,即為第二字符與第三字符中心距離flndmax=find(markcol6=maxs);markcol6(flndmax)=0;maxwidth=max(markcol6);%查找最大值,即為最大字符寬度%Stepll提取分割字符,并變換為22行"4列標準子圖1=1;m2,n2=slze(subcol);figure;fork=flndmax-1:findmax+5cleft=markcol5(k)axwldth/2;cright=markcol5(k)+maxwidtIi/2-2;ifcleft<lcleft=l

20、;cright=maxwidth;endifcright>n2cright=n2;cleft=n2-maxwidth;endSegGray=sbw(rowtop:rovvbot八cleft:cright);SegBwl=sbw(rowtop:rowbot,cleft:cright);SegBw2=imresize(SegBwl,2214);%變換為22行x14列標準子圖subplot(2,nlQJmshow(SegGray);if1=7title(?車牌字符寬度:int2str(maxwidth),?Color*,?r*);endsubplot(2,nl,nl+l)Jmshow(SegB

21、w2);fname=strcat('c:worksamimage',int2str(k)/.jpg');imwrite(SegBw2Jname/jpg1)1=1+1;end%Stepl2將計算計算獲取的字符圖像與樣本庫進行匹配,自動識別出字符代碼。liccode=char(0:9);%建立自動識別字符代碼表SubBw2=zeros(22,14);1=1;m29n2=size(sbw);fork=finclmax-l:fin(lmax+5cleft=markcol5(k)-maxwldth/2;cright=markcol5(k)+maxwidt!i/2-2;ifcleft<lcleft=l;cright=maxvvldth;endifcright>n2cright=n2;cleft=n2-maxwidth;endSe

溫馨提示

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

評論

0/150

提交評論