聂文都 蔡锦凡
(西京学院 西安 710123)
随着我国经济的高速发展,小汽车越来越普及,但小汽车也带来了一系列的交通管理问题,因此建立智能的交通管理系统是很有必要的,其中汽车的车牌识别系统是很重要的一部分。汽车车牌识别领域也是数字图像处理技术[1]、计算机视觉技术[2]和人工智能(AI)技术[3]重要的研究方向之一。通过对监控视频图像进行逐帧获取车牌图像,再利用上述技术进行对车牌的精确定位分析和车牌号码的识别。车牌识别在现在的高速公路、智慧停车场、城市交通等都有着广泛的应用。本文提出基于OpenCV和SVM的车牌识别方法,可高效获取车辆车牌信息。
对原始图像进行灰度化处理,如图1(a),再对其进行边缘检测。在传统车牌识别方法中常用So⁃bel算子对图像进行边缘检测[4],Sobel算子对灰度渐变和噪声较多的图像处理效果较好,但是Sobel算子对边缘定位不是很准确,检测的精度不够,得不到好的边缘检测结果。本用Canny算子来实现对图像边缘信息的检测[5],Canny有较好的抗噪能力,能够检测弱边缘,使用两种不同的阈值分别检测强边缘和弱边缘,能高效提取字符的边缘信息。Canny算子处理后的图像如图1(b)。
图1 图像边缘检测
为了克服简单局部平均法的弊端,目前已经提出许多保持边缘细节的局部平滑算法[6],主要思想是如何选择领域的大小、形状和方向、领域点的权重系数等。高斯平滑[7]就是诸多平滑算法中的一种,在高斯平滑中,对图像进行平均时,不同位置的像素被赋予了不同的权值。对原始图像进行高斯平滑处理,如图2(a)。中值滤波不但可以去除孤点噪声,而且可以保持图像的边缘特性,不会产生显著的模糊。对图像进行中值滤波处理,如图2(b)。
图2 图像去噪
车牌定位就是从获取到的车辆图像中确定车牌在整张图像中的具体位置,车牌定位的精确度是整个车牌识别的前提。传统的车牌定位方法是直接对车牌进行Sobel运算,取其轮廓将车牌区域标出。由于Sobel算子对边缘检测的抗噪能力相对较弱,所以本文使用Canny算子对车牌进行运算,弥补了Sobel算子的缺点。再基于HSV颜色空间[8]和SVM来实现对车牌的定位。
HSV(Hue Saturation Value)是一种比较直观的颜色模型,在图像领域中有较为广泛的应用。车牌图像都是RGB图像,将车牌图像RGB值映射到HSV颜色空间上的色域值来进行车牌定位,根据HSV颜色空间和实验表明,H值在220~260之间时,为蓝色车牌;H值在45~70之间时,为黄色车牌;H值在90~150时,为绿色车牌。RGB值映射到HSV色域值公式:
H值、S值和V值的计算:
传统的车牌识别算法中常用SIFT算法对车牌区域进行特征提取,从而实现车牌角度的旋转。但是SIFT算法有计算复杂度高,耗时长的缺点。本文使用SURF算法[9]对车牌区域进行特征提取,是一种局部特征检测算法,对亮度、角度和噪声不敏感。SURF在保持了SIFT优良性能基础上,也同时解决了SUFT的缺点,实现了对兴趣点提取和特征向量描述方面的改进,且计算速度得到提高。SURF特征提取步骤主要步骤:1)尺度空间的建立。2)特征点的提取。3)利用特征点周围邻域的信息生成特征描述子。4)特征点匹配。
利用OpenCV中已封装好的SURF函数来对车牌的亮度、旋转角度和亮度等特征进行提取,将此提取到的特征作为SVM分类器的分类依据。车牌角度调整的结果如图3所示,图3(a)为调整前的车牌图,图3(b)为调整后的车牌图。
图3 车牌角度调整
SVM(Support Vector Machine)算法[10~11]是一个监督学习算法,也是一个二分类算法,SVM是基于样本线性可分的情况的有效分类器。将数据绘制在n维空间中(n代表数据的特征数),然后查找可以将数据分成两类的超平面,支持向量指的是观察的样本在n为空间中的坐标,SVM是将样本分成两类的最佳超平面。现有样本数据{(x1,y1),(x2,y2),…,(xn,yn)},其中x∈Rn,y∈{-1,1}为空间中的超平面方程可以写成:
可以利用高等数学的方法实现点到超平面的间隔最小化,最终得到目标超平面。SVM算法的实现总体上可分为如下步骤:
1)如果样本线性不可分,利用核函数方法转换到线性可分的空间。
2)利用最大化间隔的方法获取间隔最大的分割线,进而得到支持向量。
3)利用分割线和支持向量,对新样本进行分类预测。
将定位得到的车牌区域进行二值化处理,如图4(a)所示。再使用形态学操作处理[12],如图4(b)所示。
图4 车牌图像处理
对字符图像进行灰度化,然后对车牌灰度图像进行灰度垂直投影[13],可以清晰看到车牌的7个投影区域,如图5所示。即为车牌的7个字符灰度图像垂直投影。根据车牌的基本几何资料可知,车牌除去边框后,只剩下字母和数字,且几何尺寸都是确定的,因此可以确定车牌的7个垂直投影区域宽度范围就是字符宽度阈值范围。分割过后如图6所示。
图5 垂直投影区域
图6 字符分割
分割完后,本文采用Z-score标准化(Z-score normalization)进行字符归一化处理[14],对序列x1,x2,…,xn进行变换,转换的公式为
新序列y1,y2,…,yn的均值为0,方差为1,且无量纲。
根据车牌字符的性质构建SVM分类器[15],根据我国大陆车牌字符选取的规定,字母“I”和“O”是不会出现在车牌字符中的,所以车牌字符样本有50个汉字、24个英文字母和10阿拉伯数字,总共有84个字符。本文分类器构建的思想是将1个字符和另外83个字符构成一个分类器,即总共需要84个分类器。针对汉字的50个分类器,针对字母的24个分类器,针对数字的10个分类器。
基于PyCharm利用OpenCV将该车牌识别方法做成一个人机交互的友好界面,可实现对车牌图像或者视频流的车牌字符识别。对总共100张蓝、黄、绿车牌图进行了识别测试,其中34张蓝色车牌,33张黄色车牌,33张绿色车牌。对应部分实验测试结果分别如图7、图8、图9所示。对100张蓝、黄、绿车牌测试中正确率的情况如表1所示。
图7 蓝色车牌
图8 黄色车牌
图9 绿色车牌
表1 车牌测试情况
根据实验测试结果分析,整个测试实验中,该方法对蓝色和黄色车牌的颜色识别没有出现错误,对绿色车牌的颜色识别出现过错误。根据表1可知在测试实验中绿色车牌的识别正确率为93.9%,蓝色车牌识别正确率为100%,黄色车牌识别正确率为96.7%,总体车牌识别正确率为97%。绿色车牌识别正确率最低,蓝色车牌识别正确率最高,造成这样的结果可能是数据的样本来源存在着总体数据样本数量小、车牌图像质量差、绿色车牌和黄色车牌数量小于蓝色车牌数量等原因,但总体的识别效率还是很高。
本文提出了基于OpenCV与SVM的车牌识别方法,通过Canny算子对车牌图像进行边缘检测,使用形态学方法突出车牌边缘信息,再将边缘信息和HSV颜色空间结合进行车牌的定位;使用SURF算法对车牌图像进行角度调整,再使用多个SVM二分类器对分割字符进行识别,在开源的OpenCV库中用以封装好的算法和各种函数对图像的进行处理,最后基于PyCharm和OpenCV将该方法开发成一个人机交互的友好系统,从而实现对车牌进行识别。实验结果表明,OpenCV开源库处理图像效率高,结合SVM算法的该方法在车牌识别效率上有较好的应用前景。