一种利用Hough变换和先验知识的车牌识别新方法
扫描二维码
随时随地手机看文章
随着交通管理系统的日趋现代化,车牌自动识别系统成为智能交通系统的重要组成部分。通过对当前车牌识别的基本原理和主要方法的研究,分析比较各种识别方法的优缺点,针对车牌定位、字符分割和字符识别,本文提出一套实用可靠的算法。
车牌定位作为整个算法步骤的第一步,定位错误将直接导致最终识别错误,定位不精确将提升分割难度。实际中不同车牌图像在拍摄距离和角度、拍摄手法、光照强弱等方面不尽相同,有时甚至差异很大,使得一些传统方法在图像群品质的差异存在较大跨度下其定位准确率低下,缺失普遍性。其中,利用水平灰度跳变特征的分步骤法即先粗略定位再精确定位是相对比较稳定的一种方法,但其缺点也很明显,就是精确定位不够精。为了改善这种情况,本文尝试性地提出了一种利用Hough变换多线检测实现精确定位的方法,同时结合先验知识,改进了水平搜索方式,有效地提升了车牌定位精准率,使得这一算法具有较强的适应性,并且速度快、鲁棒性好。
在字符分割中,得益于定位的良好效果,通过合理地二值化与滤波处理,提出了一种改进的投影法。该算法克服了车牌群光照变化跨度大以及边框、铆钉等常见因素干扰,使投影法字符分割的准确率得到了一定的提升。
车牌字符识别是车牌识别系统的核心部分,本文构造了BP神经网络进行车牌识别。通过反复修正各个参数使该识别算法快速准确,并且具有良好的稳定性,能满足车牌实时识别的要求。
1 车牌定位
1.1 图像预处理
(1)尺寸归一化:车牌图像的尺寸对算法中相关阈值的选取有较大影响。本系统中车牌图像尺寸均已归一化到400×300像素。
(2)图像平滑:为了更好地提取水平灰度跳变特征(与算法有关),有必要先对图像进行水平平滑处理。实验表明,使用[1/2 1/2]这样一种掩膜的效果最好。
1.2 算法
(1)特征提取[1]:提取水平灰度跳变特征。对经过了水平平滑的灰度图像,选取适当阈值T,将每一行各像素与其前一像素比较,若灰度差绝对值超过T,则记为1,否则记为0,从而完成对灰度图像进行水平方向灰度跳变特征的提取。实验证明,此方法与传统边缘检测相比,特征提取效果更显著、噪音更小。以水平方向为对象是因为车牌在水平方向较垂直方向灰度跳变特征更为明显。
(2)水平方向粗定位:对由(1)生成的二值图像,结合先验知识,即图像中车牌位置以下的部分与车牌以上的部分相比干扰要小很多,采取由下至上的行搜索方法。当某1行的1个值个数与整行像素之比值大于一定阈值时,便记下行位置x1,继续逐行上移搜索,当比值小于阈值时记下行位置x2,x1与x2形成坐标对,若x1与x2距离超过较小的高度(以400×300为例,车牌高度应大于10,所以选择10)时,即确定其为车牌水平方向切割位置(为了防止少切,分别对x1和x2进行向下和向上的适当延伸);否则,排除此x1和x2,并继续向上搜索寻找x1、x2坐标对,直到确定x1、x2为止,并对二值图像切割。为了增强稳定性,可以用双行比值代替单行比值,此时应缩小判定阈值。
(3)垂直方向粗定位[2]:设由(2)切割出来的图像为A,对A进行除噪处理后,先用1个与A等高度、宽度与高度相同的矩形框体B对A从左至右遍历搜索[3],若B中1值像素之和与B中全部像素之比大于一定阈值时,记录此时列位置为y1,然后用同样方式从右之左搜索,获得列位置y2。用y1与y2对A切割,完成垂直方向的粗定位。
(4)精确定位:在以往的车牌识别方法中,Hough变换线检测一般只用于车牌矫正,实际上Hough变换线检测更可用来做车牌定位。本文中将利用此对车牌做最后的精确定位。
Hough变换提取直线的原理[4]:
对于图像空间中的任意一点(x0,y0),将其变换为参数空间(θ,r)中的1条曲线r=x0 cos θ+y0 sinθ,对位于同一直线l上的n个点逐一进行上述变换,则在参数空间(θ,r)中对应得到n条曲线,由变换公式可知,这n条曲线必定经过同一点(θ0,r0)。找到参数空间中的这个点就知道了图像空间中的对应直线l,因此,Hough变换可以用来在二值图像中检测直线。
设由算法(3)粗切割得到的图像为C,利用Hough变换对C进行多条直线检测(至少10条以上)。取直线中端点行坐标最小值和最大值分别为车牌上下边界精定位值,取直线左端点列坐标平均值或中值为车牌左边界精定位值,取直线右端点列坐标平均值或中值为车牌右边界精定位值(经过反复实验论证,使用平均值时稳定性优于使用中值)。由此确定的车牌定位结果为最终定位结果。
图1~图7是选取了3幅不同方位角度车牌图像的详细定位过程。从图2可以看出,图像中车牌位置以下的信息干扰明显比以上部分的干扰弱小,这是因为车牌的下方主要是路面背景,而车牌的上方却包含了车灯、中网等敏感信息。由下至上的搜索法充分地利用了这一特征。同时由于车牌多处在图像下半部,从而也减少了搜索时间。用多直线检测,精确度高,鲁棒性好。
2 字符分割
字符分割之前,有必要对倾斜的车牌进行校正。用Hough变换进行倾斜角检测是一种常用的有效途径。
由于实现了车牌定位,可以用全局阈值法对定位结果图像重新二值化,以得到更理想的二值图像。图8是用Otsu法[5]得到的二值图。
字符切割最常用的方法是投影法。如果二值化后车牌图像的字符中粘连和断裂情况不那么严重,只需要垂直投影就可以很好地完成字符切割的任务。但是水平边框、铆钉有时会把一些“谷”填平,使得难以精确确定分割点。尽管如此,垂直投影仍然是字符分割中的一个非常重要的方法。本文对垂直投影法加以改进,基本上克服了边框和铆钉带来的影响。
对于二值化后可能存在的水平边框干扰如图8(a)所示(垂直边框对垂直投影法没有影响),根据先验知识:不管车牌整体的大小如何,单个字符的宽度不会超过整个图像宽度的1/8。因而可将宽度超过1/8或更多一点的白线像素置0。这样既去除了大部分干扰又无字符信息的丢失。
下面将进行校正。选取图9每1列如图10所示的最下方的1值像素,经过Hough变换后如图11所示的可检测到边缘直线,此直线倾角(即车牌倾角θ)根据公式:
对图9进行坐标转换便实现了车牌倾斜校正,如图12所示。其中x0、y0为原坐标,x、y为转换后坐标。
对矫正后的车牌采用垂直投影法进行字符分割,结果如图13所示。
图13(a)中有2个连续的“0”字符粘连在一起,未能被分离,原因是铆钉刚好处在它们中间的位置。用图像处理的手段消除铆钉而又不影响字符信息其难度很大。对于这种情况,针对性的解决办法是直接将包含2个字符的分割板块对等中切。1个字符的宽度不会超过整块车牌宽度的1/5,连续2个字符的宽度肯定超过整块车牌宽度的1/5,根据此先验知识,以宽度大于车牌1/5且小于车牌2/5为条件,可以方便地确定是否存在粘连块。图13(b)与图13(c)没有受到铆钉干扰,因而能1次性分割成功。图14是将粘连板块对等中切后的结果。
3 字符识别
在分类器的选取上,既要求其要有良好的容错,又要求其具有良好的自适应的能力。神经网络具有与人脑相似的高度并行性、良好的容错性和联想记忆功能、自适应、自学习能力和容错等特点,特别是以改进型BP网络为代表的神经网络具有良好的自学习能力、强大的分类能力、容错能力或鲁棒性,可以实现输入到输出的非线性映射。因此本文选择BP神经网络作为字符进行分类、识别的主要方法。
3.1 字符预处理
对切割出来的车牌字符很有必要进行预处理,预处理包括:
(1)大小归一化
为了便于训练和识别,需要对字符图像进行规范化处理,使它们变成统一尺寸的图像,本文中将字符片段归一化为24×14大小。
(2)特征提取
即由归一化得到的字符确定网络输入向量。本文是将24×14网格转换为单一向量输入。
3.2 BP神经网络的设计
大多数实际的神经网络只需要2~3层神经元[6],本文设计的BP神经网络包含2个隐含层。对于神经网络中隐含层节点数目的确定,没有一个固定的规律可遵循。本文中对隐含层内节点数的确定,是以找到1个经过样本训练后,其网络输出与实际结果最近似的网络,这是一个搜索的过程。参考相关隐含层确定的准则[7],通过逐个比试最终确定,第1个隐含层节点数为15个,第2个隐含层节点数为10个,学习速度为0.01。
实验中选取了300幅实际的车牌。这些车牌图像的大小和拍摄的角度有所不同,有些车牌图像比较清楚,有些则有缺陷。然后在Matlab7.0环境下对网络进行训练,训练样本由200个车牌的1 400个字符组成。剩下的100幅车牌图像用于识别试验。试验结果:正确识别91幅,误识6幅,不能识别3幅,平均识别速率0.94 s/幅。在实验过程中数字识别率最高,字母次之,汉字识别率最低。
本文系统地研究了一套车牌识别算法,包含了车牌定位、字符分割、字符识别3个环节。其前后衔接紧密,互补性好,整体准确性高,稳定性好,具有较强的实用性。但仍存在一些问题需要进一步改进,如车牌定位时,距离伸缩性不够,字符倾斜校正存在一些失真,字符特征提取还需要更有效的方法。