曹文平,陈厚锦
一种基于轮廓特征的车牌定位算法
曹文平,陈厚锦
(新乡学院 机电工程学院,河南 新乡 453003)
为了方便快捷地检测到图片中汽车牌照的位置信息,文章提出了一种基于图像轮廓特征的车牌定位算法。此算法基于OpenCV数据库中的相关函数,首先使用图像预处理操作来增强图像,然后采用轮廓查找、面积筛选的方式定位车牌,接着根据车牌的像素信息和宽高比例等特征筛选出符合条件的轮廓,最后使用绿色框线将车牌框选并显示和保存定位完成的图像。
轮廓特征;OpenCV数据库;车牌定位算法
近年来,随着公路交通的高速发展,人们出行对汽车的依赖度越来越高,而汽车出行带来的一系列停车收费、高速出入口电子不停车电子收费系统(Electronic Toll Collection, ETC)通道、行驶监控、测速和违章拍照等都依赖对车牌号的识别,而车牌位置的精准定位,则是车牌识别的首个关键所在。
目前,很多学者使用各式各样的算法对车牌定位进行研究,大多数都是采用基于形态学特征和颜色特征等方法进行车牌定位。近些年,随着机器学习的流行,运用深度学习算法慢慢成为主流,如:高艳等[1]基于OpenCV和卷积神经网络的车牌识别研究;常巧红等[2]基于色调、饱和度和明度(Hue, Saturation, Value, HSV)色彩空间和数学形态学的方法进行车牌定位;马巧梅等[3]基于改进的YOLOv3算法进行车牌定位。
本文使用PyCharm为集成开发环境(Integra- ted Development Environment, IDE),以Python为基础,通过OpenCV视觉工具包,基于图像的轮廓特征搭建一种车牌定位算法。
图像预处理包括图像的灰度化、直方图均衡化、高斯平滑、sobel梯度计算、二值化以及图像的腐蚀和膨胀。
通过相机采集到车辆照片信息后,不可避免地会受到天气、光照、角度、阴影等干扰因素的影响。为了便于快速精准定位图片中的车牌位置,需要对图片进行二值化、平滑、滤波等预处理,其具体处理过程如下:
目前相机采集到的图片一般都是彩色图,但由于全局直方图均衡化的输入参数必须是灰度图,故运算前需首先将彩色图像转化为灰度图像。
直方图均衡化是首先对在图像中像素值个数较多的灰度值(即图像中有用信息的灰度值)进行扩展,而对像素点个数较少的灰度值(即图像中无用信息的灰度值)进行合并,从而增大图像的对比度,达到增强的目的,使图像更清晰。
高斯平滑是一种线性平滑滤波器,高斯平滑后图像中每一个像素点的值都由其本身和邻域(4邻域、8邻域、对角邻域等)内其他像素点的值经过加权平均后得到。
高斯平滑滤波的具体操作包括:首先设定一个模板,然后依次扫描图像中的每一个像素点,再计算出模板覆盖的邻域内像素的加权平均灰度值,接着用其替代模板中心像素点的灰度值,进而基于二维高斯函数,构建权重矩阵和高斯核,最终对每个像素点进行滤波处理(平滑、去噪)。本文采用的是高斯滤波函数cv2.GaussianBlur()[4]处理图像。
中值滤波是取当前像素点及其周围临近像素点(一共有奇数个像素点)的像素值,将这些像素值排序,然后将位于中间位置的像素值作为当前像素点的像素值,其作用主要是在滤除噪声的同时,能够保护信号的边缘,使之不被模糊。
二值化是选取一个全局阈值,然后把整幅图像分成非黑即白的二值图像,采用图像阈值处理函数cv2.threshol,将图像中灰度值大于阈值170的像素点赋为255,反之则赋值为0。阈值的合理设置对图像二值化后的处理至关重要,过大导致有效信息缺失,过小则会影响处理速度,从而降低时效性。
图像梯度计算反映的是图像变化的速度,对于图像的边缘部分,其灰度值变化较大,梯度值(导数最大)也较大,而对于图像中相对比较平滑的部分而言,其灰度值变化较小,对应的梯度值也比较小。图像梯度计算需要求导数,但是图像梯度一般通过计算像素值的差来得到梯度的近似值(近似导数值)。将上述运算关系进一步优化,可以得到更复杂的边缘信息,采用Sobel算子,结合高斯平滑和微分求导运算,利用局部差分寻找边缘,计算所得到一个梯度的相似值。
闭运算采用图像处理中基本的形态学操作,先对图像进行膨胀,再进行腐蚀。膨胀是使用像素邻域内的局部极大运算来膨胀一张图片,腐蚀是使用像素邻域内的局部极小运算来腐蚀一张图片,二者是一对相反的操作,但是都是针对图像中的白色(高亮)部分而言。本文膨胀使用dilate()函数,腐蚀使用erode()函数,膨胀和腐蚀操作的核函数如下:
element1=cv2.getStructuringElement(cv2. MORPH _RECT,(9, 1))
element2=cv2.getStructuringElement(cv2. MORPH_RECT,(9, 7))
其处理过程是先将图像膨胀一次,让轮廓突出;然后将图像腐蚀一次,去掉细节;最后使图像再次膨胀和腐蚀,让轮廓更加明显,图像预处理结果如1所示。
图1 图像预处理结果
输入预处理后图像,使用函数cv2.findCon tours查找轮廓并进行提取,而后选择函数cv2. RETR_TREE以树形结构输出轮廓信息,压缩水平方向、垂直方向和对角线方向的元素,只保留该方向的终点坐标。
选择cv2.CHAIN_APPROX_SIMPLE,则con- tours中一个list元素所包含的点之间应该用直线连接起来,这个可以用cv2.drawContours()函数观察一下效果。选择cv2.RETR_TREE,则以树形结构组织输出,hierarchy的四列分别对应下一个轮廓编号、上一个轮廓编号、父轮廓编号、子轮廓编号,该值为负数表示没有对应项。
确定好轮廓后,计算各个轮廓的面积并进行筛选,小于4 000的删除,然后使用arcLength函数计算封闭轮廓的周长或曲线的长度,接着调用函数cv2.approxPolyDP(使用Douglas-Peucker算法,将一个连续光滑的曲线折线化)使其数字化,再对曲线进行采样(在曲线上取有限个点),将其变为折线的同时能够在一定程度上保持原有曲线的形状。
由此可知,当采样时设定的阈值越小,拟合的越精准,拟合后多边形的边和顶点越多。cv2.approxPolyDP的参数2(epsilon)是一个距离值,表示多边形的轮廓接近实际轮廓的程度,其值越小,越精确。
轮廓矩形的选择,使用函数 cv2.minAreaRect()[5]返回一个Box2D结构rect:(最小外接矩形的中心(宽度,高度)即(,),旋转角度),但是要绘制这个矩形,需要矩形4个顶点坐标box需通过函数 cv2.BoxPoints()获得,返回形式为[[0,0], [1,1],[2,2],[3,3]],得到的最小外接矩形的4个顶点顺序、中心坐标、宽度、高度、旋转角度(度数形式,不是弧度数)的对应关系如图2所示。
使用函数cv2.minAreaRect()找到最小的矩形,计算出四个端点的坐标和矩形的宽和高,由于车牌正常情况下长高比在2.7~5.0,可通过筛选确定车牌区域位置,如图3所示。计算后返回三组rect结构数据如下:
1.rect is: ((413.5, 341.5), (71.0, 197.0), 90.0) 2.7746478873239435
2.rect is: ((89.0, 263.0), (140.0, 94.0), 90.0) 0.6714285714285714
3.rectis:((702.1650390625,132.81484985351562),(82.64925384521484,221.76129150390625), 4.197668075561523) 0.4604651162790698
图2 函数cv2.minAreaRect()矩形选择示意图
图3 车牌区域查找
根据查找的车牌轮廓信息,满足条件为第一组数据,使用框线标记出车牌区域,具体定位信息如图4所示,同时输出并显示出带框线轮廓的车牌图片如图5所示。
图4 图像车牌定位图
图5 车牌定位结果
车牌的安装根据不同的车型,即轿车、运动型多用途汽车(Sport Utility Vehicle, SUV)、货车、客车以及消防车、救护车、工程救险车和警车等特种车辆,其存在一定的位置差异,且根据机动车号牌安装规定,车牌安装时横向水平,纵向夹角不大于±15°[6]。
为了验证此算法的通用性,通过对二十张不同车型及拍摄角度的车牌照片进行定位,由于此算法是基于车牌轮廓的特征,与其车牌安装位置及摄像机拍摄角度的差异关联性很小,故其均能准确地定位车牌位置并显示,证明该算法设计合理,准确率较好,能够有效地进行车牌定位。纵观整个车牌定位流程,轮廓查找逻辑及参数的设定至关重要,且轮廓曲线拟合时,设定的阈值越小,拟合的越精准。
随着计算机软件和硬件的发展,图像处理的算法层出不穷,车牌定位的方法也多种多样,但是机器学习算法需要图形处理器(Graphics Proce- ssing Unit, GPU)对计算机的性能要求比较高等,在满足定位精度要求的情况下,基于轮廓特征的车牌定位,不仅能够快速精准的定位,且对硬件的要求也相对较低,故为后续的识别及应用提供了一种更为经济实用的方法。
[1] 高艳,刘海峰.基于OpenCV和卷积神经网络的车牌识别研究[J].软件工程,2022,25(5):23-25.
[2] 常巧红,高满屯.基于HSV色彩空间与数学形态学的车牌定位研究[J].图学学报,2013,34(4):159-162.
[3] 马巧梅,王明俊,梁昊然.复杂场景下基于改进YOLOv3的车牌定位检测算法[J].计算机工程与应用,2021,57 (7):198-208.
[4] SINGH A,PATEL A,RAI A,et al.Face Detection Using Python and OpenCV[J].International Journal of Advances in Engineering and Management,2022,4(4): 103-105.
[5] ATUL K.The AI Learner[EB/OL].(2020-11-03)[2023- 01-05].https://theailearner.com/tag/cv2-minarearect/. 3 Nov 2020/24 Nov 2022.
[6] 道路交通管理标准化技术委员会.机动车号牌专用固封装置:GA 804-2019[S].北京:中国标准出版社, 2019.
A License Plate Location Algorithm Based on Contour Features
CAO Wenping, CHEN Houjin
( College of Mechanical and Electrical Engineering, Xinxiang University, Xinxiang 453003, China )
In order to detect the location information of the license plate in the image quickly and conveniently, this paper proposes a license plate location algorithm based on image contour features.Thisalgorithm is based on the correlation function in the OpenCV database.Firstly,usingimagepre-processing operations to enhance images, and then the license plate is located by contour search and area filtering.Then, the eligible contour is filtered according to the pixel information and width height ratio of the license plate. Finally, using the green border to frame the license plate and display and save the image after positioning.
Contour features; OpenCV database; License plate positioning algorithm
TP391.4;U464
A
1671-7988(2023)12-44-04
曹文平(1988-),男,硕士,助教,研究方向为汽车设计、机器视觉,E-mail:540158097@qq.com。
10.16638/j.cnki.1671-7988.2023.012.009