车牌识别及matlab程序_第1页
车牌识别及matlab程序_第2页
车牌识别及matlab程序_第3页
车牌识别及matlab程序_第4页
车牌识别及matlab程序_第5页
已阅读5页,还剩9页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、车牌识别及matlab附录车牌识别程序clear;closeall;%Stepl获取图像装入待处理彩色图像并显示原始图像Scolor=imreadC3.jpg*);%lmread函数读取图像文件%将彩色图像转换为黑白并显示Sgray=rgb2gray(Scolor);%rgb2gray转换成灰度图figure,Imshow(Scolor),title('原始彩色图像');%figure命令同时显示两幅图figure,imshow(Sgray),title('原始黑白图像');%Step2图像预处理对Sgray原始黑白图像进行开操作得到图像背景s=strel(&#

2、39;disk',13);%strel函数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);%转换图像为二进制图像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对二值图像进行区域提取,并计算区域特征参数。进行区域特征参数比较,提取车牌区域L,num=bwlabel(

5、bg2,8);%标注二进制图像中已连接的部分Feastats=imfeature(L,'basic*);%计算图像区域的特征尺寸Area=Feastats.Area;%区域面积BoundingBox=Feastats.BouncIingBox;%xywidthheight车牌框架大小RGB=labe!2rgb(L,'spring*,'k'shuffle*);%标志图像向RGB图像转换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计算车牌旋转角度%(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)旋转车牌图象subcol=imrotate(subcoll,angle,'bilinear','crop');%旋转车牌图象sbw=imrotate(sbwl,angle,'bilinear1,'crop*);%旋转图像figure,subplot(2,1,1)Jmshow(subcol);title('车牌灰度子图');%输出车牌旋转后的灰度图像标题显示车牌灰度子图subplot(2,1,2),imshow(sbw);title

14、(n);%输出车牌旋转后的灰度图像title(车牌旋转角:num2str(angle),?Color1,'r');%显示车牌的旋转角度%Steps旋转车牌后重新计算车牌水平投影,去掉车牌水平边框,获取字符高度histcoll=sum(sbw);%计算垂直投影histrow=sum(sbw');%计算水平投影figure,subplot(2,1,1),bar(histcoll);title(唾直投影(旋转后)');subplot(2,1,2),bar(histrow);title('水平投影(旋转后)');figure,subplot(2,1,1)

15、,bar(histrow);title('水平投影(旋转后)9;subplot(2,1,2),imshow(sbw);title(,车牌二值子图(旋转后)*);%去水平(上下)边框,获取字符高度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. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论