基于数字图像处理的车牌识别系统
基于数字图像处理的车牌识别系统
1.车牌识别系统研究⽬的及意义
车牌识别系统的主要任务是分析和处理摄取到的复杂背景下的车辆图像,定位分割牌照,最后⾃动识别汽车牌照上的字
符,LPR是利⽤的唯⼀性来识别和统计车辆,它是以数字图像处理、模式识别、计算机视觉等技术为基础的智能识别系统在现代化交通发展中车牌识别系统是制约交通系统智能化、现代化的重要因素,LPR系统应该能够从⼀幅图像中⾃动提取车辆图像,⾃动分割牌照图像,对字符进⾏正确识别,从⽽降低交通管理⼯作的复杂度。
2.车牌图像预处理
为了便于车牌的分割识别,摄像机摄下的原始图像应具有适当的亮度和对⽐度。但通常经输⼊系统获取的车牌图像信息由于光照条件、牌照的整洁度、摄像机的状态(焦距、⾓度和镜头的光学畸变)以及车速的不稳定等因素都会使图像含有各种各样的噪声与畸变。例如由于光照度不均匀造成图像灰度过于集中;由摄像头获得的图像经过AD转换、线路传送都会产⽣噪声污染;车牌的字符部分受到磨损或是被污迹覆盖等等。
这些主客观因素不可避免地影响车牌图像的清晰程度,降低图像质量,轻者表现为图像不⼲净,难以看清细节,重者表现为图像模糊不清、歪斜或缺损,车牌字符边界模糊、细节不清、⽐划断开、粗细不均等现象。这势必会影响车牌区域分割,降低车牌字符识别的准确度。因此,在对车牌图像进⾏分析之前,必须要对车牌图像进⾏预处理。对车牌图像的预处理主要包括以下三个⽅⾯:
(l)图像对⽐度增强。由于车牌识别系统需要全天候⼯作,⾃然光照度的昼夜变化会引起车辆图像对⽐度的严重不⾜,所以增强图像是很有必要的。
(2)图像去噪。通常得到的汽车图像会有⼀些污点,为了保证识别的效果,需要对图像进⾏去噪处理。
(3)倾斜矫正。摄像机的位置、车辆的运动等因素经常使拍摄出来的汽车图像有⼀定的倾斜,这就需要对图像进⾏倾斜矫正,或在分割出车牌区域之后对字符倾斜矫正
2.1图像的灰度化
通常情况下,实际的车牌识别系统中由摄像机采集到的原始图像是彩⾊图像,所有的彩⾊图像都是由红(R)、绿(G)、蓝(B)三基⾊组合⽽成,在数字图像中每⼀个基⾊都被分为256个等级,即0~255。由R、G、B三基⾊不同级别的组合⽅式,可以计算出⼀幅彩⾊数字图像最多可包含167772种颜⾊。在灰度图像中R=G=B,因此灰度图像中只有⼀种灰度颜⾊,同彩⾊图像中的三基⾊⼀样,灰度⾊也被分成0-255,
共256个等级,同理可以计算出⼀幅灰度图像最多只包含256种颜⾊。由此可见,⼀幅彩⾊图像所包含的信息量远远⼤于⼀幅灰度图像,它不仅需要⼤量的存储空间还需要复杂的图像处理算法,这使得整个车牌识别系统操作时间过长,⽆法达到其实时性的要求。所以,⾸先应将采集到的彩⾊图像转换成⼀幅灰度图像,这个过程便是图像的灰度化。令g为转换后灰度图像在某
⼀点的灰度值,R、G、B分别为转换前该点的R、G、B分量。
图1彩⾊原图
使⽤matlab⾃带的灰度变换函数rgb2gray(),对彩⾊图⽚进⾏灰度化处理,结果如下图。
图2灰度图像
2.2灰度拉伸
对车辆图像进⾏灰度化处理之后,车牌部分和⾮车牌部分图像的对⽐度并不是很⾼,此时如果直接进⾏边缘提取,由于车牌界限较为模糊,难以提取出车牌边缘,因⽽难以准确定位车牌。为了增强牌照部位图像和其他部位图像的对⽐度,使其明暗鲜明,有利于提⾼识别率,需要将车辆图像进⾏灰度拉伸。
使⽤matlab⾃带的灰度调整函数imadjust().对灰度图像进⾏灰度拉伸,结果如下:
图3 灰度拉伸后的图像
从两图的对⽐中我们可以看到灰度拉伸后对⽐度明显增强,车牌区域更加明显。
3.图像去噪
车牌图像中的边缘、细节、跳跃部分以及噪声都代表图像的⾼频分量,⽽⼤⾯积的背景区和缓慢变化部分则代表图像的低频分量。由此可见,若采⽤低通滤波法去除车牌图像中的噪声,在除去噪声的同时也会使车牌及字符的边缘变得模糊,这对后续的车牌定位以及字符识别⾮常不利。反之,若采⽤⾼通滤波法则在增强边缘信息的同时也增了噪声。因此,为了在保证在车牌图像边缘信息不被弱化的情况下除去噪声,采⽤中值滤波法来去除图像噪声。中值滤波是⼀种⾮线性滤波,由于它在实际运算过程中并不需要图像的统计特性,所以⽐较⽅便。中值滤波⾸先是被应⽤在⼀维信号处理技术中,后来被⼆维图像信号处理技术所引⽤。在⼀定的条件下,可以克服线性滤波器所带来的图像细节模糊,⽽且对滤除脉冲⼲扰及颗粒噪声最为有效。中值滤波它是⼀种邻域运算,类似于卷积,⾸先把邻域中的像素按灰度等级进⾏排序,然后选择该组的中间值作为输出像素值。它能减弱或消除傅⾥叶空间的⾼频分量,因为⾼频分量对应图像中的边缘区域,且其灰度值具有较⼤较快的变化,该滤波可将这些分量滤除,使图像平滑。其主要原理是:⾸先确定⼀个以某个像素为中⼼点的邻域,⼀般为⽅形邻域;然后将邻域中的各个像素的灰度值进⾏排序,取其中间值作为中⼼点像素灰度的新值,这⾥的邻域通常被称为窗⼝。当窗⼝在图像中上下左右进⾏移动后,利⽤中值滤波算法可以很好地对图像进⾏平滑处理。
具体步骤如下:
①将模板在图像中漫游,并将模板中⼼与图像中某个像素的位置重合;
②读取模板下各对应像素的灰度值;
③将这些灰度值从⼩到⼤排列成⼀列;
④出排在中间的⼀个值;
⑤将这个中间值赋给对应模板中⼼位置的像素。
本次作业采⽤matlab⾃带的中值滤波器函数medfilt2(),对灰度图像进⾏去噪处理。
图4去噪后的图像
3.车牌定位
3.1车牌边缘的提取
采⽤matlab⾃带的edge()函数对图像进⾏边缘的提取。
edge()格式:[g,t]=edge(f,’method’,parameters)
本次作业采⽤canny边缘检测器。进⾏边缘检测,检测后的结果如图
5。
图5边缘提取后的图像
3.2形态学处理
车牌边缘很明显,但是车牌边缘并不是连续的,不利于根据其特征进⾏进⼀步的判断。因此,需要对其进⾏形态学的处理,使其成为⼀个连通的整体,便于后续定位。
在进⾏形态学处理时,⾸先采⽤imclearborder函数对提取后的车牌边缘进⾏连通处理,删除和图像边界相连的细⼩的对象,使得相邻的区域可以连成⼀个整体。然后进⾏数学形态学的腐蚀和膨胀运算,从⽽使车牌区域的垂直边缘连接成⼀个整体,同时和周围的⼲扰区域分离,成为⼀个独⽴的区域。⽔平结构元素可以是形如[1…1]的滑动窗⼝,结构元素的⼤⼩取决于车牌图像的⼤⼩,⼀般取所有车牌图像⼤⼩的统计均值。相应的代码如下:
a1=imclearborder(a1,8); %8连通
st=ones(1,14); %选取的结构元素
bg1=imclose(a1,st); %闭运算
bg3=imopen(bg1,st); %开运算
bg2=imopen(bg3,[1 1 1 1 1 1 1]');
⾸先进⾏闭运算,使得⽔平相邻的边缘连接成为连通区域,由于车牌长度⽐较长,所以选取的结构元素为[1 1 1 1 1 1 1 1 1 1 1 1 1 1]。然后再进⼀步在垂直边缘上进⾏两次开运算,两次结构元素的选取是由实验的结果得到的。在采⽤这两个结构元素进⾏开运算后使得车牌区域与其它背景区域分开,成为独⽴的连通域。处理后的图像如图6所⽰。从图中可以看出。车牌区域已经⾮常明显,和其他区域有明显的区别。
图6进⾏开闭运算之后的图像
3.3候选区域的提取
提取候选区域的步骤是:⾸先对经过开闭运算处理的图像进⾏区域提取,并计算区域特征参数,然后根据车牌的先验知识对区域特征参数进⾏⽐较,提取车牌区域。本课题选择使⽤车牌的宽⾼范围和⽐例关系对车牌进⾏初步定位。对车牌的区域提取可以利⽤regionprops 函数,对图像每个区域进⾏标记,然
后计算每个区域图像特征参数:区域中⼼位置、最⼩包含矩形,⾯积。最后计算出包含所标记区域的最⼩矩形的宽和⾼。提取车牌区域特征的代码为:[L,num] = bwlabel(bg2,8); %区域标记
Feastats=regionprops(L,'all'); %区域特征提取
Area=[Feastats.Area];
BoundingBox=[Feastats.BoundingBox];
RGB = label2rgb(L, 'spring', 'k', 'shuffle');
width=BoundingBox((l-1)*4+3); %计算包含标记区域的最⼩区域的宽height=BoundingBox((l-1)*4+4); %计算包含标记区域的最⼩区域的⾼2007 年实施的车牌标准规定,车前车牌长440mm,宽140mm。其⽐例为440 /140 3.15 ≈。根据图像像素的⼤⼩,这⾥选取筛选条件为宽在50到150之间,⾼在20到50之间,同时宽⾼⽐例应⼤于0.45,就可以⽐较准确的得到车牌的⼤致位
置。初步提取的车牌图像如图7所⽰。
图7初步提取的车牌
4.字符切分
4.1车牌⼆值化
图像中对象物的形状特征的主要信息,常常可以从⼆值图像中得到。⼆值图像与灰度图像相⽐,信息量⼤⼤减少,因⽽处理⼆值图像的速度快,成本低,实⽤价值⾼。因此,在车牌字符切分前,⾸先对图像进⾏⼆值化处理。
图像的⼆值化处理就是将图像上的点的灰度值置为0 或255,这样
处理后整个图像呈现明显的⿊⽩效果,即将256个亮度等级的灰度图经过合适的阈值选取,⽽获得的⼆值化图像仍然可以反映图像整体和局部特征。⼆值化处理后的图像,其集合性质只与像素值为0或255的点的位置有关,不再涉及像素的其他级值,处理过程简单,且数据的处理和压缩量⼩。为了得到理想的⼆值图像,⼀般采⽤封闭、连通的边界定义不交叠的区域。所有灰度⼤于或等于阀值的像素被判定为属于特定物体,其灰度值为255,否则,灰度值为0,表⽰背景或者其他的物体区域。如果某图像在内部有均匀⼀致的灰度值,并且处在⼀个具有其他等级灰度值的均匀背景下,利⽤阀值法就能得到较好的切分效果。如果物体同背景的差别难以⽤不同的灰度值表现(⽐如纹理不同),可以把这些差别特征转换为灰度的差别,然后利⽤阀值法来切分该图像。动态调节阀值来实现图像的⼆值化可动态地观察其切分图像的具体结果。
本次作业采⽤matlab中的im2bw函数对定位后的车牌进⾏⼆值化处理。处理后的效果如下图所⽰。
图8 ⼆值化后的车牌图像
4.2 倾斜校正
虽然标准的车牌字符应为⽔平依次排列,但是由于放置不当或车⾝前进⽅向与图像采集设备不在同⼀条直线上等原因,会造成图像中的车牌倾斜、扭曲。因为⼀个倾斜的数字或字母的识别和⼀个很正的数字或字母的识别是有很⼤差别的,所以车牌定位之后要进⾏倾斜校
汽车牌照
正。⼀般情况下,倾斜校正有两步,第⼀步是出倾斜的⾓度;第⼆部是进⾏坐标变换,得到校正后的图像。
⽬前常⽤的计算倾斜⾓度的⽅法有两种,⼀种是Hough 变换来出倾斜的⾓度,⼀种是利⽤投影的⽅法来出倾斜的⾓度。另外还有Radon变换⽅法等,这⾥主要介绍前⾯两种⽅法。
本次作业采⽤hough算法对图形进⾏倾斜校正。
图9旋转前的图像
图10 hough变换后的车牌⼆值图像
4.3字符切分
经过车牌字符图像的⼆值化和倾斜校正,得到的是⼀个只包含牌照字符的⽔平条形区域,为了进⾏字符识别,需要将牌照字符从图像中分割出来。这⾥常⽤投影法,既简单⼜快捷。投影法切分车牌字符的思想是根据车牌字符的特点,将车牌图像进⾏垂直⽅向的投影,因为字符区域的⿊⾊像素点⽐较多,⽐较集中,同时每个车牌字符之间有⼀定的空隙间隔隔开。这样投影下来得到的投影图应该有多个相对集中的投影峰值,只要根据峰值的特点进⾏分割,就可以得到车牌的字符。
对图像的垂直⽅向进⾏投影,得到的投影图如图11所⽰。
图11 字符投影图
图中有七个⽐较集中的投影峰值,且每个峰值之间都有⼀定的间隔。根据这⼀特点,从左往右依次定位出每个字符的起始和结束位置,并且进⾏切割。然后对切割出来的每个字符图像进⾏⽔平投影。根据⽔平投影像素累加值进⾏⽔平切割,从⽽得到精确切割后的字符。车牌字符切分的具体算法为:
1)对车牌图像进⾏垂直投影,计算出字符的宽度后,确定字符的中间位置,并计算相邻两个字符之间的间距,即中间距离的差值。
取其最⼤值定为第⼆个字符和第三个字符之间的距离。以此为
分界线,分别向前、后两个⽅向进⾏切分,从⽽定位出每个字
符的左右边界,并保存在数组⾥。由于MA TLAB 的数组可以
存放不同⼤⼩的数据,为字符边界信息的存储提供了极⼤的便
利。2)对每个切分出的字符进⾏⽔平投影,确定字符的具体
的上下边界,保存到数组⾥。3)由于⽤于最后识别的字库中
字符模板为24 48 ×像素,所以这⾥对切分出来的字符进⾏归
⼀化处理,统⼀为24 48 ×像素。4)将归⼀化后的字符的信
息保存在数组⾥,做为参数输⼊字符识别模块与模板⽐较进⾏
字符识别。
图12字符切分后的效果图
5车牌字符识别
5.1模板匹配字符识别
⾸先以⼆维图像的处理为例介绍⼀下传统的模板匹配算法。算法的基本思想是:将归⼀化的字符⼆值图像与模板库中的字符⼆值化图像逐个进⾏匹配,采⽤相似度的⽅法计算车牌字符与每个模板字符的匹配程度,取最相似的就是匹配。匹配时相似度函数定义为: