APP下载

一种基于OpenCV的车牌识别定位方法的研究与实现

2015-01-03卓俊宇胡志慧

中国管理信息化 2015年13期
关键词:车牌字符算子

卓俊宇,胡志慧

(湖北汽车工业学院 电气与信息工程学院,湖北 十堰 442002)

0 引言

随着社会的迅猛发展及交通问题的日益严重,为了提高车辆的管理效率,智能交通系统(ITS)由此而生。智能交通系统是融合前沿的信息技术、数据通讯技术、电子传感技术、电子控制技术以及计算机处理技术等于一身的交通运输管理体系,它是一种能在大范围内全方位发挥作用的,拥有实时、准确、高效的综合运输和管理系统。汽车车牌的自动识别是智能交通系统中的一项重要技术,可以切实有效地提高交通系统的车辆监控和管理的自动化程度,是实现交通管理现代化和智能化的重要前提。车牌定位技术是汽车车牌的自动识别系统中关键的环节,它是后续的车牌字符分割和识别工作的基础。

1 OpenCV简介

本项目在基于Visual C++平台与Intel开源计算机视觉库OpenCV,来实现静态复杂背景下的车牌识别系统。其中OpenCV是Intel开源计算机视觉库,它作为一个开源的跨平台计算机视觉库,可以在Linux、Windows和Mac OS操作系统上运行。OpenCV的设计目标是执行速度尽量快,主要关注实时应用。它由一系列C函数和少量C++类构成,同时提供了Python、Ruby、MATLAB等语言的接口,在图像处理和计算机视觉方面的很多通用算法都可实现。OpenCV的编写采用优化的C语言代码,因此能够充分利用多核处理器的优势,它的结构如图1所示。

图1 OpenCV的结构

2 车牌图像特征分析

世界各国都根据本国国情设计了自己特色的车牌,中国也不例外,但相较于别国的车牌,由于地域原因以及汉字的复杂性,使得中国的车牌类别要复杂得多。我国机动车辆使用的号牌,是按照GA36-2007“中华人民共和国机动车号牌标准”设计的。

我国车牌中的字符由汉字、英文字母和阿拉伯数字总共7个字符构成。其中,第一个字符是各个省、自治区、直辖市、行政区的汉字简称,其余的均为英文字母或阿拉伯数字组合。虽然我国的汽车车牌存在一定的复杂性,但是根据总结它是存在一定的共同特点的。以下就是总结出的几个明显且通用的特点:

(1)车牌一般位于没有明显的边缘密集区域的车身底部。

(2)车牌字符的大小和个数一定,且字符间隔距离一定。

(3)车牌区域的像素点明显多于其他部分。

3 车牌图像预处理

图像预处理是图像识别的重要组成部分,是对输入的图像进行特征抽取、分割以及识别前所进行的操作。通常采集获取的汽车牌照的图像,由于在拍摄图像的过程中受到各种环境限制,如雾天、光照不强、灰尘等会导致拍摄的图像质量明显下降。车牌图像预处理是车牌识别系统的前提条件,它直接关系到系统后续字符分割和识别的准确性。

本文采用拍摄的含有汽车车牌的图片作为原始识别图像进行相关处理。首先,借助OpenCV提供的cvCvtColor函数将色彩空间转参数,采用CV_RGB2GRAY将彩色图像转换为灰度图像:Y=0.299*R+0.587*G+0.114*B。然后,采用cvSmooth函数进行平滑高斯滤波处理。

最后,根据汽车车牌具有四边形的外观、车牌区域与其他区域之间的灰度具有很大跳变的特征,可以获得图像边缘检测图作为后续处理的基础。边缘检测的方法很多,常见的经典边缘检测算法有Sobel算子、Roberts算子、Prewitt算子、Laplacian算子、Log算子以及Canny算子等。这些算子利用了边缘处灰度级剧烈变化进行图像边缘检测。不同的算子适用类型不同,不同的算子对不同边缘类型的敏感度不同,提取的边缘结果也不相同。通过调用OpenCV中带的cvCanny函数实现,其中threshold1为小阈值,这里通过编写函数获取图像的平均灰度值作为自适应阈值,它是用来控制边缘连接的;threshold2为大的阈值,用来控制强边缘,通过CV_IMAGE_ELEM函数遍历获取图像最大灰度值的70%作为它的阈值。Canny算子边缘检测得到的轮廓更加清晰并且具有很好的抗干扰性,处理前后的效果如图2所示。

图2 图像边缘检测

4 车牌定位

大多数情况下,一幅图片中车牌的字符总是近似于竖向的,利用其竖向特征可以将车牌与复杂背景分离出来。车牌区域所在的行相邻像素之间的变化(0~255,255~0)会很频繁,这样跳变次数会大于一个临界值,可以作为寻找车牌区域的一个依据。这里可以用CV_IMAGE_ELEM函数方便获取相邻像素的灰度值。由于车牌字符大小、个数、字符间隔距离一定,找出像素变化数据量最大的地方,统计计算其连续20行最大跳变数据量的开始,说明此行在车牌区域内。最后通过循环比较相邻行的值大于一个临界值(一般而言,车牌每个字符至少跳变2次以上,这里设置为18),探测到车牌的上下边界的行号。

通过横向扫描图像,确定车牌上下边界行号,这样可假定车牌区域在最高和最低行之间的条状区域内。这时大致可确定车牌的高,根据车牌宽与高的比例可得到它的宽带,将一个宽度为车牌宽度的窗口由左至右移动,统计窗口中每一列内相邻像素的变化总数,逐个比较之后最大的那个就是车牌区域,把它保留并记录此时的左右边界,从而得到车牌的具体区域。总而言之,就是水平分割、垂直分割后进行归一化。利用OpenCV库中的CvRect确定车牌的矩形区域,然后在原图像中利用cvSetImageROI函数设置敏感区域,接着用cvCopy函数从原图像中把敏感区域(即探寻的车牌区域)拷贝出来。再利用cvResize函数进行图像大小转换,用线性插值方法将车牌变成统一大小为cvSize(40*HIGH_WITH_CAR,40),这样方便后续车牌分割字符处理,车牌定位截取后效果如图3所示。

图3 车牌定位提取图片

车牌定位以后的图像还是一个整体,包括文字和文字之间的空白。字符分割就是将车牌中的7个字符分割出来以便逐个进行字符识别。大部分字符分割的算法以垂直投影、字符间隔及尺寸的测定、轮廓分析或分割识别组合技术为基础。本系统采用车牌字符布局特征与垂直投影积分相结合的方法进行分割。最后采用模板匹配的方法,它将从待识别的图像提取若干特征量与模板对应的特征量进行比较,计算图像和模板特征量之间的距离,用最小距离法判定所属类,完成车牌号码字符的识别。

5 结语

车牌识别是智能交通系统中的重要应用,具有很强的实际应用价值。本文借助开源计算机视觉库OpenCV,在Visual C++平台下对车牌识别系统中图像预处理、车牌定位等方面功能实现进行了初步研究,但是经过对实验结果的分析验证,还有待进一步地深入研究。当前,很多学者致力于车牌识别技术的研究,也相继提出一些可行的车牌识别系统,相信在不久将来车牌识别系统会有更大地发展。

[1]Gary Bradski,等.学习OpenCV[M].于仕琪,等,译.北京:清华大学出版社,2009.

[2]骆雪超.一种基于车牌特征信息的车牌识别方法[J].华南理工大学学报:自然科学版,2002,31(4):70-72.

[3]杨晓玲.基于几何特征的车牌定位与字符分割技术研究[D].厦门:厦门大学,2014.

[4]杨思源.基于OPENCV的车辆牌照识别系统研究[D].西安:西安电子科技大学,2013.

[5]姜宇.基于OpenCV的车牌识别系统研究[J].辽宁师范大学学报:自然科学版,2011,34(2):170-174.

猜你喜欢

车牌字符算子
寻找更强的字符映射管理器
拟微分算子在Hp(ω)上的有界性
各向异性次Laplace算子和拟p-次Laplace算子的Picone恒等式及其应用
字符代表几
一种USB接口字符液晶控制器设计
数字图像处理技术在车牌识别系统中的应用
一类Markov模算子半群与相应的算子值Dirichlet型刻画
消失的殖民村庄和神秘字符
第一张车牌
基于MATLAB 的车牌识别系统研究