基于图像处理的汽车牌照的识别
作者:陈秋菊
指导老师:李方洲
(温州师范学院 物理与电子信息学院 325027)
摘要:以一幅汽车牌照的识别为例,具体介绍了车牌自动识别的原理。整个处理过程分为预处理、边缘提取、车牌定位、字符分割、字符识别五大模块,用MATLAB软件编程来实现每一个部分,最后识别出汽车牌照。在研究的同时对其中出现的问题进行了具体分析,处理。寻找出对于具体的汽车牌照识别过程的最好的方法。
关键词:汽车牌照 车牌提取 字符分割 字符识别
The vehicle license recognition based on the image processing
Author:Chen Qiuju
Tutor:Li Fangzhou
(School of Physics and Electronic Information Wen Zhou Normal College 325027)
Abstract: With one vehicle license recognition, the principle of the automobile License recognition is introduced .This process was divided into pre-process, edge extraction, vehicle license location, character division and character recognition, which is implemented separated by using MATLAB. The license is recognized at last. At the same time, the problems are also analyzed
And solved in the process. The best method of recognition to the very vehicle license is found.
Keywords: vehicle license vehicle license location character segmentation
Character recognition
1. 引言
1.1 选题意义
汽车牌照自动识别系统是以汽车牌照为特定目标的专用计算机视觉系统,是计算机视觉和模式识别技术在智能交通领域应用的重要研究课题之一,是实现交通管理智能化的重要环节,它可广泛应用于交通流量检测,交通控制与诱导,机场、港口、小区的车辆管理,不停车自动收费,闯红灯等违章车辆监控以及车辆安全防盗等领域,具有广阔的应用前景。目前,发达国家LPR(汽车牌照识别技术License Plate Recognition, LPR,简称“车牌通”)系统在实际交通系统中已成功应用,而我国的开发应用进展缓慢,车牌识别系统基本上还停留在实验室阶段。基于这种现状还有它广阔的应用前景,目前对汽车车牌的识别研究就有了深远的意义。
课题组成
汽车车牌的识别过程主要包括车牌定位、字符车牌分割和车牌字符识别三个关键环节。其识别流程如下:
原始图像 :由数码相机或其它扫描装置拍摄到的图像
图像预处理:对动态采集到的图像进行滤波,边界增强等处理以克服图像干扰
边缘提取 :通过微分运算,2值化处理,得到图像的边缘
车牌定位 :计算边缘图像的投影面积,寻找峰谷点,大致确定车牌位置,再计算此连通域内的宽高比,剔除不在域值范围内的连通域。最后得到的便为车牌区域。
字符分割 :利用投影检测的字符定位分割方法得到单个的字符
字符识别 :利用模板匹配的方法与数据库中的字符进行匹配从而确认出字符,得到最后的汽车牌照,包括英文字母和数字。
本文以一幅汽车图像为例,结合图像处理各方面的知识,利用MATLAB编程,实现了从
车牌的预处理到字符识别的完整过程。各部分的处理情况如下:
2.预处理及边缘提取
图1 汽车原图
图像在形成、传输或变换过程中,受多种因素的影响,如:光学系统失真、系统噪声、暴光不足或过量、相对运动等,往往会与原始景物之间或图像与原始图像之间产生了某种差异,这种差异称为降质或退化。这种降质或退化对我们的处理往往会造成影响。因此在图像处理之前必须进行预处理,包括去除噪音,边界增强,增加亮度等等。
因为噪声主要是一些含高频的突变成分,因此可以通过一个低通滤波器来消除图像中包含的噪声,并使低频成分得到增强。滤波的方式有两种,一种是空间域滤波,一种是频率域滤波。在空间域,常见的滤波方式有两种方式,均值滤波和中值滤波。空间域滤波主要有巴特沃斯滤波器。在车牌边缘提取之前,两种滤波方式均采用了。并与未进行滤波的边缘进行比较。以下是经处理后的一些图片。
图2 经均值滤波后提取的边缘图像
图3 经巴特沃斯低通滤波后提取的边缘图像
图4 未滤波直接提取出的边缘信息
图5 经高通滤波器增强后得到的边缘图像
对比以上几幅图片,图2的边缘太粗,而图3的边缘已经模糊掉了。图5中包含的噪声太多,图4未经滤波直接提取出的边缘图像最清晰,所包含的有用信息最多。分析这种情况产生的原因,归纳起来主要有以下方面:
1、原始图像清晰度比较高,从而简化了预处理
2、图像的平滑处理会使图像的边缘信息受到损失,图像变得模糊
3、图像的锐化可以增强图像中物体的边缘轮廓,但同时也使一些噪声得到了增强
综上所述,结合MATLAB实验过程,得出不是每一种图像处理之初都适合滤波和边界增强。本次汽车车牌的识别,为了保存更多的有用信息,经过多次比较,选择图4作为后期处理的依据。边缘的提取采用的是梯度算子,因为其实现过程比较简单,所以在此不多加赘述了。
提取出的边缘含有多个灰度值,要进行二值化处理,选择一个合适的域值。经多次比较,选取域值T=70,对于灰度值大于T的赋值为255,小于T的赋值为0。经过处理后的图像如下所示:
图6 二值化后的边缘图像
结合后期分割得到的车牌图7,二值化后的图像在后期的识别中并不会提高车牌的识别率,因此不采用二值化的图像来进行识别,因此后面的处理依然使用图4。
3.车牌提取
经过边缘提取得到的图像,车牌区域在水平方向灰度面积值具有明显频繁的跳变,在垂直方向上的面积投影则出现峰-谷-峰的特性。根据这种峰谷特点,自动检测车牌位置峰点检测的车牌区域定位方法, 并对初步定位后的车牌进一步使用微定位技术。该方法包括三部分: (1) 车牌的横向定位; (2)车牌的纵向定位; (3) 车牌的微定位。
汽车本身具有一定的特点,一般情况下,牌照都挂在缓冲器上或附近,处于车牌照图像的下半部分,本次分割的主要意图是缩小牌照搜索范围,大致确定出牌照的位置。对如图4所示的汽车边缘图像f ( x , y) ,我们首先进行水平方向一阶差分运算,即
g ( i , j) = | f ( i , j) - f ( i , j + 1) |
其中i = 1 ,2 ,3 , ⋯,xw - 1 ,j = 0 ,1 ,2 ,3 , ⋯yw - 1 ,其中xw,yw分别为图像的行数和列数。然后对水平差分图像的像素沿水平方向累加产生一个投影表T( i) ,如图7所示。
图7 汽车边缘图像的水平面积投影图
一般对应于车牌位置的投影值T( i) 较大,而在车牌上,下行附近的投影值较小,均有谷点存在。只要能找到这两个谷点,就能大致确定出车牌照的位置,缩小车牌搜索范围。由图4可以看出,车牌下方的横栏处的T(i)值应该是最大的,而车牌位置就在其附近。根据这些特定,可定出车牌位置大概在320~350行之间。
类似的方法得出汽车边缘图像的垂直面积投影图
图8 汽车边缘图像的垂直面积投影图
同上可初步得到汽车牌照的列位置在120~210之间。大致确定的牌照位置如下图。
图9 粗略定位出的汽车牌照
对初步确定出来的牌照进行微定位,所谓微定位法, 就是对基本定位后的车牌图像进
行局部分析, 以进一步确定字符范围, 缩减车牌的左、右和上、下边界, 这有利于后续的牌照字符处理。具体实现如下: (1) 由于车牌近似为一个矩形, 上下边缘近似为一条直线, 通过简单的灰度变化分析就可以再次定位车牌图像的上下边界, 这种情况适合于倾斜度较小的车牌; 对于倾斜程度较大的牌照来说, 在其横向定位之前就应该利用相关的技术进行车牌的矫正(例如Hough 变换技术) 。(2)确定左边界: 从左向右扫描 ,当遇到灰度值大于设定值60之后,停止扫描。上边界也是利用这种方式得到。这样就得到首字符的起始位置。再利用牌照的大小,宽高比一般都是固定的这些先验知识,就可以确定出牌照的具体位置。本设计中采用的车牌,其宽高比为1:3。从而确定出汽车牌照的具体位置。最后提取出的汽车牌照如下图:
图10 二值化的汽车牌照
图11 未进行二值化的汽车牌照
4.字符分割
在汽车牌照自动识别过程中,字符分割有承前启后的作用。它在前期牌照定位的基础
上进行字符的分割,然后再利用分割的结果进行字符识别。字符识别的算法很多,常采用垂直面积投影法来实现。面积投影法的公式如下:
由于字符块在竖直方向上的投影必然在字符间或字符内的间隙处取得局部最小值,并且这个位置应满足车牌的字符书写格式、字符尺寸和其他一些条件的限制。下图是图10在垂直方向上的面积投影图。从图形中我们很直观的看出投影值中出现了8条间隙, 6个字母中间的间隙只有5个,还有三个间隙是字符间的。有字符的列其灰度值比较高,无字符的则相对比较低。依据这一点,再结合图10的特征,很容易得到每个字符的起始终止位置。第一个字符:1-10 第二个字符:10-18 第三个字符:28-41 第四个字符:42-48第五个字符:60-68 第六个字符:68-78
图12 车牌垂直方向上的面积投影图
将图10按照上面的分析行数不变,列数分为六组,分别影射到六个不同的数组中。又因为在字符的模式识别中,其模板大小统一,因此得到的六个数组必须变换其大小,均统一成26×14的形式。分割出来的六个字符如下所示,分别命名为M1.jpg,M2.jpg,M3.jpg,M4.jpg,M5.jpg,M6jpg并用imwrite函数写入图像文件夹中,以便在后期处理中可以直接进行调用。
图12 分割出来的六个字符图像
一般分割出来的字符要进行进一步的处理,以满足下一步字符识别的需要。因为图像中含有许多燥声,这在预处理的图像中已经看出来了。因此必须进行滤波,然后归一化,二值处理。使其最后得到的图像与标准模板一样。只含有两种灰度值,黑与白。但是对于车牌的识别,并不需要这么多的处理就已经可以达到正确识别的目的。在此简化了处理过程,未经滤波归一化,直接进行后期处理。
5.字符识别
字符的识别目前用于车牌字符识别(OCR)中的算法主要有基于模板匹配的OCR算法以及基于人工神经网络的OCR算法。基于模板匹配的OCR的基本过程是:首先对待识别字符进行二值化并将其尺寸大小缩放为字符数据库中模板的大小,然后与所有的模板进行匹配,最后选最佳匹配作为结果。用人工神经网络进行字符识别主要有两种方法:一种方法是先对待识别字符进行特征提取,然后用所获得的特征来训练神经网络分类器。识别效果与字符特征的提取有关,而字符特征提取往往比较耗时。因此,字符特征的提取就成为研究的关键。另一种方法则充分利用神经网络的特点,直接把待处理图像输入网络,由网络自动实现特征提取直至识别。模板匹配的主要特点是实现简单,当字符较规整时对字符图像的缺损、污迹干扰适应力强且识别率相当高。综合模板匹配的这些优点我们将其用为车牌字符识别的主要方法。
字符识别的算法如下:
因此在字符识别之前必须把模板库设置好。汽车拍照的字符一般有七个,大部分车牌第一位是汉字,通常代表车辆所属省份,或是军种、警别等有特定含义的字符简称;紧接其后的为字母与数字。车牌字符识别与一般文字识别在于它的字符数有限,汉字共约50多个,大写英文字母26个,数字10个。所以建立字符模板库也极为方便。本次设计所识别的车牌只有字母与数字。为了实验方便,结合本次设计所选汽车牌照的特点,只建立了3个字母与3个数字的模板。其他模板设计的方法与此相同。
5.1模板设计
分析字符分割得到的图像以及其他车牌图像中字符的特点,将模板大小定为26×14;
背景为黑色,代表灰度值 0,字符边缘为白色。代表灰度值255。
设计过程如下:
1. 用画图工具先画出P、F、M、1、0、3等几个字符的图像。并分别保存为m11.jpg,m12.jpg,
M1.jpg,m14.jpg,m15.jpg,m16.jpg。根据画图的经验其大小应略大于26×14,以利于后面的处理。所得到的字符均为黑字白底。字体为方正姚体,大小16号。
所画出的图形如下:
2. 对1中获得的粗略图像用MATLAB进行处理。处理的方面包括a.去除边框,利用二维数组的映射关系实现,去掉开始行(列)与结束行(列)即所有外围像素点b.提取模板的边缘。其实现方法与前面的汽车边缘提取的方法相同,也是利用梯度算子。C.尺寸大小变换,切割为标准的26×14格式。
3. 整个处理过程结束后,再用imwrite 函数写入图像库中,作为标准模板使用。
经过处理后的标准模板形式如下:
模板的设计过程,共进行了两次。作为一幅jpg或者bmp形式的图片,其中包含了许许
多多的像素点,各象素点的值也不一样,到底如何来确定这些像素点的值呢?模板设置无疑成为一个难点。于是便投机取巧,将本身分割得到的字符保存起来直接作为模板使用。这种方法明显不具有科学性。图像识别中模板匹配法是将未知的东西与已知的东西来进行比较。因此模板库中的字符应该是已知的,是预先设置好的是不可更改的,而不是在实验过程中来得到。第二次便是用以上的画图工具来一步一步逼近实现模板设置。实验结果显示,这种方法简单易行。
5.2识别过程
字符识别中模板匹配方法是实现离散输入模式分类的有效途径之一,其实质是度量输入与样本之间的某种相似性,取相似性最大者为输入模式所属类别,它根据字符的直观形象抽取特征,用相关匹配原理进行识别,即是将输入字符与标准字符在一个分类器中进行匹配。车牌字符相关匹配算法如下:
输入字符用输入函数X表示,标准模板用函数T表示,它们的大小均为26×14。将未知的模式逐个与模板匹配,求出其相似度。
其中,M=26,N=14。Ti 指第i个模板。X×Ti 是指矩阵对应元素相乘。如果把X与T都归一化为”1”和”0”,则上式表示标准模板与待识图像上对应点均为”1”的数目与标准模板上”1”点的数目之比。
如果 maxSi>λ 则判定X∈Ti,否则拒识,这里λ为拒识域值。本次实验中直接取相关最大值为判定域值。
用MATLAB来实现字符的识别。其中有两个很重要的函数可以直接调用:corr2 函数和max函数。
Corr2 函数直接用来计算图像拒阵A与B的相关系数r。A与B的大小及数据类型必须相同,得到的结果r是双精度标量。其调用方法如下:
r=corr2(A,B)
因此本设计中的字符识别只需调用此函数,即将分割出来的字符与设置好的模板一一进行相关运算,然后寻找出它们中的最大相关值。max函数就是用来选择几个数值的大小值。其调用方式如下:
[b,c]=max(a(:))
其中b返回的是比较后得到的最大值,c是最大值所对应的元素位置。
同时还自编了一个识别函数result.m用来返回识别结果。程序代码如下:
function c=result(H);
M1=imread('M1.jpg');
M2=imread('M2.jpg');
M3=imread('M3.jpg');
M4=imread('M4.jpg');
M5=imread('M5.jpg');
M6=imread('M6.jpg');
M1=double(M1);
M2=double(M2);
M3=double(M3);
M4=double(M4);
M5=double(M5);
M6=double(M6);
d=zeros(6);
d(1)=corr2(H,M1);
d(2)=corr2(H,M2);
d(3)=corr2(H,M3);
d(4)=corr2(H,M4);
d(5)=corr2(H,M5);
d(6)=corr2(H,M6);
[D,e]=max(d(:));
switch e
case 1
c='P';
case 2
c='F';
case 3
c='M';
case 4
c=1;
case 5
c=0;
case 6
c=3;
otherwise
end
M1, M2, M3, M4, M5, M6为标准模板对应的二维数组。函数在开始运行时,从主函数里得到待识别的字符,此字符与模板进行相关运算,同时找出相关运算后的最大值及对应的函数位置。然后对最大位置进行判别,返回所对应的字符给主程序。并在MATLAB运行窗口显示出来。
编写result.m函数大大简化了计算量,每个字符在识别的时候直接调用此函数,避免了重新编程浪费的时间及空间。这是本次车牌识别中的一大亮点
运行结果,MATLAB的运行窗口显示出的车牌号码为:P,F,M,1,0,3。完成了准确识别车牌的目的。
6.总结:
6.1 设计过程说明
在汽车车牌识别的整个过程中,查找了很多资料,综合了各方面的信息。车牌实现的每一步都有许多的方法,各种方法都有其优劣,但是对于具体的图像处理,并不是每一种理论在实践中都可以实现,即使实现了也很难说哪一种方法最合适,还得在具体的实验中比较选择。以车牌预处理为例,经过滤波和边界增强处理后提取出的车牌效果明显没有未处理的效果理想。第二点在程序调试的过程中要耐心的检查每一个错误。测试结果表明,本设计有以下几条优点:
1. 充分利用MATLAB中已有的函数库。整个程序设计简单易行
2. 识别准确率高
6.2设计工具说明:
车牌识别程序设计能够得以顺利完成。在很大程度上得利于MATLAB这套软件, MATLAB功能强大,它包括数值计算和符号计算,并且计算结果和编程可视化。这为编程调试创造了一个便利的环境。作为图像处理最适用的工具之一,其突出的特点是它包含一个图像处理工具包,这个工具包由一系列支持图像处理操作的函数组成。所支持的图像处理操作有:图像的几何操作、邻域和区域操作、图像变换、图像恢复与增强、线性滤波和滤波器设计、变换(DCT 变换等) 、图像分析和统计、二值图像操作等。在图像的显示方面,MATLAB 提供了图像文件读入函数imread ( ) ,用来读取如: bmp 、tif 、jpg、pcx、tiff 、jpeg、hdf 、xwd 等格式图像文件;图像写出函数imwrite () ,还有图像显示函数image ( ) 、imshow() 等等。这些,都使编程效率大为提高。
7.讨论
本设计已成功达到了车牌识别的目的,而且准确率也很高。但是在整个设计过程中,发现了几个值得参考的算法,也试图用这种算法来实现车牌识别,但种种原因,而未采用。现在次简单讨论一下:
6.1.含8个方向的模板的边缘提取算法
本设计在边缘提取之时,使用的是梯度算子。这种算法的优点是简单易行,但是因为它不包含边缘的方向,因此对噪声不够敏感。目前,在图像处理方面使用得最多的是一种可抗噪声的Sobel算法。它定义了8个方向的模板。
通常物体的边缘是连续且光滑的,而噪声是随机的。 在任一边缘点附近沿边缘的走向总能找到另一边缘点,且这两边缘点之间的灰度差及方向差都不可能很大。但是噪声则不同,一般情况下,沿任一噪声点的方向(通过上述模板运算得到)不太可能找到与其灰度差及方向差都很小的噪声点。正是利用这一基本思想,本算法能将实际的边缘点与噪声点区分开来。
加权领域平均算法来进行滤波处理
6.2 加权领域平均算法来进行滤波处理
由实验我们可以看出,一般的滤波器在对图像进行噪声滤除的同时对图像中的细节部分有不同程度的破坏,都不能达到理想的效果。但是采用加权的邻域平均算法对图像进行噪声滤除, 不仅能够有效地平滑噪声, 还能够锐化模糊图像的边缘。 加权的邻域平均算法的基本思想是: 在一个邻域内, 除了可以利用灰度均值外, 灰度的上偏差和下偏差也能够提供某些局部信息。算法的计算公式描述如下, 用f (x ,y ) 表示原始图像, g (x , y ) 为平滑后点(x , y ) 的灰度值,V x , y 表示以点(x , y ) 为中心的邻域, 该邻域包含N 个象素,m (x , y ) 表示邻域V x , y 内的灰度均值。NI表示邻域内大于平均值的像素个数,Ng表示小于平均值的像素个数,而N0表示等于平均值的像素个数。则修正的邻域平均法由下式给出:
m - Aı m l; N l > max{N g ,N 0}
g(x,y)= m + Aı m g; N g > max{N l ,N 0} (1)
m ; else
(1)式(1) 中, A为修正系数, 取值范围为0~ 1, 其大小反映V x , y 中的边缘状况。 以上是我认为在图像处理中比较有价值的两点,有兴趣的可以上网查阅相关的资料。
【参考文献】
[1] 霍宏涛.数字图像处理.机械工业出版社,2003.5
[2] 陈桂明、张明照、戚红雨.应用MATLAB语言处理数字信号与数字图像。科学出版社,2000
[3] 郎锐.数字图象处理学Visual C++实现.北京希望电子出版社,2002.12
[4] 刘露、强.汽车牌照自动识别技术初探,中国公路网,2003-09-26
[5] 周妮娜、王敏、黄心汉、吕雪峰、万国红.车牌字符识别的预处理算法.计算机工程与应用,2003(15)
[6] 佘新平、朱 立.一种具有抗噪声干扰的图像边缘提取算法的研究,2001-6-4
[7] 苑玮琦、伞晓钟. 一种汽车牌照多层次分割定位方法 ,2004 Vol.9 No.4 P.239-243
[8] 许志影、李晋平.MATLAB极其在图像处理中的应用.计算机与现代化,2004(4)
[9] 董慧颖、曹仁帅.汽车牌照自动识别系统中字符分割算法研究.沈阳工业学院学报2003(12)Vol.22 No.4
[10] 崔 江、王友仁.车牌自动识别方法中的关键技术研究.计算机测量与控制,2003.11(4)
[11] 王年、李婕、任彬、汪炳权.多层次汽车车牌照定位分割方法. 安徽大学学报,1999(6)Vol.23.No.2
[12] 马俊莉、莫玉龙、王明祥.一种基于改进模板匹配的车牌字符识别方法.小型微型计算机系统Vol.23.No.2