龙源期刊网 http://www.qikan.com.cn
基于MATLAB的车牌识别系统的设计仿真
作者:张莉莉 武艳
来源:《数字技术与应用》2017年第10期
摘要:车牌识别系统目前已经成为现代交通管理系统的最关键的部分。本次设计仿真先把拍摄到的图像进行灰度化、边缘检测、平滑等一系列预处理,然后把处理后的图片进行车牌切割,经过处理后再把字符单个分割下来,最后再与创建制作好的字符模板做比对,并输出车牌识别的结果。目前该系统已经应用到了车辆管理的各个领域,为城市交通和人们的出行带来了很大的方便。
关键词:MATLAB;车牌识别;图像预处理;车牌定位;字符分割
中图分类号:TP391.41 文献标识码:A 文章编号:1007-9416(2017)10-0127-02 车牌识别系统是以计算机为基础操作平台,应用图像处理和图像识别的技术而设计的针对汽车牌照的智能识别系统,它的工作任务有一个明显的特征,那就是汽车牌照所拥有的唯一性,根据这一特征来分析和处理输入系统的包括汽车牌照的图片,并对其进行预处理、定位计算、分割,最终再一一识别车牌上的每一个字符,然后得出识别的结果。现在,车牌识别系统的主要运用领域有停车场管理系统、公路交通管理系统、公路布控、十字路口的“电子眼”、园区车辆管理系统等。
1 车牌识别系统的总体设计
系统基本分为硬件和软件两个模块,硬件模块就是启动摄像机进行拍照并传送到该系统,软件模块就是图像预处理、车牌定位切割、字符分割、字符匹配识别这几个环节。 2 车牌识别系统的设计实现 2.1 图像预处理
图像预处理首先是将拍摄到的车牌图片导入到系统中,具体的处理步骤包括图像灰度图的转化、边缘检测、腐蚀、平滑处理以及移除最小对象等。这些工作都是为了去除干扰,使灰度图的车牌区域显得更明显,处理之后再对车牌进行定位计算。本次设计仿真主要采用.jpg的图像格式,利用MATLAB对拍摄到的名为car1的图片进行读取,下面是在本次仿真中读取原图像并显示的程序语句。
I=imread(‘car1.jpg’);figure(1),imshow(I);title(‘原图’)。 2.1.1 图像灰度图的转化
龙源期刊网 http://www.qikan.com.cn
由于我国车辆的种类较多,车牌的底色和字符的颜色会因为车辆种类的不同而有多种不同的组合,但是其色彩对比度是很大的,这就有利于将图像转化为灰度图像,然后再分割提取出车牌区域。本次设计仿真仅仅演示最常见的蓝底白字,它的颜色的RGB为(0,0,255)、(255,255,255),从他们的RGB值能看出来B通道上数值相同,但在R、G两个通道上数值相差的就比较大,这样就方便进行灰度化处理。对于将原图灰度化,下面是图像灰度值H的计算公式。 (1) (2)
公式(1)用的是权值加重法,公式(2)用的是均值法,在本次设计仿真中将彩色图像转化为灰度图像用的函数rgb2gray( )利用的就是权值法,它的优点就是可以突出某个通道,得到灰度图像后就可以更方便地进行后边的操作。为了更好地观察灰度图像的灰度分布信息,可以用imhist函数创建一个描述图像灰度分布的直方图,并且可以显示在一张图片上。下面是在本次仿真设计中,灰度转化显示和灰度图直方图的语句。I1=rgb2gray(I);figure(2),subplot(1,2,1),imshow(I1);title(‘灰度图’);figure(2),subplot(1,2,2),imhist(I1);title(‘灰度图直方图’)。 2.1.2 图像的边缘检测
边缘检测对于图像的分析处理是一个很重要的操作,由于输入系统的由监控拍到的车辆的图片可能会因为车速、噪声、车辆本身导致拍摄到的图片模糊或者受到干扰。因此,必须先进行边缘检测得到清晰的车牌轮廓,才能进一步处理进而进行车牌的定位分割。本次设计仿真使用Roberts算子算法进行边缘检测处理,它是利用局部差分算法来找边缘的一种比较简单的算法[1],本次设计仿真用的是函数edge()来完成边缘检测,具体的程序语句如下。I2=edge(I1,’roberts’,0.12,’both’);figure(3),imshow(I2);title(‘robert算子边缘检测’)。
2.1.3 灰度图的腐蚀
图像的腐蚀就是将拍摄到的图片做形态学解析处理,目的是去掉多余的轮廓线条,减少噪声的影响。图像腐蚀可以消除边缘检测后图像中小的无意义的点和线,减少这一部分的干扰。本次设计仿真使用的是imerode()函数,具体程序语句如下。se=[1;1;1];I3=imerode(I2,se);figure(4),imshow(I3);title(‘腐蚀后图像’)。 2.1.4 平滑处理
车牌图像进行完边缘检测和腐蚀处理操作后,已经能够显示出车牌区域的轮廓了,因为车牌图像还会有噪声和其它因素的影响,因此车牌区域还不能够被计算提取得到,那么就需要在车牌区域计算切割之前对图像做平滑处理,去除一些孤立而无意义的噪点,本次设计仿真运用
龙源期刊网 http://www.qikan.com.cn
的是imclose()函数来实现图像的平滑处理,让图像实现闭运算,因为闭运算能平滑图像的轮廓,它一般是合并细小的缺口,去掉小洞,将轮廓上的缝隙填补上[4]。本次设计仿真的具体程序语句如下,其中se是构造的结构元素,即40*40的长方形。se=strel(‘rectangle’,[40,40]);I4=imclose(I3,se);figure(5),imshow(I4);title(‘平滑图像的轮廓’)。 2.1.5 移除小对象
图像平滑处理后也许会有许多闭合区域,就像一些噪点和车标,这些不属于车牌部分的要尽量删除掉,本次设计仿真使用的是bwareaopen()函数,就是要从图像中删除小于设定的面积值的部分。本次仿真的具体程序如下。I5=bwareaopen(I4,2000); figure(6),imshow(I5);title(‘从对象中移除小对象’)。 2.2 车牌定位和分割
由于系统摄像头拍摄到的图像是整个车辆的图像,包含了很多不用的背景,而对于车牌识别系统来说所需要的仅仅是车牌区域,所以就要把图像中的车牌区域截取切割下来。在经过预处理的图像中,车牌区域的部分已经很明显了,就是图像中白色的横向近似长方形区域。因此利用边缘检测经过计算x方向和y方向的车牌边界的长度,可以很容易得到图像中的车牌区域。本次设计仿真是依据车牌底部颜色的不同,利用统计彩色像素点的做法切割出长方形的车牌区域,首先要确定车牌底色(在这里是蓝色)对应的灰度值的范围,之后横向统计蓝色范围内的像素点的数量,根据统计的像素点的数量设置一个合适的阈值,最后就能找出车牌在横向上的合理区域,并进行切割[2]。用同样的方法在切割出的横向的区域图像的基础上,统计竖向上蓝色像素点的数量,设置一个阈值,然后对列方向的合理区域进行切割,最终就能得到整个车牌的区域。 2.3 字符分割和处理
车牌字符分割也是较为关键的环节,因为对于车牌字符的分割必须先把车牌的定位做好,才能进行后面的工作,如果定位不准确字符分割就无法完成,当然要是字符分割的不准确,也会影响后面对字符的识别。 2.3.1 车牌的进一步处理
在进行字符分割之前要对分割出来的彩色车牌图像做进一步处理,比如灰度转化、二值化、均值滤波和腐蚀或膨胀等。因为彩色图像处理起来比较麻烦,所以要进行灰度处理,二值化就是将图像的灰度值设置为两个数值,在这里就是0和255(也就是黑和白),目的是让图像呈现出明显的黑白效果[3]。腐蚀是为了消除边界点,而膨胀则是将边界点进行合并,均值滤波的目的是删掉分割出来的车牌图像的噪点。 2.3.2 字符的分割和归一化