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

下载本文档

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

文档简介

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

2、;disk',13;%strel函数Bgray=imopen(Sgray,s;%打开sgray s图像figure,imshow(Bgray;title('背景图像'%输出背景图像%用原始图像与背景图像作减法,增强图像Egray=imsubtract(Sgray,Bgray;%两幅图相减figure,imshow(Egray;title('增强黑白图像'%输出黑白图像%Step3 取得最佳阈值,将图像二值化fmax1=double(max(max(Egray;%egray的最大值并输出双精度型fmin1=double(min(min(Egray;%egr

3、ay的最小值并输出双精度型level=(fmax1-(fmax1-fmin1/3/255;%获得最佳阈值bw22=im2bw(Egray,level;%转换图像为二进制图像bw2=double(bw22;%Step4 对得到二值图像作开闭操作进行滤波figure,imshow(bw2;title('图像二值化'%得到二值图像grd=edge(bw2,'canny'%用canny算子识别强度图像中的边界figure,imshow(grd;title('图像边缘提取'%输出图像边缘bg1=imclose(grd,strel('rectangl

4、e',5,19;%取矩形框的闭运算figure,imshow(bg1;title('图像闭运算5,19'%输出闭运算的图像bg3=imopen(bg1,strel('rectangle',5,19;%取矩形框的开运算figure,imshow(bg3;title('图像开运算5,19'%输出开运算的图像bg2=imopen(bg3,strel('rectangle',19,1;%取矩形框的开运算figure,imshow(bg2;title('图像开运算19,1'%输出开运算的图像%Step5 对二值图像进

5、行区域提取,并计算区域特征参数。进行区域特征参数比较,提取车牌区域L,num = bwlabel(bg2,8;%标注二进制图像中已连接的部分Feastats = imfeature(L,'basic'%计算图像区域的特征尺寸Area=Feastats.Area;%区域面积BoundingBox=Feastats.BoundingBox;%x y width height车牌框架大小RGB = label2rgb(L, 'spring', 'k', 'shuffle' %标志图像向RGB图像转换figure,imshow(RGB;t

6、itle('图像彩色标记'%输出框架的彩色图像lx=0;for l=1:numwidth=BoundingBox(l-1*4+3;%框架宽度的计算hight=BoundingBox(l-1*4+4;%框架高度的计算if (width>98 & width<160 & hight>25 & hight<50%框架的宽度和高度的范围lx=lx+1;Getok(lx=l;endendfor k= 1:lxl=Getok(k;startcol=BoundingBox(l-1*4+1-2;%开始列startrow=BoundingBox(l

7、-1*4+2-2;%开始行width=BoundingBox(l-1*4+3+8;%车牌宽hight=BoundingBox(l-1*4+4+2;%车牌高rato=width/hight;%计算车牌长宽比if rato>2 & rato<4break;endendsbw1=bw2(startrow:startrow+hight,startcol:startcol+width-1; %获取车牌二值子图subcol1=Sgray(startrow:startrow+hight,startcol:startcol+width-1;%获取车牌灰度子图figure,subplot(2

8、,1,1,imshow(subcol1;title('车牌灰度子图'%输出灰度图subplot(2,1,2,imshow(sbw1;title('车牌二值子图'%输出车牌的二值图%Step6 计算车牌水平投影,并对水平投影进行峰谷分析histcol1=sum(sbw1; %计算垂直投影histrow=sum(sbw1' %计算水平投影figure,subplot(2,1,1,bar(histcol1;title('垂直投影(含边框'%输出垂直投影subplot(2,1,2,bar(histrow; title('水平投影(含边框&

9、#39;%输出水平投影figure,subplot(2,1,1,bar(histrow; title('水平投影(含边框'%输出水平投影subplot(2,1,2,imshow(sbw1;title('车牌二值子图'%输出二值图%对水平投影进行峰谷分析meanrow=mean(histrow;%求水平投影的平均值minrow=min(histrow;%求水平投影的最小值levelrow=(meanrow+minrow/2;%求水平投影的平均值count1=0;l=1;for k=1:hightif histrow(k<=levelrowcount1=cou

10、nt1+1;elseif count1>=1markrow(l=k;%上升点markrow1(l=count1;%谷宽度(下降点至下一个上升点l=l+1;endcount1=0;endendmarkrow2=diff(markrow;%峰距离(上升点至下一个上升点m1,n1=size(markrow2;n1=n1+1;markrow(l=hight;markrow1(l=count1;markrow2(n1=markrow(l-markrow(l-1;l=0;for k=1:n1markrow3(k=markrow(k+1-markrow1(k+1;%下降点markrow4(k=mark

11、row3(k-markrow(k;%峰宽度(上升点至下降点markrow5(k=markrow3(k-double(uint16(markrow4(k/2;%峰中心位置end%Step7 计算车牌旋转角度%(1在上升点至下降点找第一个为1的点m2,n2=size(sbw1;%sbw1的图像大小m1,n1=size(markrow4;%markrow4的大小maxw=max(markrow4;%最大宽度为字符if markrow4(1 = maxw%检测上边ysite=1;k1=1;for l=1:n2for k=1:markrow3(ysite%从顶边至第一个峰下降点扫描if sbw1(k,l

12、=1xdata(k1=l;ydata(k1=k;k1=k1+1;break;endendendelse %检测下边ysite=n1;if markrow4(n1 =0if markrow4(n1-1 =maxwysite= 0; %无下边elseysite= n1-1;endendif ysite =0k1=1;for l=1:n2k=m2;while k>=markrow(ysite %从底边至最后一个峰的上升点扫描if sbw1(k,l=1xdata(k1=l;ydata(k1=k;k1=k1+1;break;endk=k-1;endendendend%(2线性拟合,计算与x夹角fr

13、esult = fit(xdata',ydata','poly1' %poly1 Y = p1*x+p2p1=fresult.p1;angle=atan(fresult.p1*180/pi; %弧度换为度,360/2pi, pi=3.14%(3旋转车牌图象subcol = imrotate(subcol1,angle,'bilinear','crop' %旋转车牌图象sbw = imrotate(sbw1,angle,'bilinear','crop'%旋转图像figure,subplot(2,1,

14、1,imshow(subcol;title('车牌灰度子图'%输出车牌旋转后的灰度图像标题显示车牌灰度子图subplot(2,1,2,imshow(sbw;title(''%输出车牌旋转后的灰度图像title('车牌旋转角: ',num2str(angle,'度' ,'Color','r'%显示车牌的旋转角度%Step8 旋转车牌后重新计算车牌水平投影,去掉车牌水平边框,获取字符高度histcol1=sum(sbw; %计算垂直投影histrow=sum(sbw' %计算水平投影figure

15、,subplot(2,1,1,bar(histcol1;title('垂直投影(旋转后'subplot(2,1,2,bar(histrow; title('水平投影(旋转后'figure,subplot(2,1,1,bar(histrow; title('水平投影(旋转后'subplot(2,1,2,imshow(sbw;title('车牌二值子图(旋转后'%去水平(上下边框,获取字符高度maxhight=max(markrow2;findc=find(markrow2=maxhight;rowtop=markrow(findc;

16、rowbot=markrow(findc+1-markrow1(findc+1;sbw2=sbw(rowtop:rowbot,:; %子图为(rowbot-rowtop+1行maxhight=rowbot-rowtop+1; %字符高度(rowbot-rowtop+1%Step9 计算车牌垂直投影,去掉车牌垂直边框,获取车牌及字符平均宽度histcol=sum(sbw2; %计算垂直投影figure,subplot(2,1,1,bar(histcol;title('垂直投影(去水平边框后'%输出车牌的垂直投影图像subplot(2,1,2,imshow(sbw2; %输出垂直投

17、影图像title('车牌字符高度:',int2str(maxhight,'Color','r'%输出车牌字符高度%对垂直投影进行峰谷分析meancol=mean(histcol;%求垂直投影的平均值mincol=min(histcol;%求垂直投影的平均值levelcol=(meancol+mincol/4;%求垂直投影的1/4count1=0;l=1;for k=1:widthif histcol(k<=levelcolcount1=count1+1;elseif count1>=1markcol(l=k; %字符上升点markco

18、l1(l=count1; %谷宽度(下降点至下一个上升点l=l+1;endcount1=0;endendmarkcol2=diff(markcol;%字符距离(上升点至下一个上升点m1,n1=size(markcol2;n1=n1+1;markcol(l=width;markcol1(l=count1;markcol2(n1=markcol(l-markcol(l-1;%Step10 计算车牌上每个字符中心位置,计算最大字符宽度maxwidth l=0;for k=1:n1markcol3(k=markcol(k+1-markcol1(k+1;%字符下降点markcol4(k=markcol3

19、(k-markcol(k; %字符宽度(上升点至下降点markcol5(k=markcol3(k-double(uint16(markcol4(k/2;%字符中心位置endmarkcol6=diff(markcol5; %字符中心距离(字符中心点至下一个字符中心点maxs=max(markcol6; %查找最大值,即为第二字符与第三字符中心距离findmax=find(markcol6=maxs;markcol6(findmax=0;maxwidth=max(markcol6;%查找最大值,即为最大字符宽度%Step11 提取分割字符,并变换为22行 14列标准子图l=1;m2,n2=size

20、(subcol;figure;for k=findmax-1:findmax+5cleft=markcol5(k-maxwidth/2;cright=markcol5(k+maxwidth/2-2;if cleft<1cleft=1;cright=maxwidth;endif cright>n2cright=n2;cleft=n2-maxwidth;endSegGray=sbw(rowtop:rowbot,cleft:cright;SegBw1=sbw(rowtop:rowbot,cleft:cright;SegBw2 = imresize(SegBw1,22 14;%变换为22行

21、14列标准子图subplot(2,n1,l,imshow(SegGray;if l=7title('车牌字符宽度:',int2str(maxwidth,'Color','r'endsubplot(2,n1,n1+l,imshow(SegBw2;fname=strcat('c:worksamimage',int2str(k,'.jpg'imwrite(SegBw2,fname,'jpg'l=l+1;end%Step12 将计算计算获取的字符图像与样本库进行匹配,自动识别出字符代码。liccode=ch

22、ar('0':'9' 'A':'Z' '粤桂海云贵川京津沪' %建立自动识别字符代码表SubBw2=zeros(22,14;l=1;m2,n2=size(sbw;for k=findmax-1:findmax+5cleft=markcol5(k-maxwidth/2;cright=markcol5(k+maxwidth/2-2;if cleft<1cleft=1;cright=maxwidth;endif cright>n2cright=n2;cleft=n2-maxwidth; endSegBw1=sbw(rowtop:rowbot,cleft:cright;Seg

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论