车牌识别处理中的关键技术及核心算法研究

2015-09-09 09:45廖作斌
关键词:阈值

廖作斌

(泉州师范学院)

0 引言

作为图像模式识别的一个典型案例,车牌识别算法和相对应的系统虽然发展有一定时间了,国外会比国内早些,但是截止目前为止,真正达到适用程度的系统仍很少,识别率和识别速度都有待进一步提高,而且最为关键的是,业内好的车牌识别算法往往都包含着利益关系,虽然在这一方面,优秀的车牌识别算法比比皆是,但是基于这些算法实现车牌识别的却少之又少,换句话说,就是理论上可以实现,但是实际开发又需另外考虑.目前,车牌识别已经有了一些自动化系统.但是,这并不能完美解决国内的车牌识别,主要由于我国标准车牌是由汉字、英文字母和数字组成,汉字的识别与字母和数字的识别有很大的不同,在汉字的识别上要别字符复杂得多.而且在算法上各家公司都有自己独自的算法,从侧面可以看出在这一方面相当的不统一,所以研究这一方面的算法对于实现各类智能化系统是相当必要的.

1 关键技术

选择好的开发工具或技术对于开发一个实用的系统至关重要.一旦运用一些关键性技术,可以使系统开发者更有余力去关注算法本身,而不必过多关心如何去具体实现,而且可以使设计出的算法更加方便以及实用.

下面给出了车牌识别系统的关键技术组成,如图1所示.

图1 车牌识别系统关键技术组成

1.1 图像处理利器——OpenCV

实现数字图像处理系统,OpenCV无疑就是巨人的肩膀.OpenCV的全称是:Open Source Computer Vision Library,是1999年由 intel公司开发的图像处理和计算机视觉开放源码库,现在由Willow Garage实验室提供支持.它支持多平台,包括 windows,linux,max,并且他完全开源.OpenCV提供了C++,C,Python接口(即将支持 java 接口),目前最新版本为2.4.3.

1.2 界面开发工具——Codejock

由Codejock公司设计开发,该公司成立于1998年,致力于开发“用户界面”的控件产品和开发工具,能有效节约用户的开发时间和开发成本,让软件界面更加精彩.Codejock是目前VC/VB和.NET开发环境下最好的界面开发组件之一.

1.3 轻量级数据库——SQLite

被称为如羽毛般轻的数据库.Sqlite是一种轻量级开源数据库,具有很多不错的特点.如:支持事件,不需要配置,不需要管理员,也不需要安装.本身编译成一个动态链接库,没有界面化管理,故可配合Navicat Premium进行数据库可视化管理.

目前已经在很多嵌入式产品中使用了它,它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就够了.它能够支持Windows/Linux/Unix等等主流的操作系统,同时能够跟很多程序语言相结合,比如C#、PHP、Java等,还有ODBC接口,同样比起Mysql、PostgreSQL这两款世界著名的开源数据库管理系统来讲,它的处理速度比他们都快.

1.4 XML 解析——XERCES

Xerces是由Apache组织所推动的一项XML文档解析开源项目,她是一个开放源代码的XML语法分析器.利用XERCES,配合SQLite使用,便于封装数据库.

2 图像处理核心算法

车牌识别本质上是建立在一系列数字图像处理上,这部分也是一个车牌识别系统的核心.

2.1 图像灰度化与二值化

2.1.1 图像构成

彩色图像其实是由三通道组成,在数据部分由倒向的RGB组成,即BGRBGRBGR……假如直接使用彩色图像进行操作,将使数据操作量十分的庞大,故需要对图像进行二值化.

2.1.2 图像处理

二值化前需先将图片转化为灰度图像,即单通道图像,灰度图像和二值化图像有非常大的区别,灰度图像图像数据有明亮之分,而二值化图像像素数据仅有0或255两种.opencv中提供了将图像转为灰度图像的函数cvCvtColor();

在二值化图像前首先需先理解一个关键词:阈值.阈值又可称为临界值,这个值需自己设定.

二值化如字面意思其实就是将一副灰度图像转化为仅有黑白两种颜色的图像,即图像数据仅有0或255两种.可用如下数学表达式表示,R即为阈值.

所以阈值的选择至关重要,opencv中有提供canny算子的函数(边缘检测),但是阈值需自己提供.

2.1.3 自适应阈值方法

AdaptiveThreshold(T,m_gray_image)小阈值用于边缘控制连接,采用自适应阈值方法,原理如下:

(1)传入原图像灰度值最大值和最小值的平均值t.

(2)将图像分为两部分,大于t的累加进Allt1,小于等于t的累加进Allt2中.并计算分别占有的像素点accountt1和accountt2.

(3)取 Allt1/accountt1,放入t1,即求平均值.

(4)取Allt2/accountt2,放入t2,即求平均值.(5)取t1和t2的平均值tnew.

(6)若tnew的值等于t,tnew即为所要的小阈值,返回;否则将tnew赋值给t进行递归,执行第二步.

2.2 车牌定位

为了确定出车牌的上下边界,有种简易的方法,就是求图中的矩形框,但是往往图片中存在各种各样的噪声.所以不能单纯的求矩形框,可以求出上下边界,再求左右边界.

2.2.1 水平细化

(1)首先需要将图像进行水平细化.将图像细化,即将图像中的右边点减去他的左边点,找出隔壁的点和前一点的差值,即如果两点之间相差的对比度高,即该点的图像较清晰.

2.2.2 绘制水平方向直方图

绘制水平方向直方图以便于观察,直方图绘制思想是new一副高度跟源图像相同的单通道黑色图像,然后一行一行的扫描,如果每行将前num_h[j]的值赋为白色,这样就形成了一副简单的直方图.

2.2.3 确定车牌长宽

搜索车牌区域,从上向下扫描,每次扫描20个像素点,找出像素点最大值的起始处.这样子就可以获得车牌的高度,而宽度为plate_w =imgTest- >width*WITH_X–1.

2.2.4 确定具体起始点

拿一个车牌大小的矩形区域从左往右滑动,什么时候圈住的数据量最大的时候,就代表找到的车牌的左边界;此时,车牌左边界的横坐标是k.

2.2.5 车牌归一化

车牌识别后大小是不相同的,需用OpenCV提供的函数进行归一化.

2.2.6 字符分割

定位后的图像应该是由一个汉字和6个字符组成,字符包括汉字和数字.识别时必须根据每个字符的特征进行匹配,故要完成识别,需先完成字符分割.

算法如下:

(1)从上到下对图像逐行扫描,当碰到第一个255的值(即黑色像素点)时,记录它.然后从下到上对图像逐行扫描,当碰到第一个255的值时,再次记录.这样就得到大致的高度.

(2)在这个高度范围之内自左向右逐列扫描,当碰到第一个255的值时,就认为是字符分割的起始位置,然后继续扫描,直到某一列没有黑色像素点,则扫描结束.

3 模式匹配核心算法

3.1 模式识别介绍

车牌识别系统的最后一步就是字符识别,关于识别,有两种做法,一种是神经网络识别,一种是模板匹配算法,前者虽然识别率高,但是耗时长,后者效率高,识别率也不错.推荐采用后者,模板匹配流程如图2所示.

图2 模板匹配过程

3.2 车牌特征值

3.2.1 车牌特征值提取

车牌识别系统中的特征值可采用33个特征点存储,其中前25个为将图像分割成25块,然后将图像每块中黑点数作为他的特征值存取,后8个特征值是横纵向8条直接所穿过的黑点数.

由于车牌的字符没有标准化的图像可以比较,故需用大量的图片来选取出最合适的字符图像.

3.2.2 车牌特征值存储

得到字符特征后需要字符特征值进行存取,可采用SQLite+XML进行存储,例如:

图3 XML特征值串

3.3 字符识别

字符识别是建立在字符分割并细化后,先提取细化后的字符存在结构体中备用.

然后通过数据库接口查询数据库中所有的字符,并将字符属性存入XML作为返回值返回到主函数中进行对比.对比的方法有很多,可采用如下3种方法.

(1)豪斯多夫最小距离判定,小小的改进了下,算法如下:①设定LEN(X)=0,表示X字符模块初始化;②从上到下,逐行扫描待检测字符图像像素,如果是255,记录为p(x,y);否则继续扫描.③在模板图像上,以p(x,y)为中心的5×5领域内,搜索255,寻找与p(x,y)最近的点,并且计算p(x,y)和该点的距离,此距离是待识别图像和模板图像在该点的最小距离.如果在5×5领域内未搜索到,则认为是20.

④将距离进行累加进LEN(X).

⑤判断图像是否扫描结束,如没结束,转2.

⑥取LEN(X)在所有字符中的最小值,对应的模板就是要识别的结果.

(2)方差判定,公式如下:

取方差最小值所对应得模板即是要识别的结果.

(3)取差值.

但是由于前两种方法的时间效率太低,所以最后采用的是第三种方法.

4 结论

该文针对目前我国车牌识别系统存在的问题,研究并提出了一系列在车牌识别处理中的关键技术以及核心算法,利用这些关键技术和核心算法开发的车牌自动识别系统较普通的车牌识别系统具有更好的识别率,能够为将来的智能化交通体系的建立提供一定的借鉴和参考.

[1]沈晶,等.VC++数字图像处理典型案例详解[M].北京:机械工业出版社,2012.

[2]Bradski G.Kaehler A.于仕琪,刘瑞祯 译.学习 OpenCV[M].北京:清华大学出版社,2009.47.

[3]于仕琪,刘瑞祯.OpenCV教程[M].北京:北京航空航天大学出版社,2007.89.

[4]冯伟兴,等.Visual C++数字图像模式识别技术详解[M].北京:机械工业出版社,2010.136.

[5]谢凤英,赵丹培.Visual C++数字图像处理[M].北京:电子工业出版社,2011.145.

[6]刘海波,沈晶,郭耸.Visual C++数字图像处理技术详解[M].北京:机械工业出版社,2010.12.

猜你喜欢
阈值
土石坝坝体失稳破坏降水阈值的确定方法
采用红细胞沉降率和C-反应蛋白作为假体周围感染的阈值
小波阈值去噪在深小孔钻削声发射信号处理中的应用
一种改进小波阈值函数的信号去噪
基于CS-TWR的动态阈值贪婪算法成像研究
基于自适应阈值和连通域的隧道裂缝提取
比值遥感蚀变信息提取及阈值确定(插图)
室内表面平均氡析出率阈值探讨
基于迟滞比较器的双阈值稳压供电控制电路
辽宁强对流天气物理量阈值探索统计分析