
0引言
车牌识别是计算机视觉和模式识别技术在智能交通领域应用的重要研究课题之一,是实现交通管理智能化的重要环节[1-3]。当车牌识别的算法完成后,就要将各环节级联构建完整的系统,需进行算法验证、系统级联和系统的性能测试。因此,建立一个有效的车牌识别系统仿真实验平台是非常重要的。
本文应用Matlab 的Simulink 设计了一个车牌识别系统仿真实验平台。该平台能使系统的各个环节模块化,将实现不同功能的各个模块连接起来,构建出一个完整的车牌识别系统。由于车牌识别系统的各个子系统都在这个平台上运行,当要改变系统中的任何一个环节时,可以在相应的模块里修改,便于算法和系统性能的测试,使复杂的系统直观化。实验结果表明,该系统具有很好的性能。
1车牌识别系统工作原理
车牌识别技术是将摄像机等设备获取的车辆图像,经视
频图像采集卡转换成数字图像(或直接使用数字摄像机)并传送给计算机,由计算机通过车牌识别软件定位提取车牌,识别出车牌上的汉字、字母、数字等符号,从而在非人工参与下,计算机自动获得通行车辆车牌号码的技术。它主要有车牌定位、车牌字符分割和车牌字符识别3项关键技术。
一个完整的车牌识别系统是:当车辆通过时,车辆检测装置受到触发,启动图像采集设备获取车辆的正面或反面图像,并将图像传至计算机,由车牌定位模块提取车牌,字符分割模块对车牌上的字符进行切分,最后由字符识别模块进行字符识别并将识别结果送至监控中心或收费处等应用场合。
2基于Matlab 的Simulink 简介
Matlab 是由MathWorks 公司开发的一种主要用于数值计
算及可视化图形处理的高科技计算语言。它的特点是将数值分析、矩阵计算、图形图像处理和仿真等诸多强大功能集成在一个极易使用的交互式环境中,为科学研究、工程设计以及必须进行有效数值计算的众多学科提供一种高效率的编
收稿日期:2008-03-15E-mail :zhaojianchun1229@163.com
多媒体技术
程工具[3]。Simulink是基于Matlab的图形化仿真设计环境,是Matlab提供的进行动态系统建模、仿真和综合分析的集成软件包[4]。Simulink作为对Matlab语言运算环境的扩展,在保持Matlab一般性能基础上,结合工具箱的使用,可以完成对连续系统、离散系统、连续与离散混合系统的动态性能的仿真与分析,Matlab7.1以后的版本可以对图像和视频进行处理并仿真,观察仿真的执行过程,仿真结果保存在Mamtlab的工作间中,Simulink为用户提供了用方框图进行建模的图形接口,实现了可视化的建模,具有直观、方便、灵活的特点[5]。也正是由于这些卓越的功能,使得它成为自动控制、航空航天、汽车设计等诸多领域仿真的首选语言。尽管Simulink提供了十分丰富的模块库,但在研究复杂系统时很难用给定的模块来描述,所以Simulink允许用户利用S函数创建特殊的模型元件,来解决那些复杂的问题。这样大大地扩大了Simulink的应用领域。也体现了Matlab开放性、可扩充性的特点。
3基于Simulink的车牌识别系统仿真平台的设计
基于Simulink的车牌自动识别系统的仿真实验平台包括:图像采集模块、车牌定位模块、字符分割模块和字符识别模块。
3.1图像采集模块
在这个采集模块里,输入一幅图像,要实现灰度转换,若原始图像是0*480的24位真彩色,要转换为灰度256色图像。原因是:①图像中除了车牌外还有车身和周围景物等其它物体的颜色可能与车牌颜色相同或相近,简单的基于彩色信息并不能找到车牌;②牌照的颜色虽然不多,但是实际由于车牌的新旧程度和光照强度的不同,车牌的颜色已经不同程度的偏离了原来的颜色,有的甚至严重偏离,因此区分不同颜色的车牌困难很大;③将彩色图像灰度化以后,我们感兴趣的信息并没有减少,相反会使处理过程更加简单和省时。
另外,由于彩色图像存储量大,处理起来不方便。所以,要先将车牌图像进行灰度变换。同样输入一个视频序列,也要进行灰度转换。用到的模块有:Video and Image Processing Blockset工具箱Sources中的:From Multimedia File模块(用来读入一个视频序列)或Image From File模块(用来从文件中读入一幅图像),Conversions工具箱的Color Space Conversion模块(主要的功能是使用转化参数指定相互转化的色彩空间,有:RGB到Y'CbCr,Y'CbCr到RGB,RGB到intensity,RGB到HSV,HSV到RGB,还是sRGB到XYZ,XYZ到sRGB,sRGB 到LAB,LAB到sRGB),Sinks工具箱的Video Viewer模块。将这些模块连接可得采集模块,运行后可以经过灰度转换的图(如图1所示)。3.2车牌定位模块
车牌定位的主要目的是在输入的车辆图像中精确定位车牌的位置,将车牌部分的图像单独提取出来,并对定位不准的车牌图像进行进一步倾斜校正。因此车牌定位模块包括两部分:车牌提取和倾斜校正。目前车牌提取的方法有很多,本文实验用的方法是:在灰度空间中的一种基于字符笔画先验知识的高斯微分方法来实现车牌的粗定位;采用结构特征验证、信息熵验证进行精确定位。则车牌定位的流程是:对一幅车牌灰度图像进行字符边缘检测--二值化--噪声滤除--形态学--区域筛选--倾斜校正。提取出来的车牌区域容易受很多情况干扰,所以要进行倾斜校正,这个平台用到的模块有:Simulink 基本工具箱User-Defined Function中的:MATLAB Fcn模块。将车牌提取和倾斜校正算法分别放到Matlab Fcn模块中,得到定位模块(如图3中车牌定位模块),运行,可看到经过提取并校正过的车牌(如图2所示)。
模块中用到了MATLAB Fcn模块,它可以完成一个功能,用户可以根据自己的需要编写一个M文件来实现这个功能,将函数名写在模块参数中MATLAB function位置上。MATLAB Fcn模块要求它的输入和输出都必须是double型数据类型,所以每一个实现不同功能的MATLAB Fcn模块的输入和输出都是double型。参数中Output dimensions项可以设置输出的大小,如果需要输出大小为[100,100]的矩阵,可以在Output di-mensions中写[100,100]。若平台实现视频序列中车牌的定位,分割和识别,每一帧的车牌大小则都不一样,那么实现车牌定位算法的Extract模块,它的输出维数要足够大,否则运行时会报错。实现车牌倾斜校正算法的Tilt Correct模块,首先要把输入端口中车牌的部分提取出来,再进行车牌的倾斜校正。若平台实现一幅图像中车牌的定位,分割和识别,则Extract模块的输出维数就是车牌的维数大小。Tilt Correct模块的算法直接进行倾斜校正。
3.3字符分割模块
字符分割的目的就是在车牌图像上,将字符从背景中一一提取出来,方便以后的识别。在准确地定位车牌后,字符分割的好坏就对字符识别率起着非常关键的作用。因此选择一种好的分割算法对识别率的影响很大。本文的实验用一种基于先验知识的质量退化车牌字符分割算法,分割流程是:对图像预处理--图像二值化--垂直投影--去掉间隔--根据结果进行合并或分割。
首先,对光照不均,对比度不强,质量退化等的图像对它们进行预处理;之后,使图像二值化、进行垂直投影、去掉间隔符、计算字符字段个数、如果字段个数大于7,则进行合并;否则进行分割。在字符分割平台里用到的模块是Simulink基本工具箱User-Defined Function中的:MATLAB Fcn模块。由于是对车牌进行一个个字符分割,所以有7个MATLAB Fcn实现的分割模块,7个输出。将7个字符分割模块,7个输出分别创建一个子系统,得到图3中字符分割模块。
图1运行后的图
11562009,30(5)计算机工程与设计Computer Engineering and Design
3.4字符识别模块
字符识别是对车牌上的汉字、字母和数字进行确认的过
程,在车牌定位与字符分割完成后,根据字符的固有特点而设计了相应模板,通过提取字符特征与模板匹配完成字符的识别。目前,字符识别的方法也有很多,本文实验用的是基于神经网络的车牌字符识别方法,识别过程分成两部分:识别过程和测试过程。识别过程为:输入特征向量--神经网络训练,误差反馈--目标输出。测试过程为:输入识别字符的特征向量--神经网络--输出。
在字符识别平台里用到的模块是Simulink 基本工具箱User-Defined Function 中的:Level-2M-file S-Function 模块。由于对7个字符分别进行识别,就有7个S-Function 模块,7个输出。将它们封装成一个子系统。与前面的分割部分连接可得模型,如图3所示。选择好仿真参数,从0秒开始仿真,结束时间为10s ,运行,得到仿真结果,如图4~图10所示。与字符模板匹配的结果是:辽、B 、0、2、2、3、6。
在字符识别模块里用到了Level-2M-file S-Function 模块,它是具有特殊调用格式的函数文件。利用Simulink 中提供的S 函数模板进行适当的“剪裁”,就可根据实际需要,建立实验所需的模型
[6-8]
。Matlab 提供了S 函数M 文件的标准模板,使得
开发效率大大提高。这个函数的标准模板是:MMATLAB7.1\oolbox\\simulink\\blocks\\msfuntmpl.m 。可见,在Level-2M-file S-Function 函数里,可以根据模型的需要,设置各种参数:模块的输入和输出个数、输入和输出数据类型、S 函数对话框是否有参数、参数是否可以变化等,图3模型中的Recognize 子系统模
块封装了7个S-Function 函数,分别来识别7个字符。
如Recognize 子系统中S-Function 函数开始设置参数的部分程序为:
function recognise1(block );setup (block );function setup (block );
block.NumInputPorts =1;%设置Recognize1模
块输入端口的个数
block.NumOutputPorts =1;%设置Recognize1模
块输出端口的个数
block.SetPreCompInpPortInfoToDynamic;
block.SetPreCompOutPortInfoToDynamic
block.InputPort (1).DatatypeID=0;%设置Recognize1模块
输入端口的数据类型,0代表:double 型,…
block.InputPort (1).Complexity ='Real';
block.OutputPort (1).DatatypeID =0;%设置Recognize1模
块输入端口的数据类型,0表示:double 型
block.OutputPort (1).Complexity ='Real';
block.NumDialogPrms=0;%设置Recognize1模块S 函数
对话框的参数
4结束语
利用Matlab 的Simulink 建立的车牌识别系统仿真的试验
平台,从试验平台可以清楚地看到车牌识别系统的3部分:车牌定位部分,车牌分割部分,车牌识别部分。平台中不仅利用了Simulink 中提供的现有模块,而且对MATLAB Fcn 和S-Func-tion 两个功能函数进行了扩充。整个平台不仅模型简单,清晰;可视化效果好;便于维护改进,而且它能够满足算法测试和系统测试的测试要求,具有很好的性能。当对其中任何一部分有改进时,可直接将新算法放在相应的模块中,进行测试,非常方便。
参考文献:
[1]李文举.智能交通中图像处理技术应用的研究[D ].大连:大连海事大学,2004.
[2]郭娟.车辆牌照自动识别系统[D ].沈阳:东北大学,2005.[3]粟彦平.数字图像处理在智能交通系统中的应用研究[D ].大连:大连理工大学,2005.
[4]周旭,朱建林,向尕.集成化语言Matlab 的Simulink 仿真研究[J ].湘潭大学自然科学学报,2000,22(1):99-102.
[5]
贾秋玲,袁冬莉,栾云凤.基于MA TLAB7.X/Simulink/Stateflow 系统仿真、分析及设计[M ].西安:西北工业大学出版社,2006:1-2.
[6]高立娥,康凤举,张金涛,等.基于Simulink 的鱼雷控制系统仿真[J ].计算机仿真,2005,22(2):12-14.[7]
路玲,陈建辉,李琳.Simulink 中S 函数在仿真建模中的应用[J ].郑州航空工业管理学院学报:社会科学版,2004,23(6):182-183.[8]
吴日善,杨家辉,金国镇.基于Simulink S-函数的机构动力学仿真[J ].湖北工学院学报,2004,19(3):55-57.
图3车牌识别模块
车牌定位模块
amorncard03.JP R
G
B
R'G'B'
R'G'B'to
intensity
I'
MATLAB
Function Extract
MATLAB Function Tilt Correct
In1In2In3In4In5In6In7Out1Out2Out3Out4Out5Out6Out7In1In2In3In4In5In6In7Out1Out2Out3
Out4Out5Out6Out7
Color Space Conversion
Image From File
Output
Recognise 车牌识别模块
Segment 车牌分割模块
In
1
