1. 引言
近年来,随着人民生活质量日益攀升以及工业化进程的持续发展,汽车已成为人们日常出行的重要交通工具。车牌识别系统作为智能交通系统中的重要研究课题之一 [1],是一个由监控设备或摄像头采集车辆图像,从复杂场景下提取车牌并识别字符的计算机视觉系统 [2],目前已广泛应用于停车场管理、交通管理、车辆追查和跟踪等众多领域。
其中,车牌定位是车牌识别系统的关键步骤 [3],会大大减少字符分割与识别的难度,对后续工作的展开有着决定性的作用。但是,由于拍摄角度、光照条件、天气情况等综合因素,在复杂环境下精确定位至车牌区域是比较困难的。传统的车牌定位方法主要有两种:①基于颜色特征方法;②基于边缘检测方法。方法①实现较为简单,但普适性较低,易受光照影响,且若场景中存在大面积颜色与车牌颜色相似的情况时,定位区域易出错;方法②定位准确率较高,但在复杂场景中虚警率较高。为解决上述方法形式单一、鲁棒性较差等问题,本文提出了一种基于数学形态学和轮廓识别的车牌定位方法,使车牌定位的准确率和普适性大大提高。
2. 车牌定位流程
车牌定位根据纹理、大小比例、边缘等特征,从复杂的车辆图像中将车牌区域分辨并单独分割出来,其具体流程如图1所示。车牌图像需先进行简单的预处理,使得车牌大致区域明显。接着对车牌进行形态学处理,去除大量干扰因素,更加突出车牌的位置,达到车牌粗定位的效果。然后在此基础上通过轮廓检测进行更加精准的定位,其中包括轮廓查找、轮廓筛选。最后通过倾斜校正和裁剪优化处理,把存在倾斜可能性的车牌转化为质量较高的车牌定位图。

Figure 1. License plate location flow chart
图1. 车牌定位流程图
3. 图像预处理
车辆图像采集过程中由于受实际拍摄环境的影响 [4],获取的图像会存在光照、噪点等多种干扰因素,这或多或少都会影响到定位的准确率。因此在车牌定位前,需进行图像预处理操作以便去除更多干扰信息并提高后续图像处理效率,预处理流程如图2所示。
采集到的原始图像像素点非常密集且数量庞大,会大大降低车牌定位速度,因此首先需要对图像进行缩放处理以减少像素点。
由于存储彩色图像所需的内存空间较大且处理速度较慢,因此我们要对其进行灰度化处理。本文通过OpenCV提供的cvtColor()函数将三通道的彩色图像转化为单通道的灰度图。
接着需要进行平滑滤波处理以减少图像中的噪声点,常见的平滑滤波有均值滤波和高斯滤波,但这两种滤波会丢失大量边缘信息导致后续定位不准确。因此本文采用3 × 3的中值滤波器,它具有很好平滑效果且不会降低边缘的锐利程度,通过遍历,每次取9个像素值的中值作为矩形中心新的像素值。
最后将阈值分割后的图像进行边缘检测,本文采用Canny算子进行边缘检测,因为它是一种多级检测算法,具有垂直、水平和对角线四个方向的梯度算子,能在抗噪声的同时保持弱边缘。
图像预处理前后如图3、图4所示。

Figure 3. Original image before image preprocessing
图3. 图像预处理前的原图

Figure 4. Effect image after image preprocessing
图4. 图像预处理后的效果图
4. 形态学处理
数学形态学的基本思想是利用一个称作“结构元”的探针收集图像信息 [5],进而对图像的各个结构特征有所了解。本文通过自定义结构元进行膨胀、腐蚀处理,实现对车牌的粗定位,膨胀腐蚀进一步说明如下:
1) 膨胀
膨胀是求局部最大值的操作 [6],将结构元B作为核与图形A进行卷积,计算卷积核 在图形 中所覆盖区域的像素点的最大像素值,并把这个最大像素值赋值给参考点指定的像素,使图形 中的白色区域逐渐增长。用数学公式表示为(1),其中A和B是Z2中的集合。
(1)
2) 腐蚀
腐蚀与膨胀相反,是求局部最小值的操作。用数学公式表示为(2),其中,A和B是Z2中的集合。
(2)
本文首先通过2次迭代膨胀,保证车牌区域各个字符的连通性;接着通过3次迭代腐蚀,去除图像中孤立细小的色块;最后通过1次迭代膨胀,保证膨胀次数与腐蚀次数相同,以恢复连通区域的形态大小。形态学处理效果如图5所示,车牌的轮廓已经初步被选出来了,即中间最大的白色方块,但仍存在其他白色块的干扰。

Figure 5. After morphological treatment effect drawing
图5. 形态学处理后的效果图
5. 轮廓检测
5.1. 轮廓查找
轮廓是构成任何一个形状的边界或外形线。本文采用OpenCV视觉库提供的findContours()函数在形态学处理的基础上,实现对目标物体的轮廓查找,函数包含InputOutputArray image,OutputArrayOfArrays contours,int mode,int method,Point offset这五个参数,将查找出的轮廓信息以向量链表形式组装为一个整体保存。
参数image代表需处理的图像,本文将形态学处理后的二值图像作为输入图像;参数contours代表轮廓存储的双重向量,各个轮廓由一组连续的point点构成的集合组成;参数mode代表轮廓的检测模式,由于本文只检索最外围的轮廓,不存在层级关系,因此采用CV_RETR_EXTERNAL模式;参数method代表轮廓的近似办法,为减少存储空间并提高后续识别效率,本文选择CHAIN_APPROX_SIMPLE方法,压缩水平、垂直和对角线方向的元素,只保留该方向的终点坐标;参数offset代表检测出的所有轮廓与原始图像对应点存在的偏移量,本文默认为point(0,0)。
可使用DrawContours()函数从轮廓链表中提取各个向量轮廓点进行绘制,轮廓查找与绘制效果如图6所示。

Figure 6. Contour search and drawing effect drawing
图6. 轮廓查找与绘制效果图
接着利用minAreaRect()函数,通过多边形逼近法减少轮廓顶点数,计算图像中所有连通轮廓区域的最小外接矩形,以旋转矩形数组形式保存。轮廓区域最小外接矩形检测效果如图7所示,整张图片上包含了多个矩形,需要进一步筛选确定车牌位置。

Figure 7. Minimum circumscribed rectangle detection effect drawing
图7. 最小外接矩形检测效果图
5.2. 轮廓筛选
目标矩形筛选主要基于矩形的基本轮廓信息,通过选择合适的特征进行筛选 [7]。车牌包含丰富的结构特征信息:①车牌虽然在图像中的具体大小、位置不确定,但其外接矩形的宽高比都在一定的变化范围内;②车牌轮廓一般为矩形,即车牌轮廓的矩形度(物体的面积与物体最小外接矩形的面积之比)都接近于1。因此本文选用宽高比、矩形度作为筛选特征。
中国目前采用的民用车牌标准为92式机动车号牌国标尺寸,其中,小型民用车车牌前后车牌尺寸均为440 × 140,即宽高比22:7 [8]。考虑到车牌由于拍摄原因,会发生一定程度上侧向或内外倾斜,造成一定的误差,因此矩形宽高比、矩形度的筛选范围应适当放宽。通过遍历最小外接矩形数组以及连通区域数组,计算各自的宽高比和矩形度,只有同时符合宽高比和矩形度条件范围的矩形方为车牌轮廓,筛选结果如图8所示,这样就完成了车牌的精确定位。

Figure 8. Rectangular screening result chart
图8. 矩形筛选结果图
6. 矫正优化
在车牌识别系统中,车牌图像能够保持水平是车牌字符能够正确分割的先决条件。经过上述步骤,虽然已经精确获取到车牌的位置,但是车牌仍存在明显的倾斜角度,因此图像需要进行矫正优化。本文通过筛选返回的旋转矩形的偏转角度进行仿射变换,利用getRotationMatrix2D()函数获取旋转矩阵,结合warpAffine()函数将原图像旋转至对应的角度,实现图像的倾斜校正;最后利用垂直边界最小矩形的坐标以及长宽进行截取优化,从而得到较高质量的车牌精准定位图,如图9所示。

Figure 9. Accurate license plate location map
图9. 车牌精确定位图
7. 实验与分析
7.1. 实验环境
方法实现与实验均基于Windows10 64位操作系统;基于OpenCV 4.3.0视觉库,采用C++语言,在Microsoft Visual Studio 2017软件下完成开发。
7.2. 实验结果
为验证方法的有效性,本文选取了不同场景下的车辆图像进行定位测试,图像中车牌类型包含不同省市、各种颜色类别、且车牌区域尺寸、光照条件各不相同。实验结果如下图10所示,可见在不同场景下,本文的车牌定位方法受外界因素影响较小,具有较好的准确性和鲁棒性。
8. 结语
本文创新性地提出了一种结合形态学和轮廓检测的车牌定位方法,由形态学处理实现车牌的粗定位,经过轮廓查找后,以宽高比和矩形度作为特征进行轮廓筛选,进一步实现精确定位,最后通过倾斜矫正和截取优化输出只包含车牌区域的图像。与传统方法相比,本文方法能够应对实际车牌识别系统中经常遇到的各种复杂情况,有效地提高了车牌定位成功率,具有较高的鲁棒性。