2.2 图像二值化
在车牌自动识别系统中,从汽车的彩色图像信息输入到最终车牌号码的获取大致要经过如下几个过程:车牌图像二值化、区域分割、字符切分、字符识别。其中二值化是非常关键的一步,二值化的效果直接影响到后面的切分和识别。因为字符的切分和识别是基于车牌区域的二值化结果进行的。二值化算法又称为阈值算法,其目的就是要找出一个合适的阈值, 将待研究的区域划分为前景和背景两部分。二值化后的车牌要能再现原字符图像,基本不出现笔画断裂和粘连现象,尽量不丢失原字符的特征。为此,必须对二值化算法作深入细致的研究。
2.2.1 彩色图像和灰度图像
定义二维亮度函数f(x,y),其中,x、y是空间坐标,f(x, y)是点(x,y)的亮度幅值。 彩色图像由三个二维亮度函数f(x,y)组成(RGB色制为R(x,y),G(x,y),B(x,y))。(x,y)表示图像的空间坐标,R(x,y),G(x,y),B(x,y)三个函数的值表示配色方程中三色的色饱和度。根据配色方程,即图像中任意一点的色度,都可以用R(x,y),G(x,y),B(x,y)三各色饱和度函数相加得到。
灰度图像是一个二维灰度(或亮度)函数f(x,y)。(x,y)表示像素的位置信息,函数值就是该像素的灰度值。对于灰度图像而言,每个像素的亮度f(x,y)用一个数值来表示,通常数值范围在0到255之间,用灰度值0表示黑、用255表示白,其它值表示处于黑白之间的灰度。 对于将彩色图像转换成灰度图像时,图像灰度值可由下式(2—2)计算,
(2-2)
2.2.2 基于灰度的图像二值化
假设一幅灰度车牌图像的大小为M行N列,用f(x ,y) (0≤x (2-3) 这里的T 称为阈值(Threshold) ,经过二值化处理后,字符前景和车牌背景就由黑白两种颜色分开,选择不同的阈值会得到不同的分离结果。在车牌识别中对车牌灰度图像进行二值化的方法主要有全局动态二值化、局部自适应二值化。 2.2.2.1 全局动态二值化 全局动态二值化从整个灰度图像的像素分布出发寻求一个最佳的门限值,其中的经典算法是Otsu算法,它是在判别最小二乘法的基础上推导出来的。基本思想是:取一个阈值t ,将图像像素按灰度大小分为大于等于t 和小于t 两类,然后求出两类像素的平均值方差 (类间方差) 和两个类各自的均方差 (类内方差) ,找出使两个方差比 / 最大的阈值t,该阈值即为二值化图像的最佳阈值。这种方法不论图像的直方图有无明显的双峰,都能得到较为满意的效果。因此这种方法是阈值自动选取的较优方法。 具体方法如下: 设给定图像具有1 ,2 ,3 , ??,L ,共L 级灰度,阈值设为k ,把灰度大于k 和小于k 的像素分为两类。类1中的像素总数为 ,平均灰度为 ,方差为 ;类2 中的像素总数为 ,平均灰度为 ,方差为 ;所有图像像素的平均值为 。类间方差 和类内方差 分别由下几式决定: 算法的描述如下: ①求出图像中最大的灰度max gray ; ②令k = 0 ; ③求出大于和小于k的这两类像素总数和像素的灰度平均值; ④计算类间方差 和类内方差 ; ⑤k = k + 1 ,循环3~5 步,直到k > max gray ; ⑥找出最大的值,得到相应的阈值k。 Otsu 算法基于图像像素的灰度值分类,按照使类间方差与类内方差比值最大的原则获得门限值,使目标字符占用背景空间方差最大,即找出使两个方差比 / 的最大的阈值T ,这种算法具有以下优点: ①算法的实现简单; ②基于图像的整体特性的积分而非局部特性; ③可推广到多阈值的分割方法; ④该算法的适用性强。 然而,尽管该方法有一定的自适应性,但以灰度分布为特征,判决准则函数S ( k) = / 可能呈双峰,即全局最大值不能保证是正确的阈值;另外当图像存在光照不均匀的现象时,往往整幅图无法找到合适的单一阈值。 2.2.2.2 局部自适应二值化 局部自适应二值化是针对灰度图像中的每一个像素逐点进行阈值计算的,以当前点为中心选取一个适当的邻域模板,从这个模板中的像素灰度值中获得判据,来决定对当前点是置0 还是置1。文献中的LEVBB 算法是局部自适应算法的典型算法: ① 对每一点计算阈值: ②计算另一阈值T3 : ③对每点的阈值T2进行一次滤波处理得新阈 ④逐点对图像进行二值化 若(f (x ,y) > T4 (x ,y) ) 且(T3 (x ,y) > (T1 - min) ) 则b (x ,y) = 1否则b(x ,y) = 0 其中T1 满足 ,H(x)为灰度直方图。 2.2.2.3 二值化的方法很多,但又没有对任何目标对象都普遍适用的方法,必须根据具体的处理对象而定。二值化的关键是要找到合适的阈值t来区分目标和背景。根据本小节以上对灰度图像二值化的介绍,这里使用一种最简单直观的二值化——直接选择某个阈值t,由上式进行二值化。可以通过反复选择t的值套用公式,找到效果最佳的阀值。 2.2 边界提取算法选取 边界提取的算法采用Roberts边界检测算子(局部差分算子) ,其算法由下列公式给出: S(i,j)=|f(i-1,j-1)+2f(i-1,j)+f(i-1,j+1-[f(i+1,j-1)+2f(i+1,j)+f(i+1,j+1)]|+|f(i-1, j-1) +2f(i,j-1)+f(i+1,j-1)-[f(i-1,j+1)+2f(i,j+1)+f(i+1,j+1)] | 取适当门限THs ,则若S(i,j)>THs ,则(i,j)为阶跃边缘点,其中S(x,y)是具有整数象素坐标的输入图像,平方根运算使该处理类似于在人类视觉系统中发生的过程。在边界提取算法中拉普拉斯算子的效果最好,然而它的计算量大,在车牌初步定位中使用Roberts算子也能满足需要。Roberts算子提取边界的结果如图4所示。 区域寻找与分割 得到边界图像后,就可以对其进行区域寻找和分割处理。在对288×768的二值边界图像处理时,使用隔5行对区域进行一次特征查找和识别,如果满足条件,就停止继续查找。直接从灰度图中剪切下所要的区域,以便做后续识别处理。车牌特征:在一定的矩形区域内,边界图像二值变换次数在一定范围内,本文识别方法是以车牌号区域内二值变化数范围(28-50 次)为主要搜索方法,辅助以区域外的图像二值变化数较少的特征来搜索所要的区域。目的是为了在搜索过程中减少搜到的冗余区域,以达到高的精确度和准确度。区域分割后的图像效果如图5 所示。 2.2.3 图像二值化结果演示 如图2—1、图2—2、图2—3所示,分别演示出了灰度处理后,二值化和取反后的车牌图像。但是,很明显可以看到取反后的图像上存在一些诸如螺丝钉等一些我们并不想得到,有可能对后续字符的识别产生严重影响的噪声点。 为了得到清晰且没有任何噪声的车牌图像。我将在下本一节中介绍用数学形态学的方法去除噪声的方法。实验证明效果很理想。 图2—1由彩色车牌经灰度处理后的灰度图像 图2—2二值化后的图像 图2—3二值化后图像取反得到白底黑字的图像 2.3 用数学形态学的方法去除噪声 二值图像中所有的像素点值只有0和1两种值,在形态学中,把0和1对应于关闭和打开,关闭对应该像素点的背景,而打开对应该像素点的前景。用这种方法很容易识别出图像的结构特征。本节主要讨论二值形态学的内容。 数学形态学的基本操作为膨胀、腐蚀。以及由膨胀腐蚀结合在一起的开、闭操作。击中、击不中操作。 (1) 腐蚀:是用结构元素S在被研究的对A中移动,当S全部在A中时,S的原点的位置留下,而其他的部分腐蚀掉。 (2) 膨胀:先做结构元素S的映射,S的映射在A上移动,当S的映射至少有一个点和A 重合是,其原点的位置将被保留下来。 (3) 开运算:是腐蚀和膨胀的综合,即先用S腐蚀A ,再用S膨胀A。 (4) 闭运算:跟升运算正好相反,既先膨胀,再腐蚀。 (5) 击中:被研究对象X,结构元素S1和S2,且S2和S1的交集是空集,击中的结果是X被S1腐蚀 的结果与X被S2膨胀的结果之差。 2.3.1 数学形态学的几种基本运算 膨胀和腐蚀是两个形态学基本的操作。本质上是用结构元素映射输入图像。二维或平面结构元素是一个包含0和1元素的数组。结构元素的中心像素成为原点,它是结构元素参与形态学运算的参考点,通常为用户期望的像素。 膨胀过程是在图像中对象的边界上添加像素点,而腐蚀是逆过程。对应的添加和移除像素点的数量依赖于图像结构元素矩阵的大小和形式。 2.3.1.1 膨胀 膨胀是在二值图像中“加长”或“变粗”的操作。这种特殊的方式和变粗的程度由一个称为结构元素的集合控制。图2—4说明了膨胀的计算过程。图2—4(a)显示了包含一个矩形对象的简单二值图像;图2—4(b)是一个结构元素,在此例中它是一条5个像素长的斜线。计算时,结构元素通常用0和1的矩阵表示;有时,如图中所示,为方便起见只显示1。另外,结构元素的原点必须明确标明。图2—4(b)用黑色方框标明了结构元素的原点。图2—4(c)明确地描述了膨胀处理,这种处理会将结构元素的原点平移过整个图像区域,并且核对哪些地方与值为1的像素重叠。图2—4(d)所示的输出图像在原点的每个位置均为1,从而在输入图像中结构元素至少重叠了一个1值像素。 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 a) 1 1 1 1 1 (b) 平移到这些位置的结构元素来覆盖原图像中的任何1值像素 * * * * * * * 当原点平移到“*”处时,结构元素在原图像中叠加1 * * * * * * * * 1 1 1 1 1 1 1 * * * 1 1 1 1 1 1 1 * * * 1 1 1 1 1 1 1 * * * * * * * * * * * * * * * (c) 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 0 0 0 0 0 0 0 <, /TD>