基于matlab的车牌识别系统的设计与实现剖析.doc

上传人:小飞机 文档编号:4957828 上传时间:2023-05-26 格式:DOC 页数:22 大小:289.60KB
返回 下载 相关 举报
基于matlab的车牌识别系统的设计与实现剖析.doc_第1页
第1页 / 共22页
基于matlab的车牌识别系统的设计与实现剖析.doc_第2页
第2页 / 共22页
基于matlab的车牌识别系统的设计与实现剖析.doc_第3页
第3页 / 共22页
基于matlab的车牌识别系统的设计与实现剖析.doc_第4页
第4页 / 共22页
基于matlab的车牌识别系统的设计与实现剖析.doc_第5页
第5页 / 共22页
点击查看更多>>
资源描述

《基于matlab的车牌识别系统的设计与实现剖析.doc》由会员分享,可在线阅读,更多相关《基于matlab的车牌识别系统的设计与实现剖析.doc(22页珍藏版)》请在三一办公上搜索。

1、图形图像处理与应用课程设计报告目 录引言21设计原理22系统框架结构22.1工作流程33.设计步骤43.1设计方案44.各模块的实现44.1图像预处理44.1.1图像灰度化44.1.2图像的边缘检测54.2车牌定位和分割74.2.1车牌的定位74.2.2车牌的分割94.2.3对定位后的彩色车牌的进一步处理94.3字符的分割和归一化处理114.3.1字符的分割114.3.2字符的归一化处理125实验结果和分析126.实验总结14主要参考文献15附录16实验体会21基于MATLAB的车牌识别系统的设计字符分割的设计引言 介绍当前的发展背景车辆的牌照是机动车的识别标志,在交通管理中有着重要的作用。通

2、过汽车车牌识别系统可以监控车辆的信息和行驶状况,可以最迅速的实现车辆控制以及交通状况的调控,所以对于现代智能交通至关重要。该系统主要有两大模块:图像处理模块和字符识别模块。本文主要对图像处理模块进行设计和研究。图像处理模块的质量好坏更是衡量整个系统成功与否的关键。MATLAB语言对于图像的处理非常方便,能够直接调用编好的函数,为整个系统提供了保障。1.设计原理车牌识别系统的摄像头通过对经过指定区域的机动车辆进行拍照,因为照片会受到光照、拍摄位置和车辆行驶速度的影响,导致拍摄的图片不能准确的确定汽车的车牌。而车牌识别系统就通过对机动车辆的照片进行图像预处理、车牌定位、字符分割、字符识别等技术手段

3、,从而得到清晰的机动车牌照的照片,从而提高现代智能交通的管理效率,可以说车牌识别系统对于现代智能交通至关重要。2.系统框架结构汽车车牌自动识别系统主要包括触发拍照、图像采集、图像预处理、车牌定位、字符分割、字符识别、输出结果等单元。图像采集车牌定位字符分割字符识别输出结果触发牌照图像预处理图2-1车牌识别系统工作流程图2.1工作流程:触发拍照:该单元会自动检测车辆在指定区域的存在,现有的成熟技术的有线圈触发、视频触发、红外触发、雷达触发以及激光触发。其中线圈触发和视频触发得到了广泛的应用。图像采集:该单元是指道路上安装的摄像头在检测到有车辆通过的同时进行拍照并借助网络传送到汽车自动识别系统。图

4、像预处理:该单元是指车牌识别系统对拍摄的汽车图片进行灰度化和边缘检测等处理。车牌定位:是指对预处理过的汽车图片进行处理,把车牌部分进行定位,把无用的部分去除,得到定位好的车牌图片。字符分割:对已经定位的车牌图片的进行字符分割,将车牌分割为7个单一的字符图片字符识别:将已经分割出来的七个字符进行识别。输出结果:输出识别结果,并进行数据存储。3.设计步骤3.1.设计方案:该系统主要是由图像处理和字符识别两部分组成。其中图像处理部分包括图像预处理、边缘提取模块、牌照的定位以及分割模块。字符识别部分可以分为字符分割与特征提取和单个字符识别两个模块。字符识别部分要求照片清晰,但由于该系统的摄像头长时间在

5、室外工作,加上光照条件、摄像头角度和距离、车辆自身条件以及车辆的行驶速度的影响,想拍出较理想的图片很困难。因此,我们要对摄像头拍摄的图片进行预处理,主要包括图片灰度化和图片边缘提取等。车牌定位和车牌分割是整个系统的关键,其作用是在经图象预处理后的灰度图象中确定牌照的具体位置,并将包含牌照字符的一块子图象从整个图象中分割出来,供字符识别子系统识别之用,分割的准确与否直接关系到整个牌照字符识别系统的识别率。车牌识别系统的最终目的就是将不清楚的车牌照片进行识别,输出清晰的图片。现在字符识别的常用方法有模板匹配法和神经网络模型法。4.各模块的实现车牌识别系统包括图像采集、图像预处理、车牌定位、字符分割

6、、字符识别等模块,本文主要研究图像预处理、车牌定位和字符分割三个模块。4.1图像预处理4.1.1图像灰度化:因为车牌识别系统的摄像头拍摄的图片是彩色的,图片的背景颜色有时和车牌的颜色相似,而且彩色图片会占用较大的存储空间,使计算机处理速度变慢,加重计算机负担,所以我们要对拍摄的照片进行灰度化处理。对于将彩色图像转换成灰度图像时, 目前比较主流的灰度化方法叫平均值法,公式为: H=0.229R+0.588G+0.144B公式中H表示灰度图的亮度值;R代表彩色图像红色分量值;G代表色彩图像绿色分量值;B代表彩色图像蓝色分量值。RGB 三分量前的系数为经验加权值。加权系数的取值建立在人眼的视觉模型之

7、上。对于人眼较为敏感的绿色取较大的权值; 对人眼较为不敏感的蓝色则取较小的权值。通过该公式转换的灰度图能够比较好地反应原图像的亮度信息。在MATLAB中我们可以调用im2gray函数对图像进行灰度化处理。4.1.2图像的边缘检测:边缘是指图像灰度发生空间突变或者在梯度方向上发生突变的像素的集合。用摄像机采集到的机动车图像由于受到噪声干扰以及车辆本身的影响,使得获得的图像质量不理想。因此,在进行对汽车牌照的定位及字符识别之前需要先对车辆图像进行边缘检测处理,提高图像的质量,使其易于后面的分割和识别。通过良好的边缘检测可以大幅度的降低噪声、分离出复杂环境中的车辆图像、保留完好的车牌字符信息,方便后

8、面的车牌精确定位与字符识别。由于车牌识别系统摄像头安装位置固定以及机动车车牌的固有属性,我们可以发现机动车车牌图像都处在水平的矩形区域,在图像中位置较为固定,车牌中字符都是按水平方向排列。因为有这些明显的特征,经过适当的图像变换,可以清晰的呈现出车牌的边缘。本文采用经典的Roberts边缘检测算子来对图像进行边缘检测。灰度化和边缘检测的MATLAB程序如下:I=imread(zhaopian.jpg);figure(1),imshow(I);title(原图)I1=rgb2gray(I);figure(2),imshow(I1);title(灰度图);I2=edge(I1,robert,0.1

9、5,both);figure(3),imshow(I2);title(Robert边缘检测)图4-1 原始图片图4-2 灰度图图4-3 Robert算子边缘检测4.2车牌定位和分割该系统的摄像头拍摄的图片是整个机动车的图片,而只有车牌部分是对系统有用的。所以我们要对照片进行车牌定位和分割。车牌的定位和分割是从经过图像预处理后的灰度图像中确定牌照位置,并将车牌部分从整个图像中分割出来,从而进行字符识别。车牌图像的灰度图的车牌部分是一个水平度很高的长方形图样,在原图中比较集中,且灰度值和周围图样有明显差异,因此很容易用边缘检测来对图像进行分割。车牌定位和分割的准确度直接关系到最后的字符识别的质量。

10、对图像进行图像腐蚀除去图像杂质通过计算寻找X和Y方向车牌的区域完成车牌定位对定位后的彩色车牌的进一步处理图4-4车牌定位流程图4.2.1车牌定位机动车图像经过灰度化和边缘检测的处理后,边缘得到了加强,牌照区域已经非常明显。本文采用的是用数学形态学来进行图像处理和模式识别。数学形态学用具有一定形态的机构元素去量度和提取图像中的对应形状以达到对图像分析和识别的目的,能有效的去除噪声,保留图像原有信息的同时提取的边缘比较平滑,提取的图像骨架也比较连续,断点少。现在我们将经过预处理的图像进行图像腐蚀以及去除杂质,就可以得到相对准确的车牌位置。图4-5腐蚀后的图像图4-6.平滑图像的轮廓图4-7从对象中

11、移除小对象后图像4.2.2车牌分割本文车牌部分的分割采用的是利用车牌彩色信息的彩色分割法。使用统计彩色像素点的方法分割出车牌区域,确定车牌底色蓝色RGB对应的灰度范围,然后统计在行方向的颜色范围内的像素点数量,确定车牌在行方向的区域。然后,在分割出的行区域内,统计列方向蓝色像素点的数量,最终确定完整的车牌区域。图4-8车牌对位的图像4.2.3对定位后的彩色车牌的进一步处理定位后车牌图像是彩色的,会占用较大的存储空间,加重计算机负担。且车辆图片不可避免存在噪声,所以要对图像进行灰度化,二值化以及滤波处理。图像的二值化处理就是将图像上的点的灰度置为两个数值,通常为0或255,使整个图像呈现出明显的

12、黑白效果。也就是将256个亮度等级的灰度图像通过适当的门限值选取而获得仍然可以反映图像整体和局部特征的二值化图像。滤波则是为了除去图像噪声。滤波方法有多种,本文采取的滤波方法为均值滤波。均值滤波是典型的线性滤波算法,指在图像上对目标像素给一个模板,该模板包括了其周围的临近像素。再用模板中的全体像素的平均值来代替原来像素值。 图4-9车牌的进一步处理4.3字符分割与归一化m,n=size(d),逐排检查有没有白色像素点,设置1=j=5)&(PY11) PY1=PY1-1; end PY2=MaxY; while (Blue_y(PY2,1)=5)&(PY2y) PY2=PY2+1; end IY

13、=I(PY1:PY2,:,:); % X方向 % Blue_x=zeros(1,x);%进一步确定x方向的车牌区域 for j=1:x for i=PY1:PY2 if(myI(i,j,1)=1) Blue_x(1,j)= Blue_x(1,j)+1; end end end PX1=1; while (Blue_x(1,PX1)3)&(PX1x) PX1=PX1+1; end PX2=x; while (Blue_x(1,PX2)PX1) PX2=PX2-1; end PX1=PX1-1;%对车牌区域的校正 PX2=PX2+1; dw=I(PY1:PY2-8,PX1:PX2,:); t=to

14、c; figure(7),subplot(1,2,1),imshow(IY),title(行方向区域);figure(7),subplot(1,2,2),imshow(dw),title(定位后的彩色车牌图像)imwrite(dw,dw.jpg);filename,filepath=uigetfile(dw.jpg,输入一个定位裁剪后的车牌图像);jpg=strcat(filepath,filename);a=imread(dw.jpg);b=rgb2gray(a);imwrite(b,1.车牌灰度图像.jpg);figure(8);imshow(b),title(1.车牌灰度图像)g_max

15、=double(max(max(b);g_min=double(min(min(b);T=round(g_max-(g_max-g_min)/3); % T 为二值化的阈值m,n=size(b);d=(double(b)=T); % d:二值图像imwrite(d,2.车牌二值图像.jpg);figure(9),imshow(d),title(2.车牌二值图像)figure(10),imshow(d),title(3.均值滤波前)% 滤波h=fspecial(average,3);d=im2bw(round(filter2(h,d);imwrite(d,4.均值滤波后.jpg);figure(

16、11),imshow(d),title(4.均值滤波后)% 某些图像进行操作% 膨胀或腐蚀% se=strel(square,3); % 使用一个3X3的正方形结果元素对象对创建的图像进行膨胀% line/diamond/ball.se=eye(2); % eye(n) returns the n-by-n identity matrix 单位矩阵m,n=size(d);if bwarea(d)/m/n=0.365 d=imerode(d,se);elseif bwarea(d)/m/n=0.235 d=imdilate(d,se);endimwrite(d,5.膨胀或腐蚀处理后.jpg);f

17、igure(12),imshow(d),title(5.膨胀或腐蚀处理后)% 寻找连续有文字的块,若长度大于某阈值,则认为该块有两个字符组成,需要分割d=qiege(d);m,n=size(d);figure,subplot(2,1,1),imshow(d),title(n)k1=1;k2=1;s=sum(d);j=1;while j=n while s(j)=0 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=qi

18、ege(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;d=qiege(d); endend% 分割出第二个字符word2,d=getword(d);% 分割出第三个字符word3,d=getword(d);% 分割出第四个字符word4,d=getword(d);% 分割出第五个字符w

19、ord5,d=getword(d);% 分割出第六个字符word6,d=getword(d);% 分割出第七个字符word7,d=getword(d);subplot(5,7,1),imshow(word1),title(1);subplot(5,7,2),imshow(word2),title(2);subplot(5,7,3),imshow(word3),title(3);subplot(5,7,4),imshow(word4),title(4);subplot(5,7,5),imshow(word5),title(5);subplot(5,7,6),imshow(word6),title

20、(6);subplot(5,7,7),imshow(word7),title(7);m,n=size(word1);% 商用系统程序中归一化大小为 40*20,此处演示word1=imresize(word1,40 20);word2=imresize(word2,40 20);word3=imresize(word3,40 20);word4=imresize(word4,40 20);word5=imresize(word5,40 20);word6=imresize(word6,40 20);word7=imresize(word7,40 20);subplot(5,7,15),imsh

21、ow(word1),title(1);subplot(5,7,16),imshow(word2),title(2);subplot(5,7,17),imshow(word3),title(3);subplot(5,7,18),imshow(word4),title(4);subplot(5,7,19),imshow(word5),title(5);subplot(5,7,20),imshow(word6),title(6);subplot(5,7,21),imshow(word7),title(7);function e=qiege(d)m,n=size(d);top=1;bottom=m;l

22、eft=1;right=n; % initwhile sum(d(top,:)=0 & top=1 bottom=bottom-1;endwhile sum(d(:,left)=0 & left=1 right=right-1;enddd=right-left;hh=bottom-top;e=imcrop(d,left top dd hh);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 wi

23、de=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 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%end result=d;实验体会:回想起做车牌识别系统的论文的这一段经历,

24、从最初的不知道从哪里下手,到对整个系统有了一点认识,再到对各模块有了初步的了解,最后到我对整个系统各个模块的实现,离不开帮助过我的人们。指导老师的耐心解答,同学的热心帮忙,自己的努力,终于我完成了车牌识别系统的设计。对此对帮助过我的人们表示感谢。在这个过程中,我不仅是了解了车牌识别系统的构造以及各个模块的实现方法,我更是对一些别的软件产生了无穷的兴趣。从系统的设计,各个模块的实现以及模块之间的整合,再到最后的修正,其中的算法的选择,模块的整合连接,都是非常巧妙的。深入了解后,更是十分佩服。通过这次的车牌识别系统的论文我明白了,理论知识和实际应用还是有很大差别的。在我原来的学习过程中,当我把理论知识弄明白之后,就认为自己对知识掌握了。实际上,掌握理论知识和能够熟练运用还有很大的差距。这次的论文设计还提高了我的信心和动手能力,我想这会对我以后的生活和工作有很大的积极意义的。21

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号