数字图像处理技术的应用领域非常广泛,其中运用于车牌识别系统是具有代表性的。随着现代交通技术的发展,汽车逐渐成为人们日常生活中不可缺少的一种交通工具。停车场管理的自动化、高速公路收费的自动化,这必然对交通管理有更高的要求。但是在现有的图像处理的车牌识别算法中,在存在识别速度慢,识别效率低等问题,所以对车牌识别算法的研究是非常有必要的。
一个完整的车牌识别系统包括车牌图像采集、车牌定位、车牌字符分割、车牌字符识别。本文主要依据图像处理的基本理论,对于车牌识别中的车牌定位算法进行学习、研究。首先设计了基于边缘检测的车牌定位算法,研究各种边缘检测算子的边缘检测效果,选择合适的边缘检测算子进行边缘检测。发现经过边缘检测后的图像还存在许多干扰区域,随后直接进行车牌定位,发现不仅增加了车牌定位的计算量影响运行速度还会出现误定位的情况。为了达到更好的定位效果,在边缘检测后增加形态学处理的方法,对图像腐蚀、填充简化图像数据,去除不相干结构,节省运算时间。最后对车牌进行具体的定位,对图像进行行列扫描,先定位出车牌的左右边界,再定位出车牌的上下边界。
基本要求(或指标)
1.学习研究车牌定位所用到的滤波算法、灰度转换算法、边缘检测算法
2.从Roberts算子、Sobel算子、Prewitt算子、拉普拉斯算子、LOG算子、Canny算子中找出 合适的边缘检测算法
3.实现定位出车辆牌照的定位
系统结构与工作原理
车牌通常在各种复杂背景、环境下采集得到的,由于光照不均、车辆的自身运动、图像的采集设备的自身因素,都会导致车牌图像质量的退化,干扰车牌有效信息的定位、提取。因此在进行车牌定位之前,要进行图像预处理。预处理包括彩色图像灰度化、图像去噪、图像对比度增强。再进行车牌图像粗定位和细定位。车牌定位系统结构如图1。
![]()
图1 车牌定位系统结构
方案比较与选择
如今车牌识别的思路大致有两种:一是灰度化后二值化再进行定位分割识别 二是基于彩色图像的车牌识别。如今的车辆图像都是由摄像头、数码相机拍摄的彩色图像。彩色图像是由红(R)绿(G)蓝(B)三基色组成的,在数字图像中,每一个基色被分成0到255共256个等级。三种基色叠加,则有16777216种颜色。说明一幅彩色图像最多有1600多万种颜色,存储这么一幅彩色图像不仅要有足够大的空间,还需要复杂的图像处理算法,如果图像处理程序运行的时间过长,就不满足车牌实时定位识别的要求。所以还是选择彩色图像灰度化的处理方法。
本文研究的是基于边缘检测和数学形态学相结合的车牌定位方法。边缘算子很多种,要找到合适的算子,才能达到良好的定位效果。数学形态学主要以腐蚀和膨胀这两种数学形态,通过开运算和闭运算来展开。
图像去噪:低通滤波器滤除噪声同时模糊边缘,高通滤波器增强边缘同时增强了噪声。所以图像去噪采用中值滤波,中值滤波是一种局部平滑技术,既能消除图像中的噪声,还能有效的保护边界。图像对比度增强:通过灰度拉伸增强对比度。
图像预处理
1. 彩色图像灰度化
加权平均值法:给R、G、B赋予不同的权值,并使R、G、B的值加权平均,即:
![]()
其中,
![]()
、
![]()
、
![]()
分别为R、G、B的权值。
![]()
、
![]()
、
![]()
不同的值加权平均值法就会形成不同的灰度图像。由于人眼对绿色敏感度最高、对红色次之、蓝色最不敏感。经实验和理论推导证明,当
![]()
=0.30、
![]()
=0.59、
![]()
=0.11时能得到最好的灰度图像。在MATLAB图像处理工具箱中,用的函数是rgb2gray。
2. 中值滤波
中值滤波是一种平滑滤波、一种非线性滤波。取一个奇数个点的滑动窗口,对窗口内像素的灰度值进行排序,取中间值作为原窗口中心点处像素的灰度值。步骤如下:
①将模板在图像中漫游,并将模板中心与图像中某个像素的位置重合 ;
②读取模板下各对应像素的灰度值 ;
③将这些灰度值从小到大排列成一列 ;
④找出排在中间的一个值 ;
⑤将这个中间值赋给对应模板中心位置的像素。
在MATLAB图像处理工具中,用到的函数是medfilt2。取的是3*3的平滑窗口。
图4 中值滤波后的图像
3. 灰度级变换
用于图像对比度增强,在MATLAB中用的函数是:imadjust调用格式:J=imadjust(I)将图像I中的亮度值映射到J中的新值,增加了输出图像的J的对比度。
预处理分析:去噪后的图像,平滑了噪声,很好的消除了图像中噪点的干扰,保护了边界信息。
图像边缘检测
经过图像预处理后,图像的边界及轮廓一般会比较模糊,为了消除这种不利影响,就需要边缘检测,使得图像的边缘更加清晰。之前的滤波对图像进行积分或平均运算,会使得图像变得模糊,因此要对图像进行逆运算微分使图像重新变得清晰。
边缘检测的基本概念:边缘是一组相连的像素集合,通常位于两个不同区域之间。在边缘方向上灰度连续,在另外方向上灰度跳变。
边缘检测的算法通常对邻域内像素灰度求一阶导数、二阶导数、梯度来实现的。这些计算过程称之为算子。边缘检测的过程可以分解为对图像的每个像素计算判断的过程。边缘检测的结果通常用灰度图或二值图来表示,边缘的部分用灰度较高的像素表示,没有边缘的部分在灰度图中显示为灰色或黑色。越明显的边缘,在灰度图中越亮。边缘检测结果图中的灰度值可以通过算子计算原图像中对应像素即可。
1. 基于梯度的边缘检测
在车牌图像处理中,图像是二维的,梯度算子就是能够由标量函数产生向量函数的一种运算。对于离散的数字图像而言,梯度算子的导数将原来的式子:
![]()
变成差分形式:
![]()
寻找一幅数字图像的离散梯度分两个步骤,首先在两个方向上寻找差分:
![]()
然后找到梯度向量的模值以及方向。两个方向
![]()
的差值可以用卷积核得出,也就是边缘检测算子。
Roberts算子(2*2):
![]()
Roberts算子边缘检测后的图像如图6所示:
![]()
图6 Roberts算子边缘检测后的图像
Sobel算子(3*3):
![]()
Sobel算子边缘检测后的图像如图7所示:
![]()
图7 Sobel算子边缘检测后的图像
Prewitt算子(3*3):
![]()
Prewitt算子边缘检测后的图像如图8所示:
![]()
图8 Prewitt算子边缘检测后的图像
分析:Sobel算子和Prewitt算子对噪声有一定的抑制能力 , 但不能完全排除伪边缘,甚至有些边缘丢失。 Roberts 边缘算子是一种利用局部方差算子寻找边缘的算子 , 相比之下定位比较精确。
2. 拉普拉斯算子
拉普拉斯边缘检测算子也是针对图像中3*3领域的检测。;是一个标量算子,是两个梯度向量算子的内积:
![]()
对于二维空间N=2的情况下,拉普拉斯算子就是两个维度上二阶差分的和,拉普拉斯算子可以通过一个二维卷积模板来执行。两个常用模板如下:
![]()
拉普拉斯模板相当于一个高通滤波器,对于灰度变化较快的边缘非常有效,对于灰度级变化较慢的边缘即相对较宽的区域,也可使用拉普拉斯算子,对较宽的边缘进行二阶求导,就会在这条宽泛的边缘中形成零交叉点或称过零点。边缘位置可以根据过零点来确定。拉普拉斯边缘检测后的图像如图9所示:
![]()
图9 拉普拉斯边缘检测后的图像
分析:拉普拉斯是二阶微分算子 , 对图像中的阶跃型边缘点定位准确且具有旋转不变性 ,但容易丢失一部分边缘的方向信息 , 造成一些不连续的检测边缘,同时抗噪能力较差。效果不如梯度算子,所以舍弃。
3. 高斯拉普拉斯LOG
3*3领域的检测模板,覆盖的像素较少,运动量也相对较小,但不足的是检测精度低,得到的边缘线不完整。LOG算子用到的是高斯算子的二阶导数。用的是领域为5*5的卷积模板:
![]()
卷积核模板可由LOG算子表达式得出。
![]()
LOG算子边缘检测后的图像如图10所示:
![]()
图10 LOG算子边缘检测后的图像
分析:相对前面几种边缘检测算子,LOG的检测效果较好,克服了抗造能力较差的特点。车牌的边缘检测得相对较全。所以边缘检测算子采用LOG算子。
4. canny算子
Canny算子基本步骤:用二维高斯模板进行卷积以消除杂点;用一阶偏导的有限差分来计算梯度的幅值和方向;对梯度幅值进行非极大值抑制;双阈值算法检测和链接边缘;利用多尺度综合技术对结果进行优化。边缘检测后的图像如图11所示:
![]()
图11 canny算子边缘检测后的图像
分析:canny算子是基于最优化思想推导出的,但实际效果并不一定最优。检测的边缘过于精密,把我们不需要的边缘也检测出来了。随后进行的车牌定位不准确,上下边界定位基本准确,左右两边的边界定位不出,所以舍弃。
形态学处理
经边缘检测后,还有许多干扰区域,,要利用形态学算子来简化数据,去除不相干部分。形态学处理以腐蚀、膨胀两种基本运算为基础。
先对图像进行腐蚀,把小于结构元素的物体去掉。用结构元素的中心点与原图的点逐个比对,在范围内保留,不在则去除。从而达到边界向中心收缩的效果。再对图像进行膨胀,膨胀是对边界进行扩充,将于物体接触的背景部分合并到该物体中。如果两物体靠的太近,会使它们连通。将结构元素里的中心点与原图的点及周围的点逐一对比,有一个点落在X的范围内,则该中心点与X上的点相同。这里首先选取结构元素为[1;1;1],对图像进行腐蚀,再选择结构元素为[25,25]的矩形进行膨胀运算,使车牌字符间连通。图12为形态学处理后的图像。
![]()
图12 形态学处理后的图像
分析:边缘检测后的图像经过腐蚀膨胀,把不是车牌的部分有效地舍去了,只留车牌的部分。
车牌定位
对图像进行行列扫描,并统计各行各列的像素值之和。将各行像素值和存储到一个矩阵中,逐一比较将累加值最大值点的位置找出。设定一个边界值,经多次试验,车牌位置的像素值累加和不应少于50(如果小于50则认为该点不在车牌区域内)至少大于1(保证车牌在图像中),找到最大值后再做循环扫描,最大值点的前一个值为1,则认为该点也是车牌中一个点。这样可以得到车牌的左边界,最大值的后一个像素值为1,则认为该点也是车牌中的点,这样可以的到车牌的右边界。
在确定左右边界后,再对左右边界区域内的像素进行列扫描。如果列像素累加和大于3,则认为该像素点在车牌区域内。循环近似得到车牌上下边界。实现对车牌的定位。
分析:通过行列扫描的方法,切割出了车牌的上下边界和左右边界,实现了车牌的定位,满足基本要求。但切割出的车牌稍有倾斜,应在精准定位前,将倾斜的车牌进行矫正。