2012-2013年第一学期《数字图像处理》科目考查卷
专业:通信工程 班 级:××× 任课教师:××× 姓名:××× 学 号:××× 成 绩:
车牌识别系统设计
一、基本原理
牌照自动识别是一项利用车辆的动态视频或静态图像进行牌照号码、牌照颜色自动识别的模式识别技术。其硬件基础一般包括触发设备、摄像设备、照明设备、图像采集设备、识别车牌号码的处理机等,其软件核心包括车牌定位算法、车牌字符分割算法和光学字符识别算法等。某些牌照识别系统还具有通过视频图像判断车辆驶入视野的功能称之为视频车辆检测。一个完整的牌照识别系统应包括车辆检测、图像采集、牌照识别等几部分。当车辆检测部分检测到车辆到达时触发图像采集单元,采集当前的视频图像。牌照识别单元对图像进行处理,定位出牌照位置,再将牌照中的字符分割出来进行识别,然后组成牌照号码输出。
二、设计步骤
图1 牌照识别系统示意图
2.1 总体设计方案:
(1)牌照号码、颜色识别
为了进行牌照识别,需要以下几个基本的步骤:
a.牌照定位,定位图片中的牌照位置; b.牌照字符分割,把牌照中的字符分割出来;
c.牌照字符识别,把分割好的字符进行识别,最终组成牌照号码。 牌照识别过程中,牌照颜色的识别依据算法不同,可能在上述不同步骤实现,通常与牌照识别互相配合、互相验证。 (2)牌照定位:
自然环境下,汽车图像背景复杂、光照不均匀,如何在自然背景中准确地确定牌照区域是整个识别过程的关键。首先对采集到的视频图像进行大范围相关搜索,找到符合汽车牌照特征的若干区域作为候选区,然后对这些侯选区域做进一步分析、评判,最后选定一个最佳的区域作为牌照区域,并将其从图象中分割出来。
流程图: 导入原 始图像 (3)牌照字符分割 :
完成牌照区域的定位后,再将牌照区域分割成单个字符,然后进行识别。字符分割一般采用垂直投影法。由于字符在垂直方向上的投影必然在字符间或字符内的间隙处取得局部最小值的附近,并且这个位置应满足牌照的字符书写格式、字符、尺寸限制和一些其他条件。利用垂直投影法对复杂环境下的汽车图像中的字符分割有较好的效果 水平投影进计算 行车牌水平校正
(4)牌照字符识别 :
字符识别方法目前主要有基于模板匹配算法和基于人工神经网络算法。基于模板匹配算法首先将分割后的字符二值化,并将其尺寸大小缩放为字符数据库中模板的大小,然后与所有的模板进行匹配,最后选最佳匹配作为结果。基于人工神经元网络的算法有两种:一种是先对待识别字符进行特征提取,然后用所获得
2
对图像开边缘提取 图像预处理增 车牌定位 强效果图像 闭运算 去掉车牌的框架 分析垂直投影找到每个字符中心位置 按左右宽度切割出字符
特征来训练神经网络分配器;另一种方法是直接把待处理图像输入网络,由网络自动实现特征提取直至识别出结果。实际应用中,牌照识别系统的识别率与牌照质量和拍摄质量密切相关。牌照质量会受到各种因素的影响,如生锈、污损、油漆剥落、字体褪色、牌照被遮挡、牌照倾斜、高亮反光、多牌照、假牌照等等;实际拍摄过程也会受到环境亮度、拍摄亮度、车辆速度等等因素的影响。这些影响因素不同程度上降低了牌照识别的识别率,也正是牌照识别系统的困难和挑战所在。为了提高识别率,除了不断的完善识别算法,还应该想办法克服各种光照条件,使采集到的图像最利于识别。
2.2 车牌识别系统程序设计
(1)开发软件
车牌号识别系统的软件部分大都采用VC++,VB或者Matlab,本论文选用Matlab,主要是因为Matlab具有以下优点:
1) Matlab绘图功能很强大,但在VC++,VB语言里绘图都很不容易,但Matlab
里数据的可视化程度非常高,并且具有较强的编辑图形界面的能力。
2) Matlab语言简单,入门容易,程序设计不严格,自由度大,例如用户无
需对矩阵预定义即可使用。
3)Matlab语言简洁紧凑,使用方便灵活,库函数丰富,并且内部集成了很多
工具箱,为程序开发提供现成模块。
4)Matlab的可移植性很好,基本上不做修改就可以在在各种型号的计算机和操作系统上运行。
2.3 图像读取及车牌区域提取
图像读取及车牌区域提取主要有:图像灰度图转化、图像边缘检测、灰度图腐蚀、图像的平滑处理以及车牌区域的边界值计算。其程序流程图如下:
3
输入车牌图象 灰度校正 平滑处理 提取边缘
图 2 预处理及边缘提取框图
目前比较常用的图像格式有*.BMP、*.JPG、*.GIF、*.PCX、*.TIFF 等,本
课题采集到的图片是*.JPG 的格式。因为使用*.JPG图像时有一个软件开发联合会组织制定、有损压缩格式,能够将图像压缩在很小的储存空间,而且广泛支持 Internet 标准,是面前使用最广的图片保存和传输格式,大多数摄像设备都以*.JPG格式保存。利用图像工具箱的
Car_Image_RGB=imread(‘Image_Name’);
即可将图像读取出来,这样读取得到的是RGB图像,RGB图像分别用红、绿、蓝三个色度值为一组代表每个像素的颜色,因此Car_Image_RGB是一个错误!未找到引用源。的数组,m、n表示图像像素的行、列数。 2.4 图像灰度图转化
我国车牌颜色及其RGB值如下,蓝底(0,0,255)白字(255,255,255)、黄底(255,255,0)黑字(0,0,0)、黑底(0,0,0)白字(255,255,255)、红底(255,0,0)黑字(0,0,0),由于车牌的底色不同,所以从RGB图像直接进行车牌区域提取存在很大困难,但不管哪种底色的车牌,其底色与上面的字符颜色的对比度大,将RGB图像转化成灰度图像时,车牌底色跟字符的灰度值会相差很大。例如蓝色(255,0,0)与白色(255,255,255)在R通道中并无区分,而在G、R 通道或是灰度图象中数值相差很大。同理对白底黑字的牌照可用R 通道,绿底白字的牌照可以用G 通道就可以明显呈现出牌照区域的位置,便于后续处理。原图、灰度对于将彩色图象转换成灰度图象时,图象灰度值H可由下面的公式计算:
4
H?0.229R?0.587G?0.114B (2.4.1)
H?B?G?R (2.4.2) 3
(2.4.1)式使用了权值加重法,(2.4.2)式使用均值法,使用权值法的好处是可以突出某个通道,Matlab内的RGB转灰度图函数rgb2gray()就是使用的(2.4.1)式权值比例公式,这样就可以利用边缘检测方法,识别出临近区域灰度值相差大的分界区。
2.5 图像的边缘检测
在Matlab中利用函数edge()实现边缘检测,具体的用法如下所示:
Car_Image_Bin=edge(Car_Image_Gray,'robert',0.15,'both');
在edge()函数中有Sobel算子,Prewitt算子,Roberts算子,Log算子,Canny算子及Robert算子,几种算法相比之下,Roberts算子是一种最简单的算子,是一种利用局部差分算子寻找边缘的算子,他采用对角线方向相邻两象素之差近似梯度幅值检测边缘。检测垂直边缘的效果好于斜向边缘,定位精度高,对噪声敏感,无法抑制噪声的影响。因此本课题使用了Robert算子。
由于Roberts边缘检测算子是一种利用局部差分算子寻找边缘的算子, 根据任一相互垂直方向上的差分都可用来估计梯度,Robert 算子采用对角方向相邻两像素之差,其计算公式如下:
?xf?f?x,y??f?x?1,y?1? (3.3) ?yf?f?x?1,y??f?x,y?1? (3.4) 其幅值为: Robert
错误!未找到引用源。 (3.5)
?11??11??x?2,y?2??x?2,y?2??为中心,所以他度量了??点处45?和135?错误!未梯度以??01?找到引用源。方向(相互正交)的灰度变化。适当取门限T,做如下判断:
?10?G?x,y??T,(x,y)为阶跃状边缘点。Roberts边缘检测算子相当于用??和错误!未找到引用源。对图像进行卷积。both表示双向0.15为敏感度值检测算法
5