一种车牌识别图片预处理的设计方法

2020-11-02 02:34蒋理孙哲民蒋汉麟蔡天巍
电脑知识与技术 2020年25期

蒋理 孙哲民 蒋汉麟 蔡天巍

摘要:车牌识别系统不仅仅是智能交通系统的一个重要板块,同时也在交通的监控和管理中起到极其关键的作用。车牌图片预处理能够在短的时间内使得复杂图片简单化,为后继的车牌定位于识别做好准备。该文主要介绍了一种图片预处理的方法,使用了二值化、边缘检测及形态学操作等对图片进行处理,并根据实际优化了参数和方法。

关键词:图片处理;车牌识别;OpenCV

中图分类号:TP311        文献标识码:A

文章编号:1009-3044(2020)25-0178-02

Abstract: License plate recognition system is not only an important part of Intelligent transportation system, but also plays an important role in traffic monitoring and management. The preprocessing of license plate image can simplify the complex image in a short time and prepare for the subsequent license plate location recognition. This paper mainly introduces a method of image preprocessing, which uses binarization, edge detection and morphological operation to process the image, and optimizes the parameters and methods according to the actual situation.

Key words: image processing; license plate recognition; OpenCV

車牌识别技术目前已经广泛应用于智能交通系统中。目前,有着很多民用需求,如单位或小区车辆进出管控,停车场监控等。车牌图片预处理是车牌识别系统的重要组成部分,在系统获取到含车牌的图像后,需经过车牌预处理,再进行定位与识别。预处理的主要目的是将图片简锐化,突出待识别的区域,以取得更高的识别率,同时降低识别模块的计算复杂度。为了满足企业需求,本单位多个专业联合研究开发了这套车牌识别系统,笔者主要做车牌图片预处理的软件设计与实现工作。开发中主要用到了OpenCV做视觉处理。

1主要技术简介

OpenCV是一个开源的跨平台计算机视觉库。由于其是由一组C的函数与部分CPP类所实现,量级轻且效率高,同时也提供了譬如Python、MATLAB等语言的接口,实现了诸多在图像处理与计算机视觉领域通用的算法。主要用于解决如:人机交互、物体识别、图像分区、人脸识别、机器人、动作识别与跟踪等方向的问题,是目前最为主流的视觉处理库之一。

本系统使用了OpenCV-Python接口。其中支持了Numpy,这是一个经高度优化的数据操作库。操作中可以将所有OpenCV数组结构都转换为Numpy数组。这也使得与使用Numpy的其他库(如SciPy和Matplotlib)集成更容易。

2 车牌图片预处理

在图片处理中,图像分辨率的大小决定了计算量的大小,这在处理的时间上会得到反映。为了加快处理的整体速率,首先需要对图像的分辨率进行处理。主要过程为:系统会对读入的图片分辨率进行检测,若其高于设定的阈值,则将其分辨率调整为指定的大小。

2.1 图像灰度化

预处理中灰度化过程是将彩色的图片转化为只有亮度的图像的过程。彩色图片的像素色彩通常由三个分量:R、G、B所构成,每个分量的范围都是0-255,但灰度图像每个像素只有一种样本颜色,其位于黑色与白色之间,每个像素值最大为255(即白色),最小值为0(即黑色)。本系统所使用的是较为简单的平均灰度处理算法,意为取每个像素的R、G、B分量数值的平均值再将其赋回各给个分量。

本系统使用了函数cv2.cvtColor(img,cv2.COLOR_BGR_GRAY)对原始图像进行了灰度化处理。

2.2 图像增强

在对原始图像进行灰度化处理后,车牌图像与其他部分图像有时并没有较高的对比度,此时若直接对图像进行边缘检测来选取车牌位置很可能会取得较差的效果。因此需要对图片进行增强处理,从而改善在车牌图像选取时的视觉效果,突出图像中的重要信息,并放大在不同物体间的特征差异。目前用于该方向的图像增强技术通常有例如:图像的开操作与闭操作、高斯平滑、中值滤波、灰度拉伸等。

本系统中使用了开运算操作,实现的方法即为先对原图像进行腐蚀运算,再对其进行膨胀运算。其目的就是消去孤立的小点、毛刺等等干扰,并且使面积较大块的图像的边缘变得更加平滑,与此同时不改变总体的形状和位置。相较于原始图像,经过图像增强处理后的车牌的图像部分与其他部分相比,具有更加明显的对比度。

2.3 图像二值化

对灰度图像进行二值化处理就是将其像素的灰度值设置为0或者255,此时图片会显现出非常分明的黑白效果。拥有256个亮度强度的灰度图像依赖适当的阈值设置便可以获得仍然反映出图像整体与局部特征的二值化图像。在数字图像的处理应用中,其具有十分突出的作用,尤其是在图像的处理中,有许多以二值化的图像构成的系统。在处理二值化后的图像时,运用封闭、连通边界定义不交叠的区域的操作。将灰度值高于阈值的区域作为目标区域,以灰度值255表示,反之则将其他点视作非目标区域,将灰度值置0。

本系统中采取了自动选定灰度阈值大津法来对图片进行二值化处理。将t记作前景图像与背景图形的区分阈值,前景图形点数所占图像比例为w0,平均灰度为u0;背景图像的像素数占图像比例记作w1,而平均灰度记作u1。图像的总平均灰度为:

该公式目标是求类间方差值,由阈值t分割出的前景图像和背景图像这两部分构成了整幅图像,而前景的取值为u0,概率为w0,背景的取值u1,概率为w1,总均值为u,根据方差的计算方法可以得到此式。方差是灰度分布均匀性的一种度量,数值越大越可以反映构成图像的两部分差别大,当部分目标误分为背景或部分背景误分为目标都会导致两部分差别变小,因此使类间方差值大的分割方式就意味着误分概率最小。

2.4 边缘检测

边缘检测是车牌照定位前的关键步骤。边缘常常是出现在目标与目标之间或者目标与背景图像之间,边缘检测的目的就是定位其边缘以及减少噪点。将边缘认定为一定数量的点亮度变化最为激烈的位置,与此同时将灰度值看作二元函数值,再计算这个亮度变化的导数作为其边缘强度。通过设定阈值判别该点是否为边缘点,若大于阈值则判定为是,反之则否,然后再连通边缘点来获得边缘点集。常用的边缘检测算子有例如:Sobel算子、Roberts算子、Prewitt算子等等一階微分算子,Laplacian算子、Marr算子等等二阶微分算子,还有非微分边缘检测算子Canny算子。

相较于其他的算子,Canny算子更加不易受到噪声的干扰,能够检测到真正的弱边缘。该方法的优点在于使用两种不同的阈值分别检测强边缘和弱边缘,且仅当弱边缘与强边缘相连时才会将弱边缘包含在输出的图像中。因此该方法不易被噪声所影响,且更加容易检测出真正的弱边缘。系统使用了Canny边缘检测。其具体的实现步骤为:

①对二值化图像进行高斯平滑滤波操作,去除噪点。因为噪声是灰度变化十分剧烈的地方,若不能消除在后续操作中便可能会被识别为边缘,从而影响边缘检测的效果。

②计算并获取各像素梯度的强度值与方向信息。采用了Sobel算子的方法来操作,采用卷积方法在图像的每一个点上,结合两个方向Gx与Gy的值计算结果求出其近似梯度值,根据Gx与Gy的值计算得到梯度的方向:

③对非极大值进行抑制。由于Sobel算子所检测出的边缘通常较粗,为了取得更好的效果就需要抑制梯度值不足够大的点,只保留最大的梯度,从而将边缘收细。

④通过设定双阈值来对图像的边缘进行检测,同时连接各个边缘点。分别给定两个阈值记作L1、L2(设L1>L2),若某点梯度值超过了L1则将其称作强边缘,若梯度值位于L1与L2之间则称作弱边缘,若梯度值小于L2则认为不是边缘点。此外,当弱边缘周围为8的邻域内存在强边缘点时,就认定该弱边缘点为强边缘点。

3结论

至此,图像预处理完成,为系统后续车牌定位与识别做好了准备。在本车牌识别系统中,图片预处理部分运行良好,运算响应时间也达到了预期。车牌识别系统已经通过内部测试,进入试用阶段。目前使用情况良好,识别率与响应速度均达到要求。

参考文献:

[1] Peter Harrington.MachineLearninginAction[M].北京:人民邮电出版社,2012.

[2] 周志华.机器学习[M].北京:清华大学出版社,2016.

[3] Ian Goodfellow.Deep Learning[M].北京:人民邮电出版社,2017.

[4] 李立宗.OpenCV轻松入门:面向Python[M].北京:电子工业出版社,2017.

[5] 王硕,孙洋洋.PyQt 5快速开发与实战[M].北京:电子工业出版社,2018.

【通联编辑:代影】