基于轮廓识别和BGR颜色空间的车牌定位
2020-12-25漆世钱
漆世钱
(武警海警学院 电子技术系,浙江 宁波 315801)
0 引 言
车牌识别技术是智能交通系统重要组成部分,被广泛应用,它能自动将运动的汽车牌照或单帧图像汽车牌照从复杂的背景中提取出来并识别字符,通过图像预处理、车牌定位、字符分割、字符识别等技术,达到车牌识别的目的[1]。其中,车牌定位技术是车牌识别系统的关键步骤,车牌定位的效果会影响后面对车牌字符分割和识别的成功率,进一步影响整个车牌识别系统的成功率和识别速度[2-3]。
当前使用比较多的车牌定位方法主要有纹理图像的多特征融合、灰度图像边缘标识与检测、颜色信息的图像分割和人工神经网络的方法等。多特征融合是对车牌横向的小波纹理、梯度微分纹理等特征进行分割,这种定位方法由于车牌图像中可能多个区域具有车牌的纹理特征,很难准确地判断出车牌位置,所以识别率较低,尤其是车牌倾斜度过大时,定位率显著下降[4-5]。灰度图像边缘标识与检测方法对车牌图像先后进行灰度化、二值化处理,用投影法完成车牌定位,优点是精确度较高,缺点是鲁棒性偏低[6]。颜色信息的图像分割方法通过对车牌的背景和字符颜色对车牌进行定位,在各种复杂背景的影响下定位率仍保持较高水准,但是计算量大、定位速度慢[7]。基于神经网络方法的过程比较复杂,首先选取图像样本,然后对其进行多层前馈网络训练,通过反复的调整训练取得理想的网络权值,最后利用多层前馈网络对图像进行判断定位,同样是定位效果好,但时间开销比较大[8]。
除了光照不均衡的影响,在车牌定位过程中车牌图像可能还具有高噪声、车牌角度倾斜等因素。针对以上车牌定位方法的部分问题,为弥补算法过于单一的缺点,该文提出了一种基于轮廓识别和BGR颜色处理的车牌定位方法,结合两种方法的优势,进一步提高车牌定位的实时性和成功率。
1 车牌定位流程
车牌定位的目的是从车辆图片中根据色彩、纹理、大小比例等特征找出车牌区域,并将其单独分割出来。在车牌定位之前,车辆图像经过了平滑、灰度化、二值化、边缘检测等简单的预处理过程,车牌大致区域已经比较明显。在定位过程中,首先对车牌进行轮廓识别完成区域的筛选达到车牌粗定位,然后在粗定位的基础上实现更加精准的精确定位。其中区域检测和区域筛选都属于粗定位流程,基本步骤包括轮廓检测、矩形区域识别、矩形筛选和截取;而在精确定位中,由于图像信息通过处理后主要部分为车牌,通过建立BGR向量模型,利用BGR处理提取车牌关键位置,在检测筛选后得到车牌图像,最后把可能倾斜的车牌经过校正和截取优化,得到较高质量的车牌精确定位图。
2 轮廓识别
2.1 轮廓检测
轮廓识别是忽略被检测图像中的纹理和各种噪声的影响,找出图像边界中含有相同密度和色彩值的像素点,对目标的外轮廓或者内轮廓进行提取和显示的过程。图像的轮廓之间有一定的层级关系,从轮廓大小和附属关系来说有外部轮廓与内部轮廓,也有父轮廓和子轮廓层级,轮廓检测的核心就是将图像目标物体所有像素点中的内部点消除[9]。在粗定位中,使用OpenCV的cv::findContours()函数实现对图像的目标物体进行轮廓检测,并对检测出的轮廓信息以数据链表的形式保存,利用链表的头指针进行返回。函数原形为:cv::findContours (InputOutputArray image, OutputArrayOfArrays contours, OutputArray hierarchy,int mode, int method, Point offset=Point())。参数Image表示输入图像,必须为一个8位的二值图像,除0像素值继续保留外,其余像素值将全部变为1;contours表示存储轮廓的容器,每个轮廓都是以point向量的数据类型进行表示;Hierarchy为输出的轮廓层级,将指向用来存储轮廓信息的链表表头;Mode为边缘检测模式,CV_RETR_LIST检索所有轮廓,但是没有Parent和Child的层级关系,所有轮廓都是同级的,该文只检索最大的外部轮廓,没有层级关系,只取根节点的轮廓,所以选择CV_RETR_EXTERNAL;method用来表示轮廓边缘的近似方法的,该文选择CV_CHAIN_APPROX_SIMPLE的模式方法,压缩水平的、垂直的和斜的部分,只保留终点部分;offset表示偏移量,默认为point(0,0)。使用findContours()函数能检测出图像的轮廓,将轮廓绘制出来还需要结合函数DrawContours()从轮廓序列contour提取轮廓点,车辆检测绘制前后的轮廓效果如图1所示。
图1 车辆轮廓检测
2.2 轮廓识别的矩形检测
在形态学处理后得到的二值图像基础上,通过findContours()检索并压缩所有方向轮廓,使用rectangle()函数能够通过多边形逼近方法,减少轮廓中顶点的数量,趋近于垂直或者水平方向,给图像中所有连通轮廓区域添加最小外接正方向矩形,且矩形一定是正方向的,不会发生倾斜和偏移,非常符合车牌大体上的正方向的矩形特征。轮廓区域矩形检测效果如图2所示,其显示的是所有检测到的矩形,整张图片上包含了大大小小众多矩形,中间最下方的较大矩形为系统的目标矩形,需要进一步筛选确定。
图2 矩形检测
2.3 矩形区域筛选
目标矩形筛选算法的设计原理主要基于矩形的基本轮廓信息,包括宽度、高度、宽高比、面积。由于中国现行车牌标准为九二式机动车号牌国标尺寸,普通车牌前后牌照尺寸都为440×140,即宽高比22∶7[10]。车辆二值图中,车牌经过形态学处理后,宽高比稍有变化,但由于膨胀腐蚀的协调使用,其变化并不明显,仍然接近22∶7的标准比例,考虑到车牌由于侧向或内外倾斜造成的轻微宽高比变化,其矩形比例应适当放宽,比值在2.8至3.8之间都应该作为筛选的候选区域。对于面积,由于图像的品质不同,宽高也就不同,车牌区域的宽高也不会相同,之前的宽高比除了在算法设计中整型比值会造成数据丢失以外,不会受到这方面的影响,但面积会深受影响,所以应该使用矩形区域占原图像总面积的比值作为筛选特征,系统中使用的筛选阈值为总面积的十分之一,在此基础上得到的候选区域中面积最大的就认为它是目标区域。
此时,筛选后应该得到的返回值是矩形的序号,序号对应的是轮廓识别到区域识别一直遵循的自动排序。假设得到序号的值为12,那么可以知道它是系统检测的第12个轮廓,绘制的第12个矩形,其矩形信息储存在第12个向量中,得到序号i后,调用第i个向量信息,可以得到第i个矩形的左上角为起始点和右下角为终止点、宽度、高度,计算机确定一个正方向矩形,得到这个矩形区域在整张图像中的坐标。使用OpenCV中的Rect函数可以在一个图像中简单截取一个正方向矩形区域,这样就完成了粗定位,它用于截取的图像正是经过双边滤波处理过的车辆图。
3 精确提取
3.1 BGR处理
经过车牌粗定位后,已经初步确定了车牌区域,但车牌区域还包含了诸多无关信息和影响因素。一是车牌位置并不完全准确,有很大的边缘区域;二是车牌在图中有些许倾斜,这对于截取车牌的精确图像造成很强的干扰,也会使提取出来的字符保持倾斜,给后期字符识别增加难度或无法提取成功,所以需要进一步精确提取。在车牌的精确提取中,BGR处理需要有两个前提条件,一是处理图像必须是三通道的BGR彩色图像;二是确定BGR阈值,才能够以此为界限区分图像中的信息。在完成上述两个前提后,建立BGR向量模型,用于承装粗定位图像像素点信息,通过对粗定位图像逐像素点遍历,读取各点的B、G、R值。若H符合阈值界定范围,则重新赋值(0,0,0),反之赋值为(255,255,255)。完成赋值之后,图像就变成黑白图,不是二值图,因为传统的二值图都是指在灰度图基础上进行二值化变换形成的单通道图像,但是这里的黑白图本质上还是三通道的BGR图像,只是看上去一样,其保存形式和处理方法都是基于BGR值的。以目前道路上最常见的蓝色背景白色数字车牌为例,车牌背景色之所以为蓝色,不仅仅突出蓝色的底色,而是蓝色的特征颜色比红色和绿色分量大[11-12]。因此可以归纳出蓝色背景特征颜色的公式:
H(x,y)=2B(x,y)-R(x,y)-G(x,y)
(1)
进行BGR处理之后,还需要进行灰度化,保证图像的单通道状态。
3.2 区域检测及筛选
实现BGR处理过程之后进行检测和筛选,其原理与车牌粗定位的检测和筛选相似。首先,对BGR处理灰度化后的图片进行轮廓检测,效果如图3所示。
图3 车牌轮廓检测
然后进行连通域外界矩形绘制,与粗定位不同之处是矩形绘制函数不再是rectangle(),而是基于minAreaRect()函数获取最小外接矩形顶点,建立矩形区域向量,用于承装矩形顶点,通过直线绘制函数line将四个顶点连接起来,完成最小外接矩形绘制。在系统工作中,是不需要看到实际矩形的,只需获得顶点信息即可,line函数只能作为一个调试工具检查顶点获取情况。对比两种矩形绘制方法,前者更加快速,便于操作,只能绘制正方向矩形,并得到矩形的起始点和终止点;后者操作起来更加复杂,而且容易出错,但能够确定轮廓最小外接矩形,可以保证矩形为360度无死角旋转矩形,矩形绘制如图4所示。
图4 车牌轮廓最小外接矩形绘制示意图
矩形区域向量容器中装有大量的矩形顶点信息,车牌的内外两个轮廓比较相似,都能够适应精确定位的要求,但内矩形能够最接近系统的目标车牌特征状态。将内矩形作为提取目标,确定容器中承装的0-3号坐标哪个是起始点坐标哪个是终止点坐标,使得接下来的筛选、倾斜校正顺利进行。对于筛选条件,同样采用宽高比、面积比的特征,筛选出宽高比约为22∶7,面积大于车牌图像总面积50%的旋转矩形中面积最小的旋转矩形。
3.3 倾斜校正
经过筛选,算法返回的是旋转矩形在容器中的储存序号n,这样系统就能够确定这一旋转矩形的四个顶点坐标,选择其中横纵坐标和(x+y)最小的坐标点,即最接近(0,0)的坐标点作为矩形起始点。为了实现通用的倾斜校正算法,也将会以此坐标点作为旋转中心对倾斜的车牌图像进行逆时针的旋转,旋转角度计算原理如图5所示。
图5 车牌校正原理参考图
已知车牌顶点O(x1,y1)、A、B(x2,y2)、C坐标,以O为旋转中心,车牌需要逆时针旋转α度角。已知顶点坐标,很容易求得矩形宽高w和h的值,还可以通过调取内部函数运算得到minRect(旋转矩形区域)的size(尺寸,即面积)。通过简单的三角函数运算就能得到β的值,在三角形ABO中,β=arctan(h/w)。而在三角形OFB中,α+β=arctan[(y2-y1)/(x2-x1)],那么:α=arctan[(y2-y1)/(x2-x1)]-arctan(h/w)。
其中参数设置由于不考虑符号方向,所以可以适用各种方向和各种角度的矩形倾斜,若α值为负值,则表示顺时针方向的旋转。执行旋转指令可以通过getRotationMatrix2D()和warpAffine()两个函数的协调使用完成。
3.4 截取优化
在车牌校正后,系统就要截取出序号为n的矩形,但是经过校正,图像的坐标排列已经发生了变化,仍然保持不变的只有旋转中心坐标和矩形形状,此时再通过Rect截取最为合适。已知旋转中心作为起始点,旋转中心坐标加上矩形的宽和高就是终止点坐标,不过这样截取下来的区域还不完全是系统最想要的车牌信息,根据国标车牌尺寸比例,调整Rect的起始点坐标和截取矩形尺寸。通过理论计算和实验总结,得到最适合的优化尺寸为:起始点坐标(x1,y1)中x1增加车牌图像宽度的2%,y1增加车牌图像高度的11.54%,终止点坐标(x2,y2)也将在截取矩形尺寸的基础上做出调整,矩形区域宽度缩小为原来的96%,高度为原来的72%。其截取后经预处理,效果如图6所示。
图6 车牌精确定位效果
4 实验结果及分析
4.1 实验平台
系统的开发与试用全部在Windows7旗舰版64位操作系统下完成;车牌识别系统是在Microsoft Visual Studio2010下基于OpenCV3.2.0采用C++语言完成开发;实验设备为AMD 2.30 GHz处理器计算机及其摄像头、JVC摄影机。
4.2 实验结果与分析
(1)不同场景下的测试。
为验证该方法的有效性,在常规情况、车辆拍摄角度的不同和光照不均匀3个不同场景下对该方法分别进行测试。任意选取80张常规情况下的车辆图片和80张不同方向发生较大角度偏移的车辆图片进行测试,另外针对光线因素的识别测试,在采集的图片中,有40张取自于雨后阴天情况下,另有40张取自阳光强烈的夏日正午时间,以此作为样本分别进行测试。上述影响识别的因素各异,干扰强度也各不相同,归纳如表1所示。通过实验结果可以看出,在常规情况下车牌的定位是最准最快的,成功率为96.5%,平均定位时间为612 ms。在光照强度的影响下,车牌和车身的强烈反光会影响RGB提取和车牌定位;另外,系统虽然具有车牌的倾斜校正功能,但对于倾斜程度较大的车牌难以进行车牌定位操作,导致识别率的下降。但是不管在常规环境下还是有光照和车辆角度偏移等外在因素影响下,该算法都具有较高的定位成功率和较快的定位速度。
表1 各类影响因素的测试数据
(2)相对于其他代表性车牌定位算法的测试。
任意选取90张车辆图片,其中在常规情况下、车牌角度倾斜、复杂光线环境下各30张,利用常见有代表性的车牌定位算法和文中算法分别进行车牌定位的测试,如多特征融合的车牌定位算法[13]、基于字符边缘点提取的车牌定位方法[14]、基于颜色分割与Sobel算子相结合的车牌定位[15]。不同方法测试结果如表2所示。
表2 不同方法测试结果的比较
通过结果对比可以看出,文中所采用方法的车牌定位平均成功率达到96.7%,平均定位时间为631,与文献[13-15]中的算法相比无论是在定位速度还是在定位成功率上都是最佳的。文献[13]在常规条件下和车牌倾斜时的识别率很好,由于没有使用图像颜色的特征,所以在背景光的外在因素影响的情况下成功率不高。文献[14]使用边缘投影的途径确定车牌水平和竖直边界,计算量小,所以定位速度和文中算法最为接近,但是对外界影响因素较为敏感,定位效率最低。文献[15]对车牌图像执行多尺度的分割方法,生成多个不同细节程度的分割结果,车牌定位的效果很好,但是计算量大,速度偏慢,光照不均对定位有一定影响。
5 结束语
针对车牌定位算法过于单一或者容易受到光线强度和车牌角度倾斜过大等因素影响导致定位成功率不高、定位时间长的缺陷,提出一种基于轮廓识别和BGR颜色空间的车牌定位方法。使用形态学轮廓定位比通过机器学习的车牌定位方法在开发难度、系统成本、运算时间等方面都有明显的优势;相比于直方图分析方法可能会发生难以包容的错误识别,在BGR处理后的去噪程度的图像,能获取车牌的准确边缘,并去除其他影响因素,只要车牌区域具有矩形特征并形成连通域就算作达到目标,具有较高的准确度和普适性。此外,该方法还可以通过对颜色特征抽取公式参数和阈值的更改达到对军警车车牌、黄色车牌定位的功能。不过,在粗定位算法的Rect截取中,也会发生未知的错误,主要是坐标的计算错误或漏洞导致,截取坐标超出原图像范围;在定位过程中还存在部分汽车前脸散热格栅是水平和竖直形成的矩形、牌照容易污染、光线反射等因素影响定位的问题,接下来将深入研究,以期能够找到进一步优化的方法。