基于Matlab车牌识别毕业论文论文.docx
- 文档编号:12227166
- 上传时间:2023-04-17
- 格式:DOCX
- 页数:28
- 大小:412.40KB
基于Matlab车牌识别毕业论文论文.docx
《基于Matlab车牌识别毕业论文论文.docx》由会员分享,可在线阅读,更多相关《基于Matlab车牌识别毕业论文论文.docx(28页珍藏版)》请在冰豆网上搜索。
基于Matlab车牌识别毕业论文论文
课程设计(论文)说明书
题目:
基于Matlab车牌识别
院(系):
信息与通信学院
专业:
通信工程
摘要
近几年,车牌识别系统作为智能交通的一个重要方向越来越受到重视。
车牌识别系统可以应用于停车场管理系统、高速公路超速管理系统、城市十字路口的“电子警察”、小区车辆管理系统等各个领域。
本论文基于Matlab,使用c语言编程来实现车牌识别。
车牌识别主要经过牌照定位,即定位图片中的牌照位置;牌照字符分割,就是把牌照中的字符分割出来;牌照字符识别,也就是把分割好的字符进行识别,最终组成牌照号码。
关键词:
Matlab;c语言;定位;分割;识别;
Abstract
Inrecentyears,thelicenseplaterecognitionsystemasanimportantdirectionoftheintelligenttransportationismoreandmoreattention.Licenseplaterecognitionsystemcanbeusedintheintersectionelectronicpolicedistrictvehiclemanagementsystemandotherfields.
Inthispaper,basedonMatlab,usingclanguageprogrammingtorealizethelicenseplaterecognition.Licenseplaterecognitionismainlythroughthelicenseplatelocalization,namely,positioningimageoflicenseplatelocation;Charactersegmentationoflicenseplatecharactersegmentation,isthelicenseplate;Licenseplatecharacterrecognition,thatis,thegoodcharactersegmentation,whichcanidentifyoflicenseplatenumber.
Keywords:
Matlab;Cprogramminglanguage;Positioning;Segmentation;identify
目录
引言1
1设计方案2
1.1总体设计目标2
1.2总体设计组成框图2
2.Matlab相关功能2
2.1使用matlab的优点2
2.2matlab软件简介2
3软件部分设计方案及仿真3
3.1图像的读取3
3.2图像预处理4
3.3.图象的边缘检测5
3.4图像灰度化5
3.5图像平滑处理6
3.6车牌区域的边界值计算8
3.7字符切割9
3.7.1字符切割前的图像去噪处理9
3.7.2字符切割前的图像膨胀和腐蚀处理10
3.7.3字符切割10
3.8字符识别13
3.8.1字符识别方法选择13
3.8.2字符归一化13
3.8.3字符匹配识别13
4.课设小结16
参考源代码如下:
16
谢辞25
参考文献26
引言
车牌识别系统目前广泛应用于监测报警,超速违章处罚,车辆出入管理,自动放行,高速公路收费管理,计算车辆旅行时间,牌照号码自动登记.
车牌识别是利用车辆的动态视频或静态图像进行车牌号码、车牌颜色自动识别的模式识别技术。
技术的核心包括车牌定位算法、车牌字符分割算法和光学字符识别算法等。
一个完整的车牌识别系统应包括车辆检测、图像采集、车牌识别等几部分。
当车辆检测部分检测到车辆到达时触发图像采集单元,采集当前的视频图像。
车牌识别单元对图像进行处理,定位出车牌位置,再将车牌中的字符分割出来进行识别,最后组成车牌号码输出。
本文主要讲述我完成这次课设所经历的三个阶段:
总体方案设计、相关资料查询、软件实现。
在介绍我本次课程设计的设计原理的同时,也侧重同时记录了我是如何对于设计过程中遇到的问题进行分析和解决的。
同时,我也着重介绍了我所用到的相关软件。
1设计方案
1.1总体设计目标
本次课设,设计的目标是通过matlab软件,结合c语言编程,来实现车牌的识别。
一个完整的车牌识别系统应包括车辆检测、图像采集、图像预处理、车牌定位、字符分割、字符识别等单元。
本次课设的目标就是基于matlab和c语言编程,通过对车辆检测,还有采集车辆图片,和图像预处理,以及对车牌的定位,和字符的分割,最后对字符进行识别,最终可以实现车牌的识别。
1.2总体设计组成框图
系统框图如下:
图1系统框图
运用matlab软件的相关功能和c语言编程,对采集的图像对图像进行预处理,并用matlab软件和c语言,来定位车牌的位置,最后进行字符的分割,然后识别字符,最后就输出一个完整的车牌,从而识别车牌。
2.Matlab相关功能
2.1使用matlab的优点
(1)Matlab绘图功能很强大,但在VC++,VB语言里绘图都很不容易,但Matlab里数据的可视化程度非常高,并且具有较强的编辑图形界面的能力。
(2)Matlab语言简单,入门容易,程序设计不严格,自由度大,例如用户无需对矩阵预定义即可使用。
(3)Matlab语言简洁紧凑,使用方便灵活,库函数丰富,并且内部集成了很多工具箱,为程序开发提供现成模块。
(4)Matlab的可移植性很好,基本上不做修改就可以在在各种型号的计算机和操作系统上运行。
2.2matlab软件简介
MATLAB(矩阵实验室)是MATrixLABoratory的缩写,是一款由美国TheMathWorks公司出品的商业数学软件。
MATLAB是一种用于算法开发、数据可视化、数据分析以及数值计算的高级技术计算语言和交互式环境。
除了矩阵运算、绘制函数数据图像等常用功能外,MATLAB还可以用来创建用户界面及与调用其它语言(包括C,C++和FORTRAN)编写的程序。
尽管MATLAB主要用于数值运算,但利用为数众多的附加工具箱(Toolbox)它也适合不同领域的应用,例如控制系统设计与分析、图像处理、信号处理与通讯、金融建模和分析等。
另外还有一个配套软件包Simulink,提供了一个可视化开发环境,常用于系统模拟、动态嵌入式系统开发等方面。
MATLAB和Mathematica、Maple并称为三大数学软件。
它在数学类科技应用软件中在数值计算方面首屈一指。
MATLAB可以进行矩阵运算、绘制函数和数据、实现算法、创建用户界面、连接其他编程语言的程序等,主要应用于工程计算、控制设计、信号处理与通讯、图像处理、信号检测、金融建模设计与分析等领域。
MATLAB的基本数据单位是矩阵,它的指令表达式与数学、工程中常用的形式十分相似,故用MATLAB来解算问题要比用C,FORTRAN等语言完成相同的事情简捷得多,并且MATLAB也吸收了像Maple等软件的优点,使MATLAB成为一个强大的数学软件。
在新的版本中也加入了对C,FORTRAN,C++,JAVA的支持。
可以直接调用,用户也可以将自己编写的实用程序导入到MATLAB函数库中方便自己以后调用,此外许多的MATLAB爱好者都编写了一些经典的程序,用户可以直接进行下载就可以用。
3软件部分设计方案及仿真
3.1图像的读取
目前比较常用的图像格式有*.BMP、*.JPG、*.GIF、*.PCX、*.TIFF等,本课题采集到的图片是*.JPG的格式。
因为由*.JPG图像时一个软件开发联合会组织制定、有损压缩格式,能够将图像压缩在很小的储存空间,而且广泛支持Internet标准,是面前使用最广的图片保存和传输格式,大多数摄像设备都以*.JPG格式保存。
利用图像工具箱的
Car_Image_RGB=imread(‘Image_Name’);
即可将图像读取出来,这样读取得到的是RGB图像,RGB图像分别用红、蓝、绿三个色度值为一组代表每个像素的颜色,因此Car_Image_RGB是一个
的数组,m、n表示图像像素的行、列数。
图2原始图像
3.2图像预处理
考虑到现有牌照的字符与背景的颜色搭配一般有蓝底白字、黄底黑字、白底红字、绿底白字和黑底白字等几种,利用不同的色彩通道就可以将区域与背景明显地区分出来,例如,对蓝底白字这种最常见的牌照,采用蓝色B通道时牌照区域为一亮的矩形,而牌照字符在区域中并不呈现。
因为蓝色(255,0,0)与白色(255,255,255)在B通道中并无区分,而在G、R通道或是灰度图象中并无此便利。
同理对白底黑字的牌照可用R通道,绿底白字的牌照可以用G通道就可以明显呈现出牌照区域的位置,便于后续处理。
原图、灰度图及其直方图见图2与图3。
对于将彩色图象转换成灰度图象时,图象灰度值可由下面的公式计算:
G=0.110B+0.588G+0.302R
(1)
G=
(2)
图3预处理及边缘提取流程图
3.3.图象的边缘检测
在Matlab中利用函数edge()实现边缘检测。
Car_Image_Bin=edge(Car_Image_Gray,'robert',0.15,'both');
在edge()函数中有Sobel算子,Prewitt算子,Roberts算子,Log算子,Canny算子及Robert算子,几种算法相比之下,Roberts算子算法简单,计算量最小。
因此本课题使用了Robert算子。
Roberts边缘检测算子是一种利用局部差分算子寻找边缘的算子,根据任一相互垂直方向上的差分都可用来估计梯度,Robert算子采用对角方向相邻两像素之差,
其幅值为:
Robert梯度以
为中心,所以他度量了
点处
和
方向(相互正交)的灰度变化。
适当取门限T,做如下判断:
(x,y)为阶跃状边缘点。
Roberts边缘检测算子相当于用
和
对图像进行卷积。
0.15为敏感度值,both表示双向检测算法。
3.4图像灰度化
彩色图像包含着大量的颜色信息,不但在存储上开销很大,而且在处理上也会降低系统的执行速度,因此在对图像进行识别等处理中经常将彩色图像转变为灰度图像,以加快处理速度。
由彩色转换为灰度的过程叫做灰度化处理。
选择的标准是经过灰度变换后,像素的动态范围增加,图像的对比度扩展,使图像变得更加清晰、细腻、容易识别。
将彩色图像转换为黑白并显示
Sgray=rgb2gray(Scolor);%rgb2gray转换成灰度图
figure,imshow(Sgray),title('原始黑白图像');
对原始图像进行开操作得到图像背景图像:
s=strel('disk',13);strei函数
Bgray=imopen(Sgray,s);打开sgrays图像
figure,imshow(Bgray);title('背景图像');输出背景图像
灰度图像与背景图像作减法,对图像进行增强处理:
Egray=imsubtract(Sgray,Bgray);两幅图相减
figure,imshow(Egray);title('增强黑白图像');输出黑白图像
图4边缘见效果图
3.5图像平滑处理
得到图像的轮廓线后,由于图像的数字化误差和噪声直接影响了脚点的提取,因此在脚点提取之前必须对图像进行平滑处理,Matlab有一个图像平滑处理函数imclose(),它与开运算相反,融合窄的缺口和细长的弯口,去掉小洞,填补轮廓上的缝隙。
Car_Image_Perform=imclose(Car_Image_Erode,Se);
结构单元 Se一个小于对象闭合图形,只要两个封闭域的距离小于Se,就将这两个连接成一个连通域,Se生成方式采用:
Se=strel('rectangle',[25,25]);
即Se是一个一个
的矩形,使用矩形是因为车牌是一个矩形,这样,可以是提取的图像最接近预期效果。
图像经平滑后效果如下:
图5平滑处理后效果
图像平滑处理了,可能会有多个闭合区域,对于不是车牌区域的必须予以删除,Matlab提供了一个函数bwareaopen(),用于删除二值图像中面积小于一个定值的对象,默认情况下使用8邻域,
Car_Image_Perform2=bwareaopen(Car_Image_Perform,2000);
这样,Car_Image_Perform中小于2000的对象都被删除了,
小对象被删除后的图像如图
图6移除小对象后效果
3.6车牌区域的边界值计算
在将原始图像进行二值化,然后轮廓平滑处理后,图像的每个点为两个离散值中的一个,这两个值代表开
(1)与关(0),即只有黑与白的特殊灰度图像,并且整个图像只有两个域(如果有多个域需改变参数后重新进行一此剔除干扰对象处理),全1的域即为车牌区域,并且近似矩形,长宽比为4.5:
1,也可以用这两个特性去检验提取的区域是否为车牌区域。
经区域确定了,即可将车牌的四个边界值确定下来。
这里采用水平与垂直双向投影法,
水平坐标的确定,先定义一个
的数组,其中
为原始图像的宽度值,然后将二值图像垂直投影到
轴。
从直方图中基本可以看书水平方向上的两个分界线,为了便于处理,该课题将像素值临界值定量化,取值5个像素。
从左向右寻找第一个1值像素大于5的
坐标为水平方向左侧分界线,从优向左寻找到第一个1值像素量大于5的为右侧分界线,程序可以用for循环语句。
Zero_Col=zeros(1,x);%
forj=1:
x
fori=1:
y
if(Car_Image_Perform(i,j,1)==1)
Zero_Col(1,j)=Zero_Col(1,j)+1;%
end
end
end
Col_Left=1;
while((Zero_Col(1,Col_Left)<5)&&(Col_Left end Col_Right=x; while((Zero_Col(1,Col_Right)<5)&&(Col_Right>Col_Left)) Col_Right=Col_Right-1; end 垂直方向的分界线可用同样的方法实现。 分界线计算得后,即可从原图像中剪切出只包含车牌的区域图像。 剪切得到的图像如下。 图8为二值图切割的车牌区域,图9为RGB图像切割出来的图像如下: 图7车牌区域二值图裁减 图8原图中的车牌区域图像 3.7字符切割 3.7.1字符切割前的图像去噪处理 由于图像车牌号区域提取后获得的是从原始图像中剪切的,是RGB图像,分割同样采取投影法,故同样需要先将RGB图像转换成灰度值,再将灰度图转化成二进制图,转化的方法就是限定一个阀值,如果大于阀值则为1,小于阀值为0,阀值采用全局阀值,全局阀值是指整幅图像都采用相同的阀值T处理,适用于背景和前景有明显对比的图像。 虽然图像间受背景,光照等影响存在较大的差异,但计算简单,程序运算效率高。 在Matlab实现法师如下 T=round(License_Image_Gray_max-(License_Image_Gray_max-License_Image_Gray_min)3); 同时采集大的图像噪点依然存在,因此可以通过处理图像的低频部分来锐化图像。 这里采用均值滤波算法,均值滤波也称为线性滤波,其采用的主要方法为邻域平均法。 线性滤波的基本原理是用均值代替原图像中的各个像素值,即对待处理的当前像素点 ,选择一个模板,该模板由其近邻的若干像素组成(以目标象素为中心的周围8个象素,构成一个滤波模板,即去掉目标象素本身),求模板中所有像素的均值,再把该均值赋予当前像素点 ,作为处理后图像在该点上的灰度 ,即 m为该模板中包含当前像素在内的像素总个数(即8个)。 可以对比滤波前跟滤波后的图像,如图10和图11所示,很明显,不但噪声去除了,而且图像得到了锐化。 图9车牌区域图像滤波前效果 图10车牌区域图像滤波后效果 3.7.2字符切割前的图像膨胀和腐蚀处理 腐蚀已经在在上文介绍,膨胀刚好与腐蚀相反,运算规则是输出图像的像素值是输入图像邻域中的最大值,在一个二值图像中,只要一个像素值为1,则相应的输出像素值为1。 根据经验值,车牌图像中,字符面积与车牌面积之比在(0.235,0.365)之间,因此计算字符面积与车牌面积比值,如果大于0.365则对图像进行腐蚀,如果小于0.235则对图像进行膨胀,程序实现如下 clearSe; Se=eye (2); [m,n]=size(License_Image_Gray_2); ifbwarea(License_Image_Gray_2)mn>=0.365 License_Image_Gray_2=imerode(License_Image_Gray_2,Se); elseifbwarea(License_Image_Gray_2)mn<=0.235 License_Image_Gray_2=imdilate(License_Image_Gray_2,Se); end 在这里结构元素Se使用一个二维单位矩阵 。 对于此对象,系统给予膨胀处理,效果图如图12 图11车牌区域图像腐蚀、膨胀后效果 3.7.3字符切割 2007年颁布的我国车牌规范(普通中小型汽车)规定车牌总长440mm,牌照中的7个字符的实际总长为409mm左右,宽140mm,每个字符45mm宽,90mm高,字符间距为10mm,其中第二个字符与第三个字符的间距较为特殊,为15.5mm,最后一个字符与第一个字符距边界25mm。 这样,如果平均分配每个字符在牌照中占据的宽度,那么每个字符宽度为: width7(width为车牌图像的宽度)。 但是,实际上,第二个第三个字符之间存在一个黑点,牌照左右两边与图像边缘也都有一定的宽度,所以每个字符的宽度应该小于width7。 考虑所有的情况,一般情况下最小的宽度为width9。 因此,字符的宽度可以从width9到width7之间渐进的变化得到,程序流程图如图13。 切割线同样采用投影法 Wide=0; whilesum(Image_Crop(: Wide+1))~=0&&Wide<=n-2 Wide=Wide+1; End 切割的字符时候符合比例要求采用 if((Level1 [1: Wide])=0; ifsum(sum(Image_Crop))~=0Image_Crop=Image_Trim(Image_Crop); elseWord=[]; Flag=1; end else 其中Level1和Level2是字符宽度的上下限,R_C_Ratio_1和R_C_Ratio_2是单个字符的宽高比值的上下限。 经过切割,切割的字符图像如下。 图13经切割的七个字符 3.8字符识别 3.8.1字符识别方法选择 目前字符识别的方案有使用神经网络和模板匹配法进行比对。 人工神经网络是模拟人脑思维功能和组织建立起来的数学模型,虽然现在神经网络正在迅速发展,但总体来说应用还是相对复杂的。 模板匹配法虽然识别率低,但实现简单,计算量小,只有矩阵的加减与统计,而且车牌字符是有阿拉伯数字,英文大写字母,还有部分汉字,虽有字库量不大,字符较规整时对字符图像的缺损、污迹干扰适应力强且识别率相当高,因此本课题使用这种方法。 对于模板匹配,首先建立标准模板库,库中字符使用统一的尺寸,这里使用。 3.8.2字符归一化 由于图像采集时图像的像素值不一样,经切割出来的字符的大小也不会不一样,所以在进行匹配前必须先进行字符图像归一化。 使图像大小跟模板图像大小一致,Matlab提供一个改变图像大小的函数imresize(I,Size,Model),Model是插值运算方法,这里选用'nearest'最近邻插值法,经归一化后的图像如下。 图14经归一化后的七个字符 3.8.3字符匹配识别 字符识别步骤如下, 图15字符匹配流程 匹配方法采用将目标图像与模板图像逐点做差,得到第三幅图像,程序实现如下: forii=1: 40 orjj=1: 20Word_Image_Diff(ii,jj)=Word_Image(ii,jj)-Word_Image_Code(ii,jj); end end 最后计算第三幅二进制图像中像素值为1的个数,数值最小的即为匹配出来的结果,经对比可得相似度最高的数字。 图16字符相似度比较 有图16的,字符1在Lib_Code_No=39处取得最大相似度,查字库Lib_Code_No=39的字符为“渝”,则可以确定该字符为“渝”。 同理可得出其他6个字符。 4.课设小结 做完这次车牌识别课程设计后,我感觉它的工作量的确很大,差不多花费了我数周的时间一遍遍地改参数、看图像。 不过现在看来之前投入的精力是完全值得的,车牌识别课程设计对我的帮助主要有以下几点。 第一,巩固了数字图像处理课上所学的知识,比如滤波、膨胀、腐蚀、边缘提取等等。 为了完成这次的课程设计,我在网上看了看了冈萨雷斯的《数字图像处理(MATLAB版)》。 这本书内容丰富,自成一体,里面的许多内容与教材形成了互补。 特别是形态学图像处理那一章有许多详细的例子,浅显易懂,不少课上没有完全理解的内容通过看这本书得到了深入的体会。 第二,通过这次课程设计我学会了使用Matlab这种常用的工具软件,之前我会用C语言,但是只是学会一点点,也学会使用matlab,但也是会一点点,但是这次深入接触后我感觉到Matlab的确是一款强大易学的数学分析软件,操作起来虽然比较难上手。 但是在这次课设以后,我了解蛮多的函数功能及运用的。 第三,为了完成车牌识别系统,我从网上找了不少源代码进行比较,这也锻炼了我读程序的能力。 因为网上的代码实现方法众多,而且良莠不齐,评价起来很难。 有些方法只能识别一幅特定的图像,有些甚至什么都识别不了。 于是我就将不同模块分别测试,并加入我自己的思想,最后综合出一个比较理想的系统。 调试的过程非常麻烦,因为有的参数只能对某一幅图像有用,对其它图像根本识别没法识别,所以为了使尽量多的图像能被识别,我着实花了不少功夫。 第四,我深刻感受到要实现一个系统的功能是一件很复杂的事。 虽然之前我做过课设一,但我们做的是硬件。 在网上我也看过一些公司做的车牌识别软件,效果的确很棒,至今我也很难理解它们是如何实现的。 在做这个课程设计之前,我本以为车牌识别比较简单,但是接触以后才发现限制车牌识别的因素很多,要想识别任意图像是非常困难的。 所以说实现一个比较完善的系统就需要对其中的每个部分进行优化设计,这也是我以后需要努力的。 参考源代码如下: function[d]=main(jpg) I=imread('car.jpg'); figure (1),imshow(I);title('原图'); I1=rgb2gray(I); figure (2),subplot(1,2,1),imshow(I1);title('灰度图'); figure (2),subplot(1,2,
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 Matlab 车牌 识别 毕业论文 论文