《汽车车牌图像的区域分割与字符提取》由会员分享,可在线阅读,更多相关《汽车车牌图像的区域分割与字符提取(19页珍藏版)》请在金锄头文库上搜索。
1、数字图像处理课程设计报告课设题目: 汽车车牌图像的区域分割与字符提取学 院: 信息工程学院专 业: 通信工程班 级:姓 名: 学 号: 指导教师: 目 录2一. 课 程设计任务 .错误!未定义书签。二. 课程设计原理及设计方案 .1三. 课程设计的步骤和结果 .6四. 课程设计总结 .16五. 设计体会 .16六. 参考文献 .17一课程设计任务在交通管理过程中,通常采用视频监控方式对闯红灯和超速等违章车辆进行监督。对违章车辆,需要自动检测车牌信息,提取车牌号码,以便查找车主信息和监督管理。国内常用的一般车牌通常是是蓝底白字,长宽比 3:1。31、对车牌图像进行预处理,然后进行车牌定位;2、进
2、行字符分割;2、对车牌中的数字、字母和汉字进行提取和识别;3、要求自行设计方案、编写代码实现上述功能,并设计车牌识别的软件界面。二课程设计原理及设计方案1.系统简述一个完整的车牌识别系统闭应包括车辆检测、图像采集、图像预处理、车牌定位、字符分割、字符识别等单元。当车辆到达触发图像采集单元时,系统采集当前的视频图像。车辆识别单元对图像进行处理,定位出牌照位置,再将车牌中的字符分割出来进行识别,然后组成车牌号码输出。车牌识别系统原理如图 l 所示。车辆 图像采集 图像预处理 车牌定位字符分割字符识别输出结果图 1 车牌识别系统原理图(1)图像预处理:对汽车图像进行图像转换、图像增强和边缘检测等。(
3、2)车牌定位:从预处理后的汽车图像中分割出车牌图像。即在一幅车辆图像中找到车牌所在的位置。(3)字符分割:对车牌图像进行几何校正、去噪、二值化以及字符分割以从车牌图像中分离出组成车牌号码的单个字符图像(4)字符识别:对分割出来的字符进行预处理(二值化、归一化) ,然后分析提取,对分割出的字符图像进行识别给出文本形式的车牌号码。为了用于牌照的分割和牌照字符的识别,原始图象应具有适当的亮度,较大的对比度和清晰可辩的牌照图象。但由于该系统的摄像部分工作于开放的户外环境,加之车辆牌照的整洁度、自然光照条件、拍摄时摄像机与牌照的矩离和角度以及车辆行驶速度等因素的影响,牌照图象可能出现模糊、歪斜和缺损等严
4、重缺陷,因此需要对原始图象进行识别前的预处理。牌照的定位和分割是牌照识别系统的关键技术之一,其主要目的是在经图象预处理后的原始灰度图象中确定牌照的具体位置,并将包含牌照字符的一块子图象从整个图象中分割出来,供字符识别子系统识别之用,分割的准确与否直接关系到整个牌照字符识别系统的识别率。由于拍摄时的光照条件、牌照的整洁程度的影响,和摄像机的焦距调整、镜头的光学畸变所产生的噪声都会不同程度地造成牌照字符的边界模糊、细节不清、笔划断开或粗细不均,加上牌照上的污斑等缺陷,致使字符提取困难,进而影响字符识别的准确性。因此,需要对字符在识别之前再进行一次针对性的处理。车牌识别的最终目的就是对车牌上的文字进
5、行识别。识别方法目前主要有4基于模板匹配算法和基于人工神经网络算法。2.图像预处理输入车牌图象灰度校正平滑处理提取边缘图 2 预处理及边缘提取流程图2.1 灰度变换输入的彩色图像包含大量颜色信息,会占用较多的存储空间,且处理时也会降低系统的执行速度,因此对图像进行识别等处理时常将彩色图像转换为灰度图像,以加快处理速度。可对图像进行灰度化处理、提取背景图像、增强处理、图像二值化,边缘检测、滤波等处理。然后采用 robert 算子进行边缘检测,再用 imopen 和 imclose 对所得二值图像作开、闭操作进行滤波。彩色图像分为 R、G、B 三个分量,分别显示出红、绿、蓝等各种颜色,灰度化就是使
6、彩色的 R、G、B 分量相等的过程。灰度值大的像素点比较亮(像素值最大为 255,为白色) ,反之比较暗(像素值最小为 0,是黑色) 。 图像灰度化的算法主要有以下 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
7、的权值。RGB、 、 取不同的值,将形成不同的灰度图像。由于人眼对绿色最为敏感,RB红色次之,对蓝色的敏感性最低,因此使 将得到较易识别的灰度图GRB像。一般情况下,当 =0.299、 =0.587、 =0.114 时,得到的灰度图像R效果最好。2.2 边缘提取数字图像的边缘检测是图像分割、目标区域的识别、区域形状提取等图像分析领域十分重要的基础。边缘是图像的重要特征,图像理解和分析的第一步往往就是边缘检测。目前,边缘检测已成为计算机视觉研究领域最活跃的课题5之一,在工程应用中占有十分重要的地位。车牌的一个重要特征就是在该区域存在大量的边缘信息,所以边缘检测对于我们进行车牌识别来说也是相当重要
8、的。边缘是以图像的局部特征不连续的形式出现的,也就是指图像局部亮度变化最显著的部分,如灰度值的突变、颜色的突变、纹理结构的突变等,同时边缘也是不同区域的分界处。图像边缘有方向和幅度两个特性,通常沿边缘的走向灰度变化平缓,垂直于边缘走向灰度变化剧烈。由于边缘是图像上灰度变化最剧烈的地方,传统的边缘检测就利用这个特点,通过计算图像中像素的梯度值来确定边缘点。常用的图像边缘提取算子有 Roberts 算子、sobel 算子、Prewitt 算子、Laplacian 算子等,它们的模板分别如下:(1)Roberts 梯度算子:(2)Sobel 算子:(3)Prewitc 算子:(4)Laplacian
9、 算子:3.车牌定位自然环境下,汽车图像背景复杂,光照不均匀,在自然背景中准确地确定牌照区域是整个图像识别过程中的关键。首先对采集到的图像进行大范围相关搜索,找到符合汽车牌照特征的若干区域作为候选区,然后对这些侯选区域做进一步分析、评判,最后选定一个最佳区域作为牌照区域。将其从图像中分割嘲出来,同时要考虑车牌倾斜问题。算法流程如下:(1)对二值图像进行区域提取。计算并比较区域特征参数,提取车牌区域。进行闭运算,可使得水平相邻的边缘连接成为连通区域;进行开运算可使得车牌区域与其它背景区域分开,成为独立的连通域。6(2)计算包含所标记区域的最小宽和高。并根据先前知识,提取并显示更接近的车牌二子值图
10、。(3)通过计算车牌旋转角度解决车牌倾斜问题。由于车牌倾斜导致投影效果峰谷不明显,需车牌矫正处理,采取线性拟合方法,计算出车牌上边或下边图像值为 1 的点拟合直线与水平 X 轴的夹角。4.字符分割完成牌照区域的定位后,再将牌照区域分割为单个字符,可采用垂直投影法。由于字符在垂直方向上的投影必然在字符间或字符内的间隙处取得局部最小值并且该位置应满足牌照的字符书写格式、字符、尺寸限制等条件。利用垂直投影法实现复杂环境下汽车图像中的字符分割效果较好。通过分析计算字符的水平投影和垂直投影,可获得车牌字符高度、字符顶行与尾行、字符宽度、每个字符的中心位置,以方便提取分割字符。然后计算车牌垂直投影,去掉车
11、牌垂直边框,获取车牌及字符平均宽度。最后计算车牌每个字符的中心位置和最大字符宽度,提取分割字符,其算法流程如图 3 所示。图 3 车牌分割的 MATLAB 算法流程此处采用的方法为寻找连续有文字的块,若长度大于某阈值,则认为该块有两个字符组成,需要分割。算法如下:m,n=size(d) ,逐排检查有没有白色像素点,设置1=50)&(PY11)PY1=PY1-7;endPY2=MaxY;while (Y1(PY2,1)=50)&(PY2PX1)PX2=PX2-1;endDW=Scolor(PY1:PY2,PX1:PX2,:);%车牌定位后图像中中中中中中中7. 进一步车牌定位经过上述方法分割出来
12、的车牌图像中存在目标物体、背景还有噪声,要想从图像中直接提取出目标物体,最常用的方法就是设定一个阈值 T,用 T 将图像的数据分成两部分:大于 T 的像素群和小于 T 的像素群,即对图像二值化。11然后通过行像素点的累计值去除顶端和底端不感兴趣的地方。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); % T 为二值化的阈值m,n=size(I1);% d:二值
13、图像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:y1for j=1:x1if(I3(i,j,1)=1) Y1(i,1)= Y1(i,1)+1 ;end end endPy1=1;Py0=1;while (Y1(Py0,1)=9)&(Py1=round(n/6.5)val,num=min(sum(d(:,k1+5:k2-5);d(:,k1+num+5)=0; % 分割endend% 再切割d=q
14、iege(d);% 切割出 7 个字符y1=10;y2=0.25;flag=0;word1=;while flag=0m,n=size(d);left=1;wide=0;while sum(d(:,wide+1)=0wide=wide+1;endif widey2flag=1;word1=temp; % WORD 1endd(:,1:wide)=0;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*