基于OpenCV的车牌识别系统设计与实现
来源:用户上传
作者:
摘 要:随着道路车辆的增多,传统的人为交通管理方式越来越难以掌控复杂的道路交通情况,已逐渐退出大众视野。而随着机器视觉技术的快速发展,通过先进的目标检测算法实现自动化、智能化和精密的交通管控已开始大量普及。因此,提出并设计了基于OpenCV的道路车牌识别系统,可在复杂的道路环境下保持长时间工作并维持一定的准确率,提高交通管理效率,节约人力资源,方便人们出行。文中利用车牌特征输入的图像进行车牌定位,再通过灰度化,基于Radon变换的倾斜校正、二值化、腐蚀、膨胀等数字图像处理算法来处理车牌图像,去除车牌图像因为环境而产生的干扰。之后运用垂直投影法分割车牌字符,最后用模板匹配的方法来识别车牌字符,并输出识别信息。在实验中,通过车牌数据检测,该系统的识别准确率超90%。
关键词:计算机视觉;OpenCV;目标检测;特征提取;Radon变换;字符分割
中图分类号:TP391.41 文献标识码:A 文章编号:2095-1302(2020)06-00-04
0 引 言
随着人们生活质量的不断提高,对汽车的需求量也在逐年增长,道路的车流量亦在飞速增多。由于驾驶员的违章行为经常导致城市道路交通产生一些问题,如何科学有效地改善交通管理秩序是有关部门及政府当下关心的问题。其中,车牌识别系统作为道路管理系统中最重要的部分,越来越受到人们的重视。它在实际生活中有着广泛应用。
(1)车辆出入管理。通过公路的入口和出口检测,实现不停车收费,还可以通过识别出来的车牌号查询车辆是否按时缴纳相关费用,是否通过年检等。
(2)超速检测。当车辆超速行驶时,可以通过系统提取车牌号图像和字符信息,作为违章处罚的证据。
(3)检测车流。车牌识别系统可以通过捕获的车牌图像获得某段时间内的车流量及密度,特别在车流高峰时期,可以通过分析相关数据来分散车流,诱导交通。
(4)居民小区及单位的车辆安全管理。
车牌识别系统涉及许多复杂的任务处理过程,包括图像检测、图像分割和图像识别等。在实际应用场景中,不同的倾斜角或图像噪声也使得问题变得更加复杂。同时,一个好的车牌识别系统应兼具精度与速度。对于车牌识别的研究开始于20世纪90年代。Duan T D等提出运用图像分割、特征提取、构造模板、字符识别等计算机视觉技术和图像处理技术实现车牌自动识别[1]。但早期的车牌识别系统无法做到实时处理,且精度较低,仍需要人力介入。同时,由于我国车牌是由汉字、数字、字母组合而成,识别难度大大增加。在许多研究工作中[2-3],均对图像获取、位置标定、图像曝光量等问题进行了详细的分析和讨论。由于我国车牌系统的特殊情况,单一的识别技术难以奏效。因此,在综合考虑环境因素、图像误差、背景环境多样性、光线、角度等因素后,本文提出并设计了基于OpenCV的自动化车牌识别系统,能够实现实时快速的车牌检测与识别。
1 系统设计
本文所设计的车牌识别系统由车牌采集模块、车牌定位模块、车牌图像预处理模块、车牌字符分割模块、车牌字符识别模块、车牌识别结果输出模块组成。系统流程如图1所示。
1.1 车牌采集
车牌采集是自动识别系统的第一步。摄像头与计算机连接,将摄像头实时拍摄的照片传输到计算机,之后进行后续处理。
1.2 车牌定位
车牌定位是车牌识别的关键,一旦定位错误,将导致系统无法对图像进行处理与识别。较常见的车牌图像定位方法如下:
(1)运用Haar特征模板和Adaboost构建分类器的方法对车牌进行定位,这种方法需要大量数据作为样本进行训练,然后再对输入的图像进行处理;
(2)通过边缘检测方法,如边缘检测算子Sobel算子,Roberts算子,Prewitt算子,经过一定的实验处理及比较,发现Roberts算子效果较好[4]。
本文利用车牌蓝底白字的特征进行车牌定位。先对图片进行y方向处理,逐行扫描并统计满足一定要求的像素点,之后将满足条件的像素点最多的一行定位为起点,并不断向上扫描,当像素点小于阈值时,定为车牌上界。同理,不断向下扫描,当像素点小于阈值时,定为车牌下界。再对图像的x方向进行处理[2],为了防止中间出现断层,特在y方向的基础上由中间向两边逐列扫描并统计像素点,当蓝色像素小于一定阈值时,即为边界,由此确定x的起点和终点。为了减少干扰,需要通过计算长宽比来对车牌区域进行修正,需将原车牌区域增大或减小,然后将初步定位的车牌区域显示在GUI上。
1.3 车牌图像预处理
1.3.1 灰度化
输入的图像是彩色图像,由红、绿、蓝三色组成,我们称之为RGB。当R=G=B时,图像呈现灰色,而这种由无规则RGB值到R=G=B的过程被称为灰度化,灰度范围为0~255。彩色图像灰度化常见的处理方法有分量法、最大值法和加权平均法。
1.3.2 二值化
首先设定一个阈值,然后对要处理的灰度图像进行变换,如果待处理的灰度图像的灰度值大于125,则变为255,小于等于125的则变为0,由此实现二值化。使用graythresh函数,用最大类间方差法找到适合图片的阈值,达到二值化效果。
1.3.3 去除噪声
利用腐蚀和膨胀进行图像处理,再通过去除小对象从而去除车牌上可能存在的污渍和磨损等噪声。
文中利用开运算与闭运算处理方法。开运算先腐蚀后膨胀,可将图像的轮廓变得平滑,将断裂的地方截断,去除轮廓上的边边角角;闭运算先膨胀后腐蚀,可去除图像上的小洞,补全断裂的地方[5]。
1.3.4 圖像裁剪
在消除噪声后,为了提高后续的正确率,需要进一步对图像进行裁剪。我们可以通过统计灰度值的集中范围来确定车牌位置,便于分割图像。二值化后,需要对图像置反,以更好地查找黑色像素点,再通过投影法计算y方向和x方向的黑点个数。 为了避免边缘造成的误差,从车牌中心位置向两边查找,判断黑色字符是否低于阈值,若低于阈值,则为上界和下界。为了避免左边边框的影响,需判断x方向1/14处的黑色像素数是否小于1,若小于1,则判断此处为左边框,如若不是,则把x=1作为左边框。
1.3.5 倾斜校正
由于拍摄车牌图像时外界因素的影响,如摄像头和车牌的角度不佳,车辆行驶过程中的抖动或车牌未正确悬挂,导致拍摄的车牌为倾斜状态,因此需要对车牌进行校正。若运用最基本的固定角度旋转,则可能使得正常车牌图片或倾斜图片的倾斜角度更大,对后续识别造成难以挽回的影响。在实际车牌识别的应用中,常用到的倾斜校正方法有Hough变换。使用Hough变换提取边框,确定拍摄到的车牌倾斜角,然后再通过空间变换,对图像进行旋转;计算出车牌上每个字符连通区域的中心点,再将其拟合,由此得到车牌的倾斜角;通过计算车牌字符局部极小和极大特征点,之后投影确认车牌倾斜角。
本文利用Radon变换实现图像旋转,可以对不同的图像进行计算,从而得到不同的旋转角。
Radon变换投影如图2所示,均匀图像Radon变换如图3所示[5]。
1.4 车牌识别
1.4.1 车牌字符分割
常用于字符分割的方法有垂直投影、车牌字符间隔及车牌尺寸检测、车牌字符轮廓检测等。本文使用垂直投影方法,车牌字符分割流程如图4所示。
设定阈值以判断黑色和白色的像素点,定义一个数组,计算被置反后的图像及其每一列垂直方向的黑色像素总数。将其与阈值比较,从而判断该列的颜色。首先判断第一列是否为黑,若为黑,无干扰时,则为第一个字符的边界。由字符的组成可知,在无干扰时,若区域边界的灰度值由255到0,再从0到255,则该区域为一个字符。
由于上述处理可能并不完善,因此可能留下一定干扰,其中一个就是汉字前面的干扰,为了清除汉字前面的干扰,采用如下方法:
(1)识别黑色区域黑色像素总和是否小于阈值,若小于阈值,则说明该黑色区域较小,并非车牌区域;
(2)识别的黑色块区域是否小于下一块黑色区域宽度的一半,正常情况下,应该大于该区域,或者与之相等。
如果有干擾,则通过循环将黑色区域去除。按照车牌规格,对分割出来的字符进行分类与后续的识别处理,并且在GUI上显示车牌分割结果。
1.4.2 车牌字符识别
字符识别的方式总体来说分为两种,即基于人工神经网络方式与基于模板匹配方式。本文利用模板库与处理好的车牌字符进行匹配,找到相似度最大的模板,并识别字符。车牌字符的识别流程如图5所示。
模板匹配先将得到的字符进行修正,通过双线性插值算法将分割出来的字符修正成110×55的规格,然后分成三种格式存储0~9,A~Z及省份简称的模板(汉字、字母、数字和字母),为了后续的模板匹配,需要将模板进行灰度化处理、二值化处理与修正操作。修正的格式与前文一致,均为110×55,计算车牌字符和每个模板相等像素点的个数总和的百分比,最大即为车牌字符对应的模板。模板位置经过前述步骤已经确定,之后逐个位置一一比较,再将百分比结果放在对应位置即可。最大百分比的位置即模板位置。在识别可能出现数字和字母的位置时先判断最大百分比位置是否在前十,如果在,则为数字,不在则为字母。
模板匹配相对更简单,当车牌字符规整时,系统对车牌字符受环境影响而产生的干扰,如车牌缺损、沾满泥圬等具有很强的识别能力。
1.5 车牌识别结果输出
在现实生活中,车牌识别结果通常由3种方式输出,即输出到屏幕、语音播报、输出到系统下一级。在本文中,用OpenCV模拟车牌识别输出,即以对话框、语音播报的方式输出。
2 实验和结果分析
为了评估提出的车牌识别系统的有效性,通过对32张具有不同复杂程度背景的车辆图像进行检测,统计结果见表1所列。
由表1可知,在车牌图像为32张的情况下,识别成功了29张,识别率达到90.6%。
出错的部分:车牌定位出错;车牌字符分割出错;车牌识别出错。
造成这些错误的可能原因:车辆颜色偏蓝色,或者背景偏蓝,导致定位出错;车牌处理过程中边框的影响未能消除,导致车牌字符分割出错;模板匹配过程中,0与D的相似可能会造成部分车牌识别出错。
时间差异的原因:车牌离摄像头越近,定位车牌区域所需要的时间越久;车牌倾斜程度越大,校正和再次剪切车牌区域所需的时间越长。
3 结 语
本文基于计算机视觉处理算法,以OpenCV工具为开发平台,提出并设计了车牌识别系统。该系统能够处理在复杂环境下的车牌图像,并识别车牌图片。通过色彩因素对图像中的车牌进行定位,并通过Radon变换计算倾斜角,然后经过一系列的预处理、分割、识别操作,识别图像中的车牌信息。在仿真实验中,该系统识别准确率达到90.6%。
本论文中的车牌识别方法仍有不足,需要后续进行改正和提高。
(1)车牌图像处理时,利用车牌特征对其进行定位与分割的方法存在一定的局限性与误检率,该方法只能应用于车辆颜色不偏蓝和背景无过于密集的蓝色区域。
(2)在车牌字符定位时,若边框过大将导致二值化后的左边框存在很多非字符的黑色长条区域,在分割字符时将其错误的识别为第一块字符区域。
参考文献
[1] DUAN T D,DU T L H,PHUOC T V,et al. Building an automatic vehicle license plate recognition system [C]// Proc.Int.Conf.Comput.Sci.RIVF.2005:59-63.
[2]刘庆祥,蒋天发.智能车牌识别系统中图像获取技术的研究[J].武汉理工大学学报(交通科学与工程版),2003,27(1):127-130.
[3]彭玲玲,任占广,周勤.基于MATLAB的车牌识别系统研究[J].电子制作,2017(22):17.
[4]贾晓丹,李文举,王海姣.一种新的基于Radon变换的车牌倾斜校正方法[J].计算机工程与应用,2008(3):245-248.
[5]陈超.MATLAB应用实例精讲:图像处理与GUI设计篇[M].北京:电子工业出版社,2011:86-87.
[6]孟祥兴,宋宇飞,顾桥磊.基于OpenCV和嵌入式的工业图像检测系统[J].物联网技术,2018,8(10):106-107.
[7]雷剑锋,汪伟.基于OpenCV的图像阈值分割研究与实现[J].现代电子技术,2013,36(24):73-76.
[8]张学贺,张学东,丁宁.基于OpenCV的运动目标检测与跟踪[J].辽宁科技大学学报,2010(5):490-494.
[9]尹俊超,刘直芳.基于OpenCV的运动目标检测与跟踪[J].计算机工程与设计,2011(8):2817-2820.
[10]林启亮.基于OpenCV2.x的车牌识别系统设计与实现[D].厦门:厦门大学,2013.
转载注明来源:https://www.xzbu.com/8/view-15249854.htm