1、汽车车牌图像的区域分割与字符提取数字图像处理课程设计报告课设题目:汽车车牌图像的区域分割与字符提取学 院:信息工程学院专 业:通信工程班 级:姓 名: 学 号: 指导教师: 目 录不要删除行尾的分节符,此行不会被打印一课程设计任务在交通管理过程中,通常采用视频监控方式对闯红灯和超速等违章车辆进行监督。对违章车辆,需要自动检测车牌信息,提取车牌号码,以便查找车主信息和监督管理。国内常用的一般车牌通常是是蓝底白字,长宽比3:1。1、对车牌图像进行预处理,然后进行车牌定位;2、进行字符分割;2、对车牌中的数字、字母和汉字进行提取和识别;3、要求自行设计方案、编写代码实现上述功能,并设计车牌识别的软件
2、界面。二课程设计原理及设计方案1.系统简述一个完整的车牌识别系统闭应包括车辆检测、图像采集、图像预处理、车牌定位、字符分割、字符识别等单元。当车辆到达触发图像采集单元时,系统采集当前的视频图像。车辆识别单元对图像进行处理,定位出牌照位置,再将车牌中的字符分割出来进行识别,然后组成车牌号码输出。车牌识别系统原理如图l所示。车辆图像采集图像预处理车牌定位字符分割字符识别输出结果图1 车牌识别系统原理图(1)图像预处理:对汽车图像进行图像转换、图像增强和边缘检测等。(2)车牌定位:从预处理后的汽车图像中分割出车牌图像。即在一幅车辆图像中找到车牌所在的位置。(3)字符分割:对车牌图像进行几何校正、去噪
3、、二值化以及字符分割以从车牌图像中分离出组成车牌号码的单个字符图像(4)字符识别:对分割出来的字符进行预处理(二值化、归一化),然后分析提取,对分割出的字符图像进行识别给出文本形式的车牌号码。为了用于牌照的分割和牌照字符的识别,原始图象应具有适当的亮度,较大的对比度和清晰可辩的牌照图象。但由于该系统的摄像部分工作于开放的户外环境,加之车辆牌照的整洁度、自然光照条件、拍摄时摄像机与牌照的矩离和角度以及车辆行驶速度等因素的影响,牌照图象可能出现模糊、歪斜和缺损等严重缺陷,因此需要对原始图象进行识别前的预处理。牌照的定位和分割是牌照识别系统的关键技术之一,其主要目的是在经图象预处理后的原始灰度图象中
4、确定牌照的具体位置,并将包含牌照字符的一块子图象从整个图象中分割出来,供字符识别子系统识别之用,分割的准确与否直接关系到整个牌照字符识别系统的识别率。由于拍摄时的光照条件、牌照的整洁程度的影响,和摄像机的焦距调整、镜头的光学畸变所产生的噪声都会不同程度地造成牌照字符的边界模糊、细节不清、笔划断开或粗细不均,加上牌照上的污斑等缺陷,致使字符提取困难,进而影响字符识别的准确性。因此,需要对字符在识别之前再进行一次针对性的处理。车牌识别的最终目的就是对车牌上的文字进行识别。识别方法目前主要有基于模板匹配算法和基于人工神经网络算法。2.图像预处理输入车牌图象灰度校正平滑处理提取边缘图2 预处理及边缘提
5、取流程图2.1灰度变换输入的彩色图像包含大量颜色信息,会占用较多的存储空间,且处理时也会降低系统的执行速度,因此对图像进行识别等处理时常将彩色图像转换为灰度图像,以加快处理速度。可对图像进行灰度化处理、提取背景图像、增强处理、图像二值化,边缘检测、滤波等处理。然后采用robert算子进行边缘检测,再用imopen和imclose对所得二值图像作开、闭操作进行滤波。彩色图像分为R、G、B三个分量,分别显示出红、绿、蓝等各种颜色,灰度化就是使彩色的R、G、B 分量相等的过程。灰度值大的像素点比较亮(像素值最大为255,为白色) ,反之比较暗(像素值最小为 0,是黑色) 。 图像灰度化的算法主要有以
6、下 3 种: 1)最大值法:使转化后R、G、B的值等于转化前 3 个值中最大的一个,即:R=G=B=max(R,G,B),这种方法转换的灰度图亮度很高。2)平均值法:使转化后R、G、B的值为转化前R、G、B的平均值 R=G=B=(R+G+B)/3 这种方法产生的灰度图像比较柔和。3)加权平均值法:按照一定的权值,对R、G、B的值加权平均,即: R=G=B=(R+G+B)/3,其中、分别为 R、G、B 的权值。、取不同的值,将形成不同的灰度图像。由于人眼对绿色最为敏感,红色次之,对蓝色的敏感性最低,因此使将得到较易识别的灰度图像。一般情况下,当=0.299、=0.587、=0.114时,得到的灰
7、度图像效果最好。2.2边缘提取数字图像的边缘检测是图像分割、目标区域的识别、区域形状提取等图像分析领域十分重要的基础。边缘是图像的重要特征,图像理解和分析的第一步往往就是边缘检测。目前,边缘检测已成为计算机视觉研究领域最活跃的课题之一,在工程应用中占有十分重要的地位。车牌的一个重要特征就是在该区域存在大量的边缘信息,所以边缘检测对于我们进行车牌识别来说也是相当重要的。边缘是以图像的局部特征不连续的形式出现的,也就是指图像局部亮度变化最显著的部分,如灰度值的突变、颜色的突变、纹理结构的突变等,同时边缘也是不同区域的分界处。图像边缘有方向和幅度两个特性,通常沿边缘的走向灰度变化平缓,垂直于边缘走向
8、灰度变化剧烈。由于边缘是图像上灰度变化最剧烈的地方,传统的边缘检测就利用这个特点,通过计算图像中像素的梯度值来确定边缘点。常用的图像边缘提取算子有Roberts算子、sobel算子、Prewitt算子、Laplacian算子等,它们的模板分别如下:(1)Roberts梯度算子:(2)Sobel算子:(3)Prewitc算子:(4)Laplacian算子:3.车牌定位自然环境下,汽车图像背景复杂,光照不均匀,在自然背景中准确地确定牌照区域是整个图像识别过程中的关键。首先对采集到的图像进行大范围相关搜索,找到符合汽车牌照特征的若干区域作为候选区,然后对这些侯选区域做进一步分析、评判,最后选定一个最
9、佳区域作为牌照区域。将其从图像中分割嘲出来,同时要考虑车牌倾斜问题。算法流程如下:(1)对二值图像进行区域提取。计算并比较区域特征参数,提取车牌区域。进行闭运算,可使得水平相邻的边缘连接成为连通区域;进行开运算可使得车牌区域与其它背景区域分开,成为独立的连通域。(2)计算包含所标记区域的最小宽和高。并根据先前知识,提取并显示更接近的车牌二子值图。(3)通过计算车牌旋转角度解决车牌倾斜问题。由于车牌倾斜导致投影效果峰谷不明显,需车牌矫正处理,采取线性拟合方法,计算出车牌上边或下边图像值为1的点拟合直线与水平X轴的夹角。4.字符分割完成牌照区域的定位后,再将牌照区域分割为单个字符,可采用垂直投影法
10、。由于字符在垂直方向上的投影必然在字符间或字符内的间隙处取得局部最小值并且该位置应满足牌照的字符书写格式、字符、尺寸限制等条件。利用垂直投影法实现复杂环境下汽车图像中的字符分割效果较好。通过分析计算字符的水平投影和垂直投影,可获得车牌字符高度、字符顶行与尾行、字符宽度、每个字符的中心位置,以方便提取分割字符。然后计算车牌垂直投影,去掉车牌垂直边框,获取车牌及字符平均宽度。最后计算车牌每个字符的中心位置和最大字符宽度,提取分割字符,其算法流程如图3所示。图3车牌分割的MATLAB算法流程此处采用的方法为寻找连续有文字的块,若长度大于某阈值,则认为该块有两个字符组成,需要分割。算法如下:m,n=s
11、ize(d),逐排检查有没有白色像素点,设置1=j=50)&(PY11) PY1=PY1-7;endPY2=MaxY;while (Y1(PY2,1)=50)&(PY2y) PY2=PY2+7;end%绘制列曲线图X1=zeros(1,x);% 累计列像素灰度值for j=1:x for i=PY1:PY2 if(I6(i,j,1)=1) X1(1,j)= X1(1,j)+1; end endendPX1=1;while (X1(1,PX1)3)&(PX1x) PX1=PX1+1;endPX2=x;while (X1(1,PX2)PX1) PX2=PX2-1;endDW=Scolor(PY1:
12、PY2,PX1:PX2,:);%车牌定位后图像7.进一步车牌定位经过上述方法分割出来的车牌图像中存在目标物体、背景还有噪声,要想从图像中直接提取出目标物体,最常用的方法就是设定一个阈值T,用T将图像的数据分成两部分:大于T的像素群和小于T的像素群,即对图像二值化。然后通过行像素点的累计值去除顶端和底端不感兴趣的地方。if isrgb(DW) I1 = rgb2gray(DW); %将RGB图像转化为灰度图像else I1=DW;endg_max=double(max(max(I1);g_min=double(min(min(I1);T=round(g_max-(g_max-g_min)/3);
13、 % T 为二值化的阈值m,n=size(I1);% d:二值图像imane_bw=im2bw(I1,T/256); %二值化车牌图像 y1,x1,z1=size(imane_bw);I3=double(imane_bw);TT=1;%去除图像顶端和底端的不感兴趣区域%Y1=zeros(y1,1); for i=1:y1 for j=1:x1 if(I3(i,j,1)=1) Y1(i,1)= Y1(i,1)+1 ; end end endPy1=1;Py0=1;while (Y1(Py0,1)9)&(Py0=9)&(Py1y1) Py1=Py1+1; endI2=imane_bw(Py0:Py
14、1,:,:); %目标车牌区域8.车牌字符分割字符分割的算法很多,因为车牌字符间间隔较大,通常不会出现字符粘连情况,所以此处采用的方法为寻找连续有文字的块,若长度大于某阈值,则认为该块有两个字符组成,需要分割。一般分割出来的字符要进行进一步的处理,以满足下一步字符识别的需要。但是对于车牌的识别,并不需要太多的处理就已经可以达到正确识别的目的。在此只进行了归一化处理,然后进行后期处理。% 寻找连续有文字的块,若长度大于某阈值,则认为该块有两个字符组成,需要分割d=qiege(I2);m,n=size(d);k1=1;k2=1;s=sum(d);j=1;while j=n while s(j)=0
15、 j=j+1; end k1=j; while s(j)=0 & j=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;wide=0; while sum(d(:,wide+1)=0 wide=wide+1; end if widey2 flag=1;word1=temp; % WORD 1 end d(:,1:wide)=0
16、;d=qiege(d); endendword2,d=getword(d);% 分割出第二个字符word3,d=getword(d); % 分割出第三个字符word4,d=getword(d); % 分割出第四个字符word5,d=getword(d); % 分割出第五个字符word6,d=getword(d); % 分割出第六个字符word7,d=getword(d); % 分割出第七个字符m,n=size(word1);%归一化大小为22*14word1=imresize(word1,22 14);word7=imresize(word7,22 14);imwrite(word1,1.jp
17、g);imwrite(word7,7.jpg);9.车牌字符识别此处采用相减的方法来求得字符与模板中哪一个字符最相似,然后找到相似度最大的输出。汽车牌照的字符一般有七个,大部分车牌第一位是汉字,通常代表车辆所属省份,紧接其后的为字母与数字。车牌字符识别与一般文字识别在于它的字符数有限,汉字共约30多个,大写英文字母26个,数字10个。首先取字符模板,接着依次取待识别字符与模板进行匹配,将其与模板字符相减,得到的非0值越少那么就越匹配。把每一幅相减后的图的非0值个数保存,即为识别出来的结果。源程序:liccode=char(0:9 A:Z 藏川甘赣贵桂黑沪吉济冀津晋京警兰辽领鲁蒙闽宁青琼陕使苏皖
18、湘新学渝豫粤云浙); %建立自动识别字符代码表 tt=1;l=1;for I=1:7 ii=int2str(I); t=imread(ii,.jpg); t=255-t; level=graythresh(t); t=im2bw(t,level); SegBw2=imresize(t,22 14,nearest); if tt=1 %第一位汉字识别 kmin=37; kmax=72; t=t; SegBw2=imresize(t,22 14,nearest); elseif tt=2 %第二位 AZ 字母识别 kmin=11; kmax=36; else %第三位以后是字母或数字识别 kmin
19、=1; kmax=36; end for k2=kmin:kmax fname=strcat(code moduleSam,liccode(k2),.jpg); SamBw22 = imread(fname); SamBw22 = rgb2gray(SamBw22); SamBw2=imresize(SamBw22,22 14,nearest); level=graythresh(SamBw2); SamBw2=im2bw(SamBw2,level); for i=1:22 for j=1:14 SubBw2(i,j)=SegBw2(i,j)-SamBw2(i,j); end end % 以上
20、相当于两幅图相减得到第三幅图 Dmax=0; for k1=1:22 for l1=1:14 if ( SubBw2(k1,l1) 0 | SubBw2(k1,l1) 0 ) Dmax=Dmax+1; end end end Error(k2)=Dmax; end Error1=Error(kmin:kmax); MinError=min(Error1); findc=find(Error1=MinError); if tt=1 findc=findc+36; end if tt=2 findc=findc+10; end tt=tt+1; res=liccode(findc); shibie
21、jieguo(1,l)=res; l=l+1;end%getword子函数为:function word,result=getword(d)word=;flag=0;y1=8;y2=0.5; while flag=0 m,n=size(d); wide=0; while sum(d(:,wide+1)=0 & wide=n-2 wide=wide+1; end temp=qiege(imcrop(d,1 1 wide m); m1,n1=size(temp); if widey2 d(:,1:wide)=0; if sum(sum(d)=0 d=qiege(d); % 切割出最小范围 else
22、 word=;flag=1; end else word=qiege(imcrop(d,1 1 wide m); d(:,1:wide)=0; if sum(sum(d)=0; d=qiege(d);flag=1; else d=; end end end result=d;%qiege子函数为:function e=qiege(d)m,n=size(d);top=1;bottom=m;left=1;right=n; % initwhile sum(d(top,:)=0 & top1 bottom=bottom-1;endwhile sum(d(:,left)=0 & left=1right=right-1;enddd=right-left;hh=bottom-top;e=imcrop(d,left top dd hh);得出车牌检测结果为:陕A906L410
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1