南 阳 理 工 学 院 本科生毕业设计 (论文)
学 院:电子与电气工程学院 专 业:电气工程及其自动化 学 生: 指导教师:
完成日期 2014 年 5 月
南阳理工学院本科生毕业设计(论文)
车牌识别系统设计与实现
Design and Implementation of License Plate Recognition System
总 计: 30页 表 格: 1个 插 图: 19幅
南 阳 理 工 学 院 本 科 毕 业 设 计(论文)
车牌识别系统设计与实现
Design and Implementation of License Plate Recognition System
学 院: 电子与电气工程学院 专 业: 电气工程及其自动化 学 生 姓 名: 学 号: 指 导 教 师(职称): 评 阅 教 师: 完 成 日 期:
南阳理工学院
Nanyang Institute of Technology
车牌识别系统设计与实现
车牌识别系统设计与实现
[摘 要]汽车车牌的识别系统是现代智能交通管理的重要组成部分之一。车牌识别系统使车辆管理更智能化,数字化,有效的提升了交通管理的方便性和有效性。车牌识别系统主要包括了图像采集、图像预处理、车牌定位、字符分割、字符识别等五大核心部分。
本文主要介绍图像预处理、车牌定位、字符分割三个模块的实现方法。本文的图像预处理模块是将图像灰度化和用Roberts算子进行边缘检测的步骤。车牌定位和分割采用的是利用数学形态法来确定车牌位置,再利用车牌彩色信息的彩色分割法来完成车牌部位分割。字符的分割采用的方法是以二值化后的车牌部分进行垂直投影,然后在对垂直投影进行扫描,从而完成字符的分割。
[关键词]:MATLAB;图像预处理;车牌定位;字符分割
目 录
1 引言 ................................................................................................................................ 1
1.1车牌号识别系统概述 .......................................................................................... 1 1.2 MATLAB介绍 .................................................................. 错误!未定义书签。 2 车牌识别系统整体方案设计 ........................................................................................ 2
2.1 系统的基本原理 ................................................................................................. 2 2.2 系统硬件设计 ..................................................................................................... 3 2.3 系统软件设计 ................................................................... 错误!未定义书签。
2.3.1 图像预处理及其MATLAB实现 .......................................................... 3 2.3.2 车辆号码牌定位 ...................................................................................... 4 2.3.3车辆号码牌的字符分割 ........................................................................... 4 2.3.4 车辆号码牌的识别 .................................................................................. 4
3 图像预处理及其MATLAB实现 ................................................................................. 5
3.1 图像的读取 ......................................................................................................... 5 3.2 图像的灰度化处理 ............................................................................................. 6 3.3 图像的边缘检测及提取 ..................................................................................... 7 3.4 图像的平滑处理 ................................................................................................. 8 4 车辆号码牌定位 .......................................................................................................... 10
I
车牌识别系统设计与实现
4.1 车辆号码牌的区域分割 ................................................................................... 10 4.2车牌号码的初定位 ............................................................................................ 11
4.2.1 图像二值化的基本原理 ........................................................................ 12 4.2.2 车辆号码牌的二值化 ............................................................................ 13
5 车辆号码牌的字符分割 .............................................................................................. 15
5.1字符分割 ............................................................................................................ 15 5.2 字符归一化 ....................................................................................................... 16 6 车辆号码牌的识别 ...................................................................... 错误!未定义书签。 结束语 .............................................................................................................................. 17 参考文献 .......................................................................................................................... 18 附录 .................................................................................................................................. 19 致谢 .................................................................................................................................. 27
II
车牌识别系统设计与实现
1 引言
1.1车牌号识别系统概述
(1)车牌号识别系统的研究背景
随着经济社会的迅猛发展,人们的生活水平的提高,私有车辆不断增多,公路上的车辆超速,超载以及日常丢车的现象越来越严重,尤其在高速公路的出口或者进口处,由现在的科技的限制无法采用自动计费方式,所以就造成了收费缓慢,造成了交通的堵塞,严重影响了社会的安定和人们的日常生活,为了提高车辆的管理效率,缓解公路上的交通压力,我们必须找到一种解决方案。汽车车牌是每辆车的名片,在生活中每辆车的车牌是不同的,因此车牌是确定每辆车的依据。而城市尤其是大中城市的公路交通管理变得越来越复杂,智能交通管理系统的设计和实施因而受到大众和政府的重视,汽车牌照自动识别可用于公路路口,停车场,高速公路收费站以及收费公路路段(如隧道)等场合,车辆号码牌识别系统,对现在人们的生活有着极大的现实意义,它大大提高了交通管理水平,为人们的出行带来了便利[1]。
(2)选题的目的与意义
随着人们生活水平的逐渐提高,私家车的出现越来越多,城市交通的压力扩大,如何高效进行交通管理也成为现在生活中所关注的焦点问题,于是各种各样的交通道路监视、管理的系统出现在了人们的视线当中,这些系统主要是通过对其过往的车辆进行检测,提取中间的交通数据,以达到监控,管制,指挥调度的目的。汽车车牌的识别是当中的重要环节,是实现现代化交通管理和智能化的关键,也是现今交通工程研究领域的重点。识别算法的好坏关系到识别的正确性好高效性。而传统设备如IC卡识别因价格昂贵,设备复杂无形中增加了企业的成本,因此基于图像处理的车牌识别方法,努力提高车牌识别系统的性能是有非常重要的现实意义。
(3)国内外发展状况
在上个世纪人们就开始了对车牌识别技术的开发和应用。车牌识别系统最主要的就是怎样获得车牌图片并自动从图像中分析出车辆号码牌。在车牌识别系统研究中,许多的新技术和新方法被不断地提出并应用,例如图像处理技术、模糊数学理论、神经元网络算法等等,也有人将一些传统方式和高新技术相结合来进行应用,但到目前为止在车牌识别的过程中,虽然运用了很多的技术方法,但由于外界环境光线变化、光路中有灰尘、季节环境变化及车牌本身被污染而模糊等条件的影响,使得车牌识别系统一直处于实验室阶段,得不到很好的应用;而且,很多的方法都需要大量的数值计算,不能很好地满足实时性要求。由于各种客观的不利环境因素存在,还没有一种解决办法可以作为最有效的方式来解决应用中的所有技术难题。所以车辆号码牌识别系统的研究具有非常重
1
车牌识别系统设计与实现
要的现实意义。
国外在这方面的研究工作开展较早。早在上世纪70年代,英国就在实验室中完成了\"实时车牌检测系统,的广域检测和开发。同时代,还诞生了面向被盗车辆的第一个实时自动车牌监测系统。直至今日,国外对车牌检测的研究已经取得了一些令人瞩目的成就,如YuniaoCul提出了一种车牌识别系统,在车牌定位以后,利用马尔科夫场对车牌特征进行提取和二值化,对样本的识别达到了较高的识别率。
关于车牌识别技术及定位系统研究,在我国已经有了十几年的发展历程,目前系统的应用还处于起步阶段,大规模投入使用的成熟系统还没有出现,汽车牌照识别系统作为改进交通管理的有效工具,技术水平仍需完善。由于我国汽车车牌识别的特殊性, 采用任何一种单一识别技术均难以奏效。目前正在研制的无源型汽车牌照智能识别系统综合利用了车辆检测技术、计算机视觉(Computer Vision) 技术、图象处理技术、人工智能技术和人工神经网络技术等, 是一个比较有发展前途的车牌识别系统。
2 车牌识别系统整体方案设计
2.1 系统的基本原理
车辆牌照识别系统的基本工作原理为:将摄像头或其它图像采集装置采集到的包含车辆牌照的图像输入到计算机中进行图像预处理,再经过定位,并分割出包含牌照字符的矩形区域,最后对牌照字符进行二值化并将其分割成单个字符并输出车牌号码的数字。我们知道采集的彩色图像包含大量颜色信息,会占用计算机较多的存储空间,并且会降低图像处理速度,因此对图像进行识别等处理时,通常将彩色图像转换为灰度图像,以加快处理速度。对图像进行灰度化处理、边缘提取、再对车牌进行定位。然后字符分割、车牌识别[3]。
具体步骤如图1所示:
采集 图片 图片 预处理 车牌 定位 2
车牌识别系统设计与实现
字符 分割 车牌 识别 车牌 显示
图1 系统基本原理示意图
2.2 系统硬件设计
系统的硬件主要是对车辆号码牌进行图像采集的设备,其主要作用就是对车辆号码牌进行采集和存储,车牌识别系统的基本硬件配置由摄像机、主控机、采集卡和照明装置等组成。例如在十字路口车辆管理系统中,系统硬件主要包括车辆传感探测器、高性能工控计算机、高分辨率CCD摄像机、CCD自动亮度控制器、高放大倍数镜头和视频采集卡等。
在此系统中首先是探测车辆的所在位置和行驶状况等。常用的有微波雷达通过型探测器、测速雷达探测器、声探测器、光探测器、红外探测器、电磁感应探测器和压敏探测器等。应用场合较多的是红外探测器和电磁感应环探测器。它们利用编码调制信号,主要特点是增强抗干扰的能力,具有较强的可靠性。当车辆通过时,前端工控机利用红外线探测到车辆经过的信号时,控制图像采集卡抓拍图像,并对抓拍的汽车图像进行牌照识别,同时控制摄像机光圈的大小,以适应外界环境不同的光照条件。这样就完成了图像的采集过程。
本实验主要软件的研究即对matlab的运用,主要工作是设计软件,对已摄取到的车辆照片进行一系列处理,实现车辆号码牌的识别。 2.3.1 图像预处理及其MATLAB实现
图像在形成、 传输或处理过程中,由于获取图像工具的影响,获取图像无法完全体现原始图像的全部信息。受多种因素的影响,如系统噪声、光学系统失真、曝光不足或过量、相对运动等,往往会与原始景物之间或图像与原始图像之间产生了某种差异,这种差异称为降质或退化。因此要改善图像数据,抑制不需要的变形或者增强。对于后续
3
车牌识别系统设计与实现
处理来说,以提取图像特征为目的的图像预处理在图像处理过程中显得非常重要。 2.3.2 车辆号码牌定位
牌照的定位是牌照识别系统的关键技术之一,其主要目的是在经图象预处理后的原始灰度图象中确定牌照的具体位置。在采集到的图像中车辆号码牌均在自然背景下,在自然背景中准确地确定牌照所在区域是整个识别过程的关键。首先对采集到的图像进行全面搜索,找到符合汽车牌照特征的若干区域作为候选区,然后对这些侯选区域分析、评判,最后选定一个最佳的区域作为牌照区域,并将其从图象中分割出来。车辆定位流程图如图2所示: 输入 图像 图像 预处理 边缘 处理 图2 车牌定位流程图
开闭 运算 车牌 定位 2.3.3车辆号码牌的字符分割
完成车辆号码牌定位后,再将号码牌区域分割成单个字符,然后进行识别。针对车牌字符串的特点,字符分割一般采用垂直投影法。由于字符在垂直方向上的投影必然在字符间或字符内的间隙处取得局部最小值的附近,并且这个位置应满足牌照的字符书写格式、字符、尺寸限制和一些其他条件。利用垂直投影法对复杂环境下的汽车图像中的字符分割有较好的效果。车辆号码牌字符分割流程图如图3所示: 水平投 去掉车 影校正 牌外框 图3 车辆号码牌字符分割流程图
寻找字 符中心 切割 字符 2.3.4 车辆号码牌的识别
目前用于车牌字符识别中的算法主要有两种,分别是基于模板匹配的字符识别算法以及基于人工神经网络的字符识别算法。基于模板匹配的字符识别的基本过程是:首先对待识别字符进行二值化并将其尺寸大小缩放为字符数据库中模板的大小;然后与所有的模板进行匹配;最后选最佳匹配作为结果。用人工神经网络字符识别进行字符识别主要有两种方法:一种方法是先对待识别字符进行特征提取,然后用所获得的特征来训练神经网络分类器。识别效果与字符特征的提取有关,而字符特征提取往往比较耗时。因此,字符特征的提取就成为研究的关键。另一种方法则充分利用神经网络的特点,直接把待处理图像输入网络,由网络自动实现特征提取直至识别。实际应用中,牌照识别系统的识别率与牌照质量和拍摄质量密切相关。牌照质量会受到各种自然因素的影响,如
4
车牌识别系统设计与实现
字体褪色、牌照被遮挡、牌照倾斜、高亮反光、多牌照、假牌照等等;实际拍摄过程也会受到环境亮度、拍摄亮度、车辆速度等等因素的影响。这些影响因素降低了牌照识别的识别率,也正是牌照识别系统的困难和挑战所在。在本次设计中我们选用的方法就是基于模板匹配的字符识别的方法,这种方法虽然工作量较大,但是本方法相对而言容易实现。
3 图像预处理及其MATLAB实现
利用摄像头拍摄到的车辆图像往往存在很多噪点,因此在进行识别前要进行车辆图像的预处理。常用的图像预处理方法包括图像的灰度变换,图像平滑等处理方法。车辆图像的预处理主要目的是使车辆图像尤其是牌照区域的图像的质量得到改善,同时保留和增强车牌中纹理和颜色的信息,去除可能影响牌照区域纹理和颜色信息的噪点,为牌照定位提供方便。同时图像预处理是整个系统的首个处理过程对以下一系列的处理过程奠定了基础。其流程图如图4所示:
车辆图像读入
灰度校正
提取边缘
平滑处理
图4 图像预处理流程图
3.1 图像的读取
在MATLAB中,使用函数imread来读取图像文件,函数的调用格式如下: imread('filename')
5
车牌识别系统设计与实现
Imread所支持的图像格式有很多,我们在此为大家呈现一些重要的图像格式。 如表1所示[5]:
表1 imread所支持的一些常见图像格式
3.2 图像的灰度化处理
灰度图像即指黑白图像,即只包含亮度信息,不包含色彩信息的图像。真彩色图像都是由三基色R,G,B图像合成后显示的,其原理是自然界中客观存在的任一种颜色都可由3种相互独立的颜色按一定的比例混合而成——R(红),G,(绿),B(蓝)。对于灰度图来说0代表黑,255代表白,1-254的每个值分别代表了介于黑色与白色之间的所有深浅不同的灰色色调。在MATLAB中用函数rgb2gray实现图像灰度化的转换,通过加权法平均法,平均值法,最大值法三种方法,实现彩色图像的灰度化处理[6]。三种算法的计算过程如下:
(1)加权平均值法:按照一定的权值,对R、G、B 的值加权平均,即:
RGB(RRGGBB)/3
其中,R、G、B分别为R、G、B 的权值。
(2)平均值法:使转化后R、G、B 的值为转化前R、G 、B 的平均值 RGB(RGB)/3
(3)最大值法:使转化后R、G、B 的值等于转化前3 个值中最大的一个,即:
(R、G、B) RGBMAXR、G、B去不同的值会得到不同的灰度图。
经过函数的计算我们就可以将读入图片进行灰度化处理,本次设计中所需图片的原图和灰度图如图5和图6所示:
6
车牌识别系统设计与实现
图5 车辆原图
图6 车辆灰度图
3.3 图像的边缘检测及提取
图像的边缘信息是重要的图像信息,图像边缘是指图像局部强度变化最显著的部分,主要存在于目标物体、目标物体与背景、区域与区域(包括不同的色彩)之间,是图像分割、形态分析等图像分析的重要基础,因此边缘检测的方法是图像分析与识别领域中的一个十分引人关注的课题。所谓边缘,是指其周围像素灰度有变化的那些像素的集合。图像中目标的边缘是由灰度不连续性反应的。
7
车牌识别系统设计与实现
边缘检测的主要作用是精确定位边缘和抑制噪点,基本思想是利用边缘增强算子,凸显出图像中的局部边缘,然后再定义像素的“边缘强度”,通过设置门限来提取边缘点集。图像中车辆牌照具有比较显著特征的一块图象区域,其特征是:该图像是近似水平的矩形区域;其字符串都是水平方向排列的;在整体图象中的位置固定。由于牌照图象的这些特点,经过适当的图象变换和处理,其在整幅图像中可以明显地呈现出其边缘。以达到边缘提取的目的。
MATLAB图像处理工具箱也专门提供了边缘检测的函数,即edge函数。edge函数支持5中边缘检测算子,它们分别是Roberts 边缘算子、Prewitt 算子、Sobel 算子、拉普拉斯高斯算子、Canny算子,此外还有过零点算子方法。Prewitt算子和Sobel算子都是一阶的微分算子,前者是平均滤波,后者是加权平均滤波且检测的图像边缘大于2个像素。这两种算子对灰度逐渐变低的图像有较好的检测效果,但是对于混合多复杂噪声的图像处理效果就不理想[7]。
本次实验中采用Roberts 边缘算子,因为Robert算子定位较精确,但由于不包括平滑处理,所以对噪声比较敏感。经过Roberts 边缘算子检测的图像如图7所示:
3.4 图像的平滑处理
图7 边缘检测后图像
图像的平滑处理属于空间域滤波增强的手段,在图像的获取和传输过程中原始图像会受到各种噪声的干扰,使图像质量下降。为了抑制噪声、改善图像质量,要对图像进行平滑处理。抑制或消除这些噪声而改善图像质量的过程称为图像的平滑。图像平滑的目的是为了消除噪声。一般情况下,减少噪声的方法可以在空间域或频率域进行处理,主要有邻域平均法、中值滤波法、低通滤波法等,邻域平均法即通过提高信噪比,取得较好的平滑效果;空间域低通滤波采用低通滤波的方法去除噪声;以及频域低通滤波法通过除去其高频分量就能去掉噪声,从而使图像得到平滑。图像的平滑是一种实用的数
8
车牌识别系统设计与实现
字图像处理技术,一个较好的平滑处理方法应该既能消除图像噪声,又不使图像边缘轮廓和线条变模糊,这就是研究数字图像平滑处理要追求的目标[8]。
车牌图像往往存在一些噪点。在汽车牌照图像处理初期,若不能有效抑制或者去除这些噪点,将影响车牌定位的准确性或者造成无法定位。在本次设计中我们使用MATLAB软件中的imclose函数对图像进行平滑处理,其主要作用是对图像实现闭运算,闭运算也能平滑图像的轮廓,但与开运算相反,它一般融合窄的缺口和细长的弯口,去掉小洞,填补轮廓上的缝隙。对图像进行平滑处理后的图形如图8所示:
图8 平滑处理后图像
除此之外,图像平滑处理后,可能会有多个闭合区域,对于不是车牌区域的必须予以删除,在图像预处理中还需要用到imerode函数和bwareaopen函数分别对图像进行腐蚀处理和删除小对象处理,其主要是对图像进行更加细腻的处理,为后面的车牌定位、字符分割等功能的实现做好前期铺垫[15]。
对图像进行腐蚀处理和删除小对象处理后的图像如图9所示:
图9 腐蚀处理后图像
9
车牌识别系统设计与实现
对图像进行腐蚀处理和删除小对象处理后的图像如图10所示:
图10 移除小对象处理后图像
4 车辆号码牌定位
车牌定位:从预处理后的汽车图像中分割出车牌图像。即在一幅车辆图像中找到车牌所在的位置。即通过运算得到图像的边缘,然后计算边缘图像的投影面积,大概确定车牌的位置,再计算图像连通域的宽高比,删除不在阈值范围内的连通域,最后得到车牌区域。进而对车辆号码牌进行定位。
目前已有不少学者在这方面进行了研究。总结起来主要有如下几类方法[9]: (1) 基于车牌颜色特征的定位方法,这种方法主要是应用车牌的纹理特征、形状特征和颜色特征即利用车牌字符和车牌底色具有明显的反差特征来排除干扰进行车牌的定位。
(2) 基于变换域的车牌定位方法,这种方法是将图像从空域变换到频域进行分析,例如采用小波变换等。
(3) 基于水平灰度变化特征的方法,这种方法主要在车牌定位以前,需要对图像进行一系列预处理,将彩色图像转换为灰度图像,利用车牌区域水平方向的纹理特征进行车牌定位。
(4) 基于Hough 变换的车牌定位方法,这种方法是利用车牌边框的几何特征,采取寻找车牌边框直线的方法进行车牌定位。
以上这些方法各有优缺点,要实现快速、准确地定位车牌,应该综合利用车牌的各种特征,仅靠单一特征很难奏效。本文结合车牌纹颜色与数学形态学两方面的特征对车牌进行定位,对于提高车牌定位准确率提供更有利的保障。
4.1 车辆号码牌的区域分割
针对我国车牌的特点,识别难度较大,我国车牌主要特点有以下方面:
10
车牌识别系统设计与实现
(1)我国汽车牌照的规范悬挂位置不唯一。
(2)我国标准汽车牌照是由汉字、英文字母和阿拉伯数字组成,汉字识别与字母和数字的识别有很大的区别,汉字的识别增加了识别的难度;
(3)由于环境、道路或人为因素等造成的汽车牌照严重污染,在国外发达国家这种情况是不允许上路的,而在我国则仍可在路上行驶。
(4)其他国家的汽车牌照格式(如汽车牌照的尺寸大小,牌照上字符的排列等)通常只有一种,而我国则根据不同车辆、车型、用途规定了多种牌照格式(例如分为普通车、使馆车、警车、军车等),并且通常汽车牌照中也分大车和小车。此外,汽车车牌附近还可能挂有其他广告信息牌或者汽车生产商的标志。
以上这些车辆号码牌的特点都为我国车牌的识别带来不利因素。怎样能够克服这些不利因素快速准确的对车辆号码牌进行识别仍是我们现在需要研究的问题。
图像区域分割含义是的根据图像的组成结构和应用需求将图像划分为若干个互不相交的子区域的过程。这些子区域四某种意义下具有共同属性的像素的连通集合。对车牌的分割方法多种多样,本次设计中利用车牌的彩色信息进行彩色分割方法。依据车牌底色有关的知识,采用彩色像素点统计的方法分割出合理的车牌区域,确定车牌底色蓝色RGB对应的各自灰度范围,然后行方向统计在此颜色范围内的像素点数量,设定合理的阈值,确定车牌在行方向的合理区域。然后,在分割出的行区域内,统计列方向蓝色像素点的数量,最终确定完整的车牌区域。
车牌区域图像如图11所示:
图11 车牌区域分割后图像
4.2车牌号码的初定位
牌照的定位与分割是车辆号码牌识别系统的重要技术之一,其主要目的是在经过预处理后的图象中确定牌照的位置,并将包含牌照的一块图象区域从整个图象中分割出来,为后边的字符识别提供准备,分割牌照区域的准确与否直接关系到整个识别系统的
11
车牌识别系统设计与实现
准确性。牌照所在区域在原始图象中是很有特征的一块区域,它是水平度较高的横向近似的长方形,它在原始图象中的相对位置比较明显 ,且其灰度值与周边区域的灰度值有明显不同,因此在其周边形成了灰度突变的边界,这样就便于通过边缘检测来对图象进行分割。车牌定位分割流程图如图12所示:
图12 车牌定位分割流程图
图像
腐蚀处理 去除
杂质 计算寻找
车牌区域 车牌
定位 车牌 分割并处理
4.2.1 图像二值化的基本原理
将256个亮度等级的灰度图像通过适当的阈值选取而获得仍然可以反映图像整体和局部特征的二值化图像。在数字图像处理中,二值图像占有非常重要的地位,首先,图像的二值化有利于图像的进一步处理,使图像变得简单,而且数据量减小,能凸显出感兴趣的目标的轮廓。其次,要进行二值图像的处理与分析,首先要把灰度图像二值化,得到二值化图像。所有灰度大于或等于阈值的像素被判定为属于特定物体,其灰度值为255表示,否则这些像素点被排除在物体区域以外,灰度值为0,表示背景或者例外的物体区域[10]。
12
车牌识别系统设计与实现
图像的二值化处理就是将图像上的点的灰度置为0或255,也就是讲整个图像呈现出明显的黑白效果。即将256个亮度等级的灰度图像通过适当的阀值选取而获得仍然可以反映图像整体和局部特征的二值化图像。在数字图像处理中,二值图像占有非常重要的地位,特别是在实用的图像处理中,以二值图像处理实现而构成的系统是很多的,要进行二值图像的处理与分析,首先要把灰度图像二值化,得到二值化图像,这样子有利于再对图像做进一步处理时,图像的集合性质只与像素值为0或255的点的位置有关,不再涉及像素的多级值,使处理变得简单,而且数据的处理和压缩量小。为了得到理想的二值图像,一般采用封闭、连通的边界定义不交叠的区域。所有灰度大于或等于阀值的像素被判定为属于特定物体,其灰度值为255表示,否则这些像素点被排除在物体区域以外,灰度值为0,表示背景或者例外的物体区域。如果某特定物体在内部有均匀一致的灰度值,并且其处在一个具有其他等级灰度值的均匀背景下,使用阀值法就可以得到比较的分割效果。如果物体同背景的差别表现不在灰度值上(比如纹理不同),可以将这个差别特征转换为灰度的差别,然后利用阀值选取技术来分割该图像[11]。 4.2.2 车辆号码牌的二值化
车牌号码牌的二值化最常用的方法就是设定一个阈值T,用T将图像的数据分成两部分:即大于T的像素群和小于T的像素群,这就是对图像二值化。图像中对象物的形状特征的主要信息,常常可以从二值图像中得到。因此,在车牌字符切分前,首先对图像进行二值化处理。 均值滤波是典型的线性滤波算法,它是指在图像上对目标像素给一个模板,该模板包括了其周围的临近像素。再用模板中的全体像素的平均值来代替原来像素值。经过以上方法即完成了车辆号码牌的二值化[12]。
车牌定位分割后需要对图像进行处理,以便字符分割的顺利完成,首先对车牌区域进行灰度处理。对车牌的灰度处理图像如图13所示:
图13 车牌灰度图像
灰度处理完成后需要对车牌区域进行二值化处理,二值化处理的基本原理上文已经
13
车牌识别系统设计与实现
讲述。二值化处理后车牌区域图像如图14所示:
图14 车牌二值化图像
二值化处理完成后,然后对图像进行均值滤波处理,均值滤波处理后的图像如图15所示:
图15 均值滤波后图像
最后还需要对图像进行膨胀或腐蚀处理,膨胀或腐蚀处理后车牌区域的图像如图16所示:
图16 膨胀腐蚀处理后图像
以上步骤完成后车牌定位及分割过程结束,这一系列的处理为完成字符分割奠定了良好的基础,同时也使得本次设计顺利进行。
14
车牌识别系统设计与实现
5 车辆号码牌的字符分割
在定位出车牌区域后,就要对车牌进行字符分割,针对车牌字符串的特点提出了一种新的车牌字符分割算法。即基于改进的扫描线算法确定字符串上下边界,利用全局分割和局部调整的技术实现单个字符的分割。
5.1字符分割
字符分割的任务是把多行或多字符图像中的每个字符从整个图像中分割出来,成为单个字符。由于字符字体存在着多样性,所以在一般的字符识别系统中,字符识别之前要先对图像进行阈值化,然后再进行行字切分,以分割出一个个具体的二值表示的字符图像点阵,作为单字符识别的输入数据。由于获得的文本图像不但包含了组成文本的一个个字符,而且包含了字符行间距与字间的空白,甚至还会带有各种标点符号,这就需要采用一定的处理技术将文本中的一个个字符切分出来,形成单个字的图像阵列,以进行单字识别处理。这就需要两个步骤来完成,行切分和字切分。首先由行切分得到一行行文本,然后在每行文本中进行列切分得到一个个单独的字符。本次设计中主要用到字切分技术[13]。
字符分割流程图如图17所示:
图17 字符分割与归一化流程图
排查白色像素点 去除图像两边多余部分
切割去除图形 上下多余部分
依据阈值切割 分离出七个字符
对切割的字符 进行归一化 字切分是从切分出的文本图像行中将单个的字符图像切分出来。字切分的正确与否
15
车牌识别系统设计与实现
直接影响识别结果,是字符识别系统中比较难的部分。我们还是以单个的汉字切分为例来说明。可以借助汉字图像行切分的思想,来确定字切分的主要方法:利用字与字之间的空白间隙在图像行垂直投影上形成的空白间隔将单个的字符图像切分出来。事实上,分析图像行的垂直投影可以发现,垂直投影上的空白间隔部分不仅没有行与行之间的空白间隔部分宽,而且分布也不均匀。是因为在汉字文本中一般汉字间距远不如行间距明显,同时汉字中有相当数量汉字是左、右结构或左、中、右结构的,这些汉字图像的垂直投影在一个单字的内部也会出现空白间隙,使得文本汉字的字切分比行切分困难。为了解决这个问题,可以利用汉字间的间隔一般大于汉字内间隔这一特点先进行汉字的粗切分,再根据汉字基本是个方块图形这一事实进行细切分。具体实现为:根据汉字的行切分,可以获得汉字的高度信息,从而可以估计出汉字的基本宽度;对粗切分出的每个汉字,以此宽度信息进行衡量,以粗切分的起始位置为出发点,向左右两方向进行搜索,对起始位置进行细微的调整,从而使得字的切分更准确。
5.2 字符归一化
分割出来的字符要进行进一步的处理,满足字符识别的需要。但是对于车牌的识别,并不需要太多的处理过程就已经可以达到正确识别的目的。在此只进行了归一化处理,然后进行后期处理。即可以进行字符识别[14]。
车牌字符分割后的图像如图18所示:
图18 字符分割与归一化后的图像
16
车牌识别系统设计与实现
结束语
本文按照设计要求完成了基于matlab的车辆号码牌系统的设计。该系统以matlab为平台,完成了对车辆和车牌的识别。
本文对车牌识别系统的软件部分进行了研究,从图像预处理、车牌定位、字符分割以及字符识别等方面进行了系统的分析。主要工作内容及结论如下:
(1)整理和总结了国内外在车牌定位、分割、字符识别方面的研究成果和发展方向。
(2)在车牌定位我们采用基于灰度跳变的定位方法,采用先对图像进行预处理,再进行二值化操作的方法。实验表明本方法既保留了车牌区域的信息,又减少了噪声的干扰,从而简化了二值化处理过程,提高了后续处理的速度。
它在车辆过路、交通流量控制指标的测量,车辆自动识别,不停车检查,汽车防盗,稽查和追踪车辆违规、违法行为,维护交通安全和城市治安,防止交通堵塞,提高收费路桥的服务速度,缓解交通紧张状况等方面有重要作用,有重要的现实应用意义。
通过本次设计加深了自己对MATLAB软件图像处理功能的理解和运用,能够运用其功能对图片进行一些简单的处理工作。对今后的学习和工作有很大帮助。
17
车牌识别系统设计与实现
参考文献
[1] 赵丹,丁金华.基于Matlab的车牌识别[J].大连:大连大连理工学报,2008,14(4):44-48 [2] 冀小平.基于Matlab的车牌识别系统研究[J].北京:电子设计工程,2009,11(3):18-21 [3] 徐辉.基于Matlan实现汽车车牌自动识别系统[M]. 北京:国防工业出版社,2010.6 [4] 王爱玲,叶明生等.MATLAB R2007图像处理技术与应用[M].北京:电子工业出版社,2008.1 [5] 张德丰.MATLAB模糊系统设计[M].北京:国防工业出版社,2009.2 [6] 叶晨洲.车辆牌照字符识别[J].上海交通大学学报,2000:4-6
[7] ZhiWei.Yuan, PanXiaoLou. Vehicle license plate location algorithm [J]. Journal of kunming university of science and technology, 2001, 26 (2)
[8] 贺兴华,周媛媛,王继阳等.MATLAB 图像处理[M].北京:人民邮电出版社,2006:96-100 [9] 刘佐濂 , 邓荣标 , 孔嘉圆.中国科技信息 [J].北京:中国科技报,2005,(23):9-12.
[10] 张禹,马驷良,韩笑.车牌识别中的图像提取及分割算法[J].吉林大学学报,2006,44(3):407-410 [11] 霍宏涛.数字图像处理[M].北京:机械工业出版社,2003.5
[12] 许志影,李晋平.MATLAB极其在图像处理中的应用[J].计算机与现代化,2004,(4):20-28 [13] 雷英杰. MATLAB遗传算法工具箱及应用[M].西安:西安电子科技大学出版社,2005. [14] 张强,王正林.精通MATLAB图像处理[M].北京:电子工业出版社,2009.
[15] D. S. Kim and S. I. Chien,. Automatic car license plate extraction using modified generalized symmety transform and image warp ing[ J ]. in Proc. IEEE Int. Symp. Industrial Elec2tronics, vol. 3, 2001, pp. 2 022 - 2027
18
车牌识别系统设计与实现
附录
程序源代码:
I=imread('C:\\Documents and Settings\\Administrator桌面\\1.jpg');
figure(1),imshow(I);title('原图'); I1=rgb2gray(I);
figure(2),subplot(1,2,1),imshow(I1);title('灰度图'); I2=edge(I1,'robert',0.12,'both');
figure(3),imshow(I2);title('robert算子边缘检测'); se=[1;1;1];
I3=imerode(I2,se);
figure(4),imshow(I3);title('腐蚀后图像'); se=strel('rectangle',[25,25]); I4=imclose(I3,se);
figure(5),imshow(I4);title('平滑图像的轮廓'); I5=bwareaopen(I4,2000);
figure(6),imshow(I5);title('从对象中移除小对象') [y,x,z]=size(I5); myI=double(I5); tic
Blue_y=zeros(y,1); for i=1:y for j=1:x
if(myI(i,j,1)==1)
Blue_y(i,1)= Blue_y(i,1)+1;%蓝色像素点统计 end end end
[temp MaxY]=max(Blue_y);%Y方向车牌区域确定 PY1=MaxY;
while ((Blue_y(PY1,1)>=5)&&(PY1>1)) PY1=PY1-1; end PY2=MaxY;
while ((Blue_y(PY2,1)>=5)&&(PY2 车牌识别系统设计与实现 end IY=I(PY1:PY2,:,:); %%%%%% X方向 %%%%%%%%% Blue_x=zeros(1,x);%进一步确定x方向的车牌区域 for j=1:x for i=PY1:PY2 if(myI(i,j,1)==1) Blue_x(1,j)= Blue_x(1,j)+1; end end end PX1=1; while ((Blue_x(1,PX1)<3)&&(PX1 PX1=PX1-1;%对车牌区域的校正 PX2=PX2+1; dw=I(PY1:PY2-8,PX1:PX2,:); t=toc; figure(7),subplot(1,2,1),imshow(IY),title('行方向合理区域'); figure(7),subplot(1,2,2),imshow(dw),title('定位剪切后的彩色车牌图像') imwrite(dw,'dw.jpg'); a=imread('dw.jpg'); b=rgb2gray(a); imwrite(b,'1.车牌灰度图像.jpg'); figure(8);subplot(3,2,1),imshow(b),title('1.车牌灰度图像') g_max=double(max(max(b))); g_min=double(min(min(b))); T=round(g_max-(g_max-g_min)/3); % T 为二值化的阈值 [m,n]=size(b); d=(double(b)>=T); % d:二值图像 imwrite(d,'2.车牌二值图像.jpg'); figure(8);subplot(3,2,2),imshow(d),title('2.车牌二值图像') 20 车牌识别系统设计与实现 figure(8),subplot(3,2,3),imshow(d),title('3.均值滤波前') % 滤波 h=fspecial('average',3); d=im2bw(round(filter2(h,d))); imwrite(d,'4.均值滤波后.jpg'); figure(8),subplot(3,2,4),imshow(d),title('4.均值滤波后') % 某些图像进行操作 % 膨胀或腐蚀 % se=strel('square',3); % 使用一个3X3的正方形结果元素对象对创建的图像进行膨胀 % 'line'/'diamond'/'ball'... se=eye(2); % eye(n) returns the n-by-n identity matrix 单位矩阵 [m,n]=size(d); if bwarea(d)/m/n>=0.365 d=imerode(d,se); elseif bwarea(d)/m/n<=0.235 d=imdilate(d,se); end imwrite(d,'5.膨胀或腐蚀处理后.jpg'); figure(8),subplot(3,2,5),imshow(d),title('5.膨胀或腐蚀处理后') % 寻找连续有文字的块,若长度大于某阈值,则认为该块有两个字符组成,需要分割 d=qiege(d); [m,n]=size(d); figure,subplot(2,1,1),imshow(d),title(n) k1=1;k2=1;s=sum(d);j=1; while j~=n while s(j)==0 j=j+1; end k1=j; while s(j)~=0 && j<=n-1 j=j+1; end k2=j-1; if k2-k1>=round(n/6.5) [val,num]=min(sum(d(:,[k1+5:k2-5]))); 21 车牌识别系统设计与实现 d(:,k1+num+5)=0; % 分割 end end % 再切割 d=qiege(d); % 切割出 7 个字符 y1=10;y2=0.25;flag=0;word1=[]; while flag==0 [m,n]=size(d); left=1;wide=0; while sum(d(:,wide+1))~=0 wide=wide+1; end if wide temp=qiege(imcrop(d,[1 1 wide m])); [m,n]=size(temp); all=sum(sum(temp)); two_thirds=sum(sum(temp([round(m/3):2*round(m/3)],:))); if two_thirds/all>y2 flag=1;word1=temp; % WORD 1 end d(:,[1:wide])=0;d=qiege(d); end end % 分割出第二个字符 [word2,d]=getword(d); % 分割出第三个字符 [word3,d]=getword(d); % 分割出第四个字符 [word4,d]=getword(d); % 分割出第五个字符 [word5,d]=getword(d); % 分割出第六个字符 [word6,d]=getword(d); 22 车牌识别系统设计与实现 % 分割出第七个字符 [word7,d]=getword(d); subplot(5,7,1),imshow(word1),title('1'); subplot(5,7,2),imshow(word2),title('2'); subplot(5,7,3),imshow(word3),title('3'); subplot(5,7,4),imshow(word4),title('4'); subplot(5,7,5),imshow(word5),title('5'); subplot(5,7,6),imshow(word6),title('6'); subplot(5,7,7),imshow(word7),title('7'); [m,n]=size(word1); % 商用系统程序中归一化大小为 40*20,此处演示 word1=imresize(word1,[40 20]); word2=imresize(word2,[40 20]); word3=imresize(word3,[40 20]); word4=imresize(word4,[40 20]); word5=imresize(word5,[40 20]); word6=imresize(word6,[40 20]); word7=imresize(word7,[40 20]); subplot(5,7,15),imshow(word1),title('1'); subplot(5,7,16),imshow(word2),title('2'); subplot(5,7,17),imshow(word3),title('3'); subplot(5,7,18),imshow(word4),title('4'); subplot(5,7,19),imshow(word5),title('5'); subplot(5,7,20),imshow(word6),title('6'); subplot(5,7,21),imshow(word7),title('7'); imwrite(word1,'1.jpg'); imwrite(word2,'2.jpg'); imwrite(word3,'3.jpg'); imwrite(word4,'4.jpg'); imwrite(word5,'5.jpg'); imwrite(word6,'6.jpg'); imwrite(word7,'7.jpg'); liccode=char(['0':'9' 'A':'Z' '苏豫陕鲁']); %建立自动识别字符代码表 SubBw2=zeros(40,20); l=1; for I=1:7 ii=int2str(I); t=imread([ii,'.jpg']); 23 车牌识别系统设计与实现 SegBw2=imresize(t,[40 20],'nearest'); if l==1 %第一位汉字识别 kmin=37; kmax=40; elseif l==2 %第二位 A~Z 字母识别 kmin=11; kmax=36; else l>=3 %第三位以后是字母或数字识别 kmin=1; kmax=36; end for k2=kmin:kmax fname=strcat('字符模板\\',liccode(k2),'.jpg'); SamBw2 = imread(fname); for i=1:40 for j=1:20 SubBw2(i,j)=SegBw2(i,j)-SamBw2(i,j); end end % 以上相当于两幅图相减得到第三幅图 Dmax=0; for k1=1:40 for l1=1:20 if ( SubBw2(k1,l1) > 0 | SubBw2(k1,l1) <0 ) Dmax=Dmax+1; end end end Error(k2)=Dmax; end Error1=Error(kmin:kmax); MinError=min(Error1); findc=find(Error1==MinError); Code(l*2-1)=liccode(findc(1)+kmin-1); Code(l*2)=' '; l=l+1; end figure(10),imshow(dw);title (['车牌号码:', Code],'Color','b'); 24 车牌识别系统设计与实现 function [word,result]=getword(d) word=[];flag=0;y1=8;y2=0.5; while flag==0 [m,n]=size(d); wide=0; while sum(d(:,wide+1))~=0 && wide<=n-2 wide=wide+1; end temp=qiege(imcrop(d,[1 1 wide m])); [m1,n1]=size(temp); if wide d=qiege(d); % 切割出最小范围 else word=[];flag=1; end else word=qiege(imcrop(d,[1 1 wide m])); d(:,[1:wide])=0; if sum(sum(d))~=0; d=qiege(d);flag=1; else d=[]; end end end %end result=d; function e=qiege(d) [m,n]=size(d); top=1;bottom=m;left=1;right=n; % init while sum(d(top,:))==0 && top<=m top=top+1; end while sum(d(bottom,:))==0 && bottom>=1 bottom=bottom-1; end while sum(d(:,left))==0 && left<=n left=left+1; end 25 车牌识别系统设计与实现 while sum(d(:,right))==0 && right>=1 right=right-1; end dd=right-left; hh=bottom-top; e=imcrop(d,[left top dd hh]); 26 车牌识别系统设计与实现 致谢 两年的大学生活已经接近尾声,我的毕业设计也终于顺利的完成了,在这里我首先向我的指导老师卢老师表示我最诚挚的感谢,同时也感谢那些帮助过我的老师和同学。正是有了这些老师和同学的帮助才使我取得了现在的成果。 本设计是在我的导师卢峥老师的细心指导下进行的。每当遇到问题时卢老师总是不辞辛苦的为我讲解。从设计的选题到资料的搜集直至最后设计的修改的整个过程中,花费了卢老师大量的宝贵时间和精力。同时他严肃的科学态度,严谨的治学精神,精益求精的工作作风,深深地感染和激励着我,使我不断前行。在此谨向卢老师致以诚挚的谢意和崇高的敬意!同时也感谢两年来帮助我不断成长的老师同学,是你们让我找到了奋斗的方向,人生的坐标,谨此表示我最真挚的感谢! 最后,我还要特别感谢支持和鼓励我的同学们,正是由于你们的帮助和支持,才给了我坚持下去的勇气,我才能克服一个一个的困难和疑惑,直至本文的顺利完成。 27 因篇幅问题不能全部显示,请点此查看更多更全内容