基于MATLAB的车牌识别研究 - 图文 下载本文

车牌识别技术研究

摘要:车牌识别是现代智能交通系统中的重要组成部分之一,应用十分的广泛。它以数字图像处理、模式识别、计算机视觉等技术基础,对摄像机所拍摄的车辆图像进行分析,得到每一辆汽车唯一的车牌号码,从而完成识别过程,它对汽车防盗、缓解交通紧张等起到了积极的作用。本文主要介绍了有关于车牌识别技术的原理,以及基于MATLAB的车牌识别的设计,对一张车辆图片进行一系列的预处理(灰度化、边缘检测、腐蚀、填充、形态滤波)之后,将车牌中的字符分割出来,最后将分割出的字符与数据库中存储的字符进行模板匹配。通过以上的步骤的实现,该系统便能完成牌照图像的定位分割和牌照字符的自动识别。

关键词:MATLAB;图像预处理;车牌定位;字符分割;字符识别

License plate recognition technology research

Abstract:License plate recognition is one of the modern intelligent transportation system is an important part of a wide range of applications. It is technology-based digital image processing, pattern recognition, computer vision, vehicle camera captured images were analyzed, only every car license plate number, thus completing the identification process, its car security, relieve stress and other traffic from to a positive role. This paper introduces the principle of license plate recognition technology and design based on MATLAB license plate recognition, for a series of vehicle image preprocessing (gray, edge detection, corrosion, fill, morphological filtering) after the license plate characters split up, and finally split the data stored in the character and the character template matching. By implementing the above steps, the system will be able to complete the positioning of the vehicle license plate image segmentation and automatic license plate character recognition.

Key words:MATLAB;image preprocessing; license plate location; character segmentation; character recognition

目 录

1 绪论 .......................................................................1 1.1 研究目的和意义 .........................................................1 1.2 国内外研究现状 .........................................................2 1.3 我国车牌分析 ...........................................................3 1.4 本文章节安排 ...........................................................3 2 数字图像处理概述 ...........................................................5 2.1 图像及其组成要素 .......................................................5 2.2 数字图像及其表示 .......................................................5 2.3 数字图像处理基础 .......................................................6 2.4 MATLAB在数字图像处理中的应用 ...........................................6 3 车牌识别系统的原理及方法 ...................................................8 3.1 车牌识别系统简述 .......................................................8 3.2 车牌图像预处理 .........................................................9 3.2.1 图像灰度化 .........................................................9 3.2.2 边缘检测 ...........................................................9 3.2.3 形态学图像处理 ....................................................10 3.3 车牌定位原理 ..........................................................11 3.4 车牌字符分割 ..........................................................13 3.4.1 字符分割 ..........................................................13 3.4.2 字符归一化处理 ....................................................13 3.5 字符识别 ..............................................................13 3.5.1 字符识别简述 ......................................................13 3.5.2 字符识别分类 ......................................................14 3.5.3 基于模板匹配的字符识别 ............................................14 4 运用MATLAB实现车牌识别 ...................................................17 4.1 车牌图像灰度化 ........................................................17 4.1.1 程序分析 ..........................................................17 4.1.2 结果分析 ..........................................................18 4.2 车牌图像预处理 ........................................................19 4.2.1 程序分析 ..........................................................19

I

4.2.2 结果分析 ..........................................................20 4.3 牌照定位 ..............................................................22 4.3.1 程序分析 ..........................................................22 4.3.2 结果分析 ..........................................................23 4.4 字符分割 ..............................................................24 4.4.1 程序分析 ..........................................................24 4.4.2 结果分析 ..........................................................25 4.5 字符识别 ..............................................................25 4.5.1 程序分析 ..........................................................26 4.5.2 结果分析 ..........................................................27 5 总结 ......................................................................29 附录 ........................................................................30 参考文献 ....................................................................34 致谢 ........................................................................35

II

1 绪论

1.1 研究目的和意义

随着计算机、通信技术、计算机网络技术在人们日常生活中的不断发展和应用,带来了经济的快速发展,社会已经进入了信息化时代,自动处理信息的能力不断提高并在人们生活的各个领域中得到广泛的应用。人们更多地将图像信息的自动检测,自动识别技术运用到生活的方方面面,带来更多的方便。

基于社会经济的飞速发展,汽车已经成为生活中不可缺少的一种交通工具,已经和人们的生活融为一体了,汽车保有量的不断增加,也带来了一系列的问题,比如:交通堵塞严重、交通事故频发、交通污染严重、交通环境恶化和收费制度混乱等。简单的进行人工现场指挥和管理已经不能满足现实的需求,所以智能交通系统地建立是最好的解决方法,智能交通系统就是一项以信息通信技术为基础,使得道路、车辆、使用者三者紧密协调、和谐统一起来而建立起的在大范围内,全方位发挥作用的实时、准确、高效的运输管理系统[1]。

车牌识别技术是智能交通系统的核心,以下几个领域都应用到了车牌识别: (1)停车场管理系统。利用车牌识别技术对出入车辆的号牌进行识别和匹配,与停车卡结合实现自动计时、计费的车辆收费管理系统。

(2)高速公路超速自动化管理系统。以车牌自动识别技术为基础,与其他高科技手段结合,对高速公路交通流状况进行自动监测、自动布控,从而降低交通事故的复发生率,确保交通顺畅。

(3)公路布控。采用车牌识别技术实现对重点车辆的自动识别,快速报警,既可以有效查找被盗车辆,同时又为公安、检察机关提供了对犯罪嫌疑人的交通工具进行远程跟踪与监查的技术手段。

(4)城市十字交通路口的“电子警察”。可以对违章车辆进行责任追究,也可以辅助进行交通流量统计,交通监测和疏导。

(5)小区车辆管理系统。社区保安系统将出入社区的车辆通过车牌识别技术进行记录,将结果与内部车辆列表对比可以实现防盗监管[2]。因此车牌识别问题已经成为现代交通工程领域中的重点和热点问题之一。

1

本次研究主要是理解基于MATLAB的车牌识别的实现方法。本次研究的重点在汽车牌照定位、车牌字符分割以及车牌字符识别技术的实现。

1.2 国内外研究现状

车牌识别技术研究在国外起步比较早,早在20世纪80年代,便有一些零零散散的图像处理方法用于车牌识别的某些具体应用。在这个阶段,车牌识别技术的研究还没有形成完整的系统体系,一般采用简单的图像处理方法来解决某些具体问题,并且最终结果需要人工干预。

进入20世纪90年代后,国外的研究人员就已经开始了对汽车牌照识别的研究。典型的如A.S.Johnson等提出车辆牌照的识别系统分为图像分割、特征提取和模板构造、字符识别等三部分,完成车辆牌照的识别。R.A.Lotufo把获得了的图像使用视觉字符识别技术进行分析,第一步是要在二值化图像中把车牌找到,第二步是用边界跟踪技术把字符特征出来,第三步是比较字符库中的字符和统计最邻近分类器,最后会得出一些候选的车牌号码,再核实和检查这些候选的车牌号码,确定某个候选的车牌号码是否和该车的车牌号码一致,最终就可以确定出该车的车牌号码了。这个时期的车牌识别在识别车牌的正确率上已经远远高于从前了,但是识别实时性的要求还没有考虑到,识别速度有待进一步提高。从80年代中期开始,ARGUS英国Alphatech公司就开始了名为RAUS的车牌识别系统的研制。ARGUS的车牌识别系统的识别时间为100毫秒,通过ARGUS的车速可高达每小时100英里。还有Hi-Tech公司的See/Car system,新加坡Optasia公司的VLPRS等。另外日本、加拿大、德国等发达国家都有适用于本国的车牌识别系统。各国的车牌识别产品虽然不同,但基本上都是基于车辆探测器的系统,设备投资都是相当的巨大。

但是以上的系统都不适用于我国的车牌识别,主要原因包括:我国的车牌缺乏统一的标准、我国车牌悬挂位置不统一、我国汽车牌照中的汉字识别比英语字符和数字字符的识别困难等。我国在20世纪90年代后期以后,随着汽车数量的急剧增加,车牌识别技术应用的范围越来越广,车牌识别技术已成为一个热门的研究课题,人们对其进行了广泛的研究。目前,比较成熟的产品有中科院自动化研究所汉王公司的“汉王眼”,香港亚洲视觉科技有限公司的慧光车牌号码识别系统等。另外西安交通大学的图像处理和识别实验室、上海交通大学的计算机科学和工程系、清华大学人工智能国家重点实验室、浙江大学自动化系等都做过类似的研究[3]。

虽然这些车牌识别系统的识别率大多都比较高,但是这些车牌识别系统的识别检测

2

结果大多数是在简单受限制的场景下取得的,而在实际的交通场合以及更加复杂的背景环境下,这些车牌识别系统的识别率往往很低。所以车牌识别技术将来的发展趋势是能在实际的交通场合以及更加复杂的背景环境的情况下,提高车牌识别系统的识别率。

1.3 我国车牌分析

我国汽车牌照是由车辆管理机关经过申领牌照的汽车进行审核、检验、登记后,核发的带有注册登记编码的硬质号码牌,它们都具有统一的格式、统一的式样。我国车牌号的第一个是汉字:代表该车户口所在省的简称:如川就是成都,粤就是广州,京就是北京,渝就是重庆等,第二个是英文字母:它代表该车所在地的地市一级代码,规律一般是这样的,A是省会,B是该省第二大城市,C是该省第三大城市,依此类推,车牌号的后五位是汽车的编号,一般为5位数字,即从00001~99999,编号超过10万时,就由A、B、C等英文字母代替,即A代表10万,B代表11万,C代表12万,最后一个字母及Z代表33万,英文字母中的O和I避而不用,以免和数字中的0和1混淆。

目前我国所使用的车辆牌照主要分为六大类,

第一类是底色为蓝色字为白色的牌照是小型民用汽车所用的牌照; 第二类是底色为黄色字为黑色的牌照是大型民用汽车所用的牌照;

第三类是底色为白色字为红色的牌照是试车和车临时所用的牌照,而且数字之前分别标有“临时”和“试”字标志;

第四类是底色为白色字为黑色的牌照是汽车补用牌照;

第五类是底色为黑色字为白色的牌照是使馆、领事馆所使用的外籍汽车牌照; 第六类是底色为白色字为红字、黑字的牌照是武警或军队专用汽车的牌照[4]。 本次设计我使用的车辆牌照是蓝底白字的小型民用汽车牌照,它是1992式号牌,共计7个字符,车牌的外轮廓尺寸都是440mm×140mm,字符高90mm,宽45mm,字符间距12mm,间隔符宽10mm,整个字符的高宽比例近似为3:1,车牌的边缘是线段围成的矩形。

1.4 本文章节安排

本文以MATLAB程序为基础,介绍车牌识别技术的原理、方法、结果等内容。 本文第1章主要介绍车牌识别技术的研究目的和意义、车牌识别技术的发展以及对

3

我国车牌的分析。

第2章主要介绍数字图像的组成要素、数字图像的基础以及MATLAB软件在数字图像中的应用。

第3章主要简述了车牌识别技术的原理以及基于MATLAB的车牌识别的实现过程。 第4章主要介绍了基于MATLAB的车牌识别代码以及对仿真结果的分析。 第5章主要是对本次设计和论文的总结。

4

2 数字图像处理概述

2.1 图像及其组成要素

图像是对客观对象的一种相似性的、生动的描述或表示。在其自然的形式下,图像并不能直接由计算机进行分析。

图像按明暗程度和空间坐标的连续性可以分为两大类,分别是数字图像和模拟图像。明暗程度和空间坐标都是连续变化的、计算机无法直接处理的图像是模拟图像。数字图像是一种空间坐标和灰度均不连续的、用离散的数字表示的图像,它的基本组成单元包括像素和灰度,计算机能直接处理的图像是数字图像。因此,数字图像可以理解为图像的数字表示,是空间和时间的非连续函数(信号),是为了便于计算机处理的一种图像表示形式。它是由一系列离散单元经过量化后形成的灰度值的集合,即像素的集合

[5]

图像按波段多少来分,又可以分为单波段、多波段和超波段图像。我们平时常见的

彩色图像是在每个点具有红(R)、绿(G)、蓝(B) 3个亮度值,这3个值表示在不同光波段上的强度,比如:纯红色R值为255,G值为0,B值为0;灰色的R、G、B 3个值相等(除了0和255);白色的R、G、B 都为255;同理黑色的R、G、B 都为0,所以人眼看来就是不同的颜色。

一般情况下只考虑平面、单色、静止图像,此时图像可表示为一个二维函数:

I?f(x,y) (2-1)

2.2 数字图像及其表示

传统意义上的图像是连续的,即式(2-1)中的x、y、f是连续的,表示的物体辐射能量在空间上的连续分布,连续图像也称为模拟图像。

为了便于利用计算机对图像进行进一步的加工和处理,需要把模拟图像在空间上、幅值上进行离散化,将其转换为对应的数字形式,离散化的图像称为数字图像。图像离散化过程包括两种处理:取样和量化。一幅模拟图像的坐标及幅度都是连续的,为了把它转换为数字形式,必须对坐标和幅度都作离散化操作。数字化坐标值称为取样,它确

5

定了图像的空间分辨率;数字化幅度值称为量化,它确定了图像的幅度分辨率。

对于灰度图像,量化是对取样所得的离散样本点上的灰度值进行离散化,将原图像的连续灰度用L?2k(k为整数)个等间距的灰度级进行表示。连续图像被取样和量化后可以用一个M?N矩阵来表示,即

?f(0,0)?f(1,0) f(x,y)??????f(M?1,0)f(0,1)?f(0,N?1)?f(1,1)?f(1,N?1)?? (2-2)

????f(M?1,1)?f(M?1,N?1)?此时等式右边的f(x,y)被称为数字图像,矩阵中的每一个元素称为像素。 2.3 数字图像处理基础

数字图像处理就是利用计算机对各种图像信息进行处理,以期得到某种预期的效果或从图像中提取有用的信息。数字图像处理系统基本由三个部分组成:计算机、图像数字化仪和图像显示设备。数字图像处理的基本过程是由图像数字化器中产生的数字图像先进入一个适当装置的缓存中,然后根据操作员的指令,计算机调用和执行程序库中的图像处理程序。在执行过程中,输入图像被逐行的读入计算机。对图像进行处理后,计算机逐行按像素生成一幅输出图像,并将其逐行送入缓存[6]。

图像数字化仪 图像处理计算机 图2-1 数字图像处理

图像显示设备

2.4 MATLAB在数字图像处理中的应用

MATLAB软件是matrix&laboratory两个词的组合,意为矩阵工厂(矩阵实验室)。

是由美国mathworks公司发布的主要面对科学计算、可视化以及交互式程序设计的高科技计算环境。它将数值分析、矩阵计算、科学数据可视化以及非线性动态系统的建模和仿真等诸多强大功能集成在一个易于使用的视窗环境中,为科学研究、工程设计以及必须进行有效数值计算的众多科学领域提供了一种全面的解决方案,并在很大程度上摆脱了传统非交互式程序设计语言(如C、Fortran)的编辑模式,代表了当今国际科学计算软件的先进水平[7]。

6

MATLAB是一种基于向量(数组)而不是标量的高级语言,因而从本质上就提供了对图像的支持。MATLAB为从事图像处理的工程师和研究人员提供了直观、可靠的一体化开发工具。这些开发工具在医学、公安和国防、遥感遥测、生物技术、显微镜技术、半导体测试、图像传感器设计等图像处理领域得到了广泛的应用[8]。

MATLAB中图像最基本的数据结构是数组。在MATLAB中大多数图像用二维数组double(64位)浮点型、或uint8(8位无符号整数)、uint16(16位无符号整数)存储的,以减少图像的存储量。在默认状态下,MATLAB通常用双精度浮点类型数组存储数据。例如:一个由100行和50列不同灰度值的点组成的图像可以用一个100×50的矩阵来存储。对于彩色图像,如RGB图像,需要用三维矩阵来存储,第一维表示红色像素的深度值,第二维表示绿色像素的深度值,第三维表示蓝色像素的深度值。

MATLAB的图像处理工具箱提供了一整套用于图像处理、分析、可视化和算法开发的工具。用户可根据自身需求对图像进行一系列的处理,其中包括特征提取、分析形状和纹理以及对两幅图像进行匹配等。真彩色图像、索引色图像、灰度图像、二值图像都是MATLAB的图像处理工具箱可以支持图像类型。由于在MATLAB中用到的某些函数对所使用的图像的图像类型有限制,所以这四种图像类型可以相互转换,所用的转换方式是使用MATLAB的图像处理工具箱的类型转换函数。BMP、HDF、JPEG、PCX、TIFF、XWD等格式都是可以在MATLAB中进行操作的图像文件格式[9]。目前MATLAB软件已广泛运用到数字图像处理领域,故本次研究以MATLAB软件为平台实现车牌识别。

7

3 车牌识别系统的原理及方法

3.1 车牌识别系统简述

车牌识别技术是基于计算机图像处理为基础,通过对原始图像的预处理,对车牌进行定位,然后再对字符进行分割,最后对分割出的字符进行识别,再输出识别的结果[10]。车牌识别系统的流程图如图3-1所示

车牌图像采集 车牌图像预处理 对车牌进行定位 输出识别结果 字符识别 对车牌字符进行分割

图3-1 车牌识别系统流程图

汽车牌照识别技术主要包括车牌定位、字符分割、字符识别等。汽车牌照识别的第一步首先要通过图像预处理(边缘检测、腐蚀、填充、滤波)之后正确的从原始图像中分割出车牌区域,其过程是将灰度图像以sobel算子检测边缘;再对边缘图像进行腐蚀,去除掉细的,间断的边缘;对剩下的区域进行闭合以填充图像,此时车牌区域形成了一个大的连通域;在调用bwareaopen函数去掉小的连通域,此时整个二值图像只剩下了车牌区域。在将此车牌区域的点的坐标放入数组location_of_1中,对这些坐标进行计算,寻找x坐标与y坐标之和最大的点a与最小的点b,a即为车牌的左上角,b为车牌的右下角,通过这两个坐标将车牌分割出来[11]。

第二步是将前面车牌里的7个字符分割出来,其过程是从左向右像按列计算每一列之和,没有白点的列和为0,有白点的列和非零,转换为逻辑1,记录下所有列和在0与1转换的列,即为需要切割的列,共有14列,可切出7个字符。切割出单个字符后,放入char_(i)中,并切割掉每个字符的上下的空白区域,完成精确切割。

第三步是对前面分割出的字符进行识别,运用的是模板匹配字符识别算法,这过程是把切割出的字符与库里的汉字和字符的模板做减法运算,找到差别点最少的模板为对应模板,输出该模板对应的字符,最后识别出车牌。

8

3.2 车牌图像预处理 3.2.1 图像灰度化

图像一般可以分为一下的三类。 (1)灰度图像

当一幅图像有灰度级时,通常称该图像为k比特图像。例如,一幅图像有256个可能的灰度级,称其为8比特图像。灰度图像矩阵元素的取值范围通常为[0,255],因此其数据类型一般为8位无符号整数,这就是人们经常提到的256级灰度图像。“0”表示纯黑色,“255”表示纯白色,中间的数字从小到大表示由黑色到白色的过渡色[12]。 (2)二值图像

一幅二值图像的二维矩阵仅由0、1两个值构成,“0”代表黑色,“1”代表白色。由于每一像素的取值仅有0、1两种可能,所以计算机中二值图像的数据类型通常为一个二进制位。二值图像通常用于文字、线条图的扫描识别(OCR)和掩模图像的存储。二值图像可以看成是灰度图像的一个特例。 (3)RGB彩色图像

RGB图像用来表示彩色图像。它分别用红(R)、绿(G)、蓝(B)三原色的组合来表示每个像素的颜色。图像中每一个像素的颜色值(由RGB三原色表示)直接存放在图像矩阵中,由于每一像素的颜色需由R、G、B三个分量来表示,因此RGB图像的图像矩阵与其他类型的图像矩阵不同,是一个三维矩阵,可用M×N×3表示,M、N分别表示图像的行、列数,三个M×N的二维矩阵分别表示各个像素的R、G、B三个颜色分量。RGB图像的数据类型一般为8位无符号整型,通常用于表示和存放真彩色图像,当然也可以存放灰度图像[13]。

通常,通过数码相机拍照所获的图像是彩色图像,在彩色图像里,如果R=G=B,则图像中的颜色都为一种灰度颜色,其中R=G=B的值叫做灰度值,图像的灰度化处理是指图像由彩色转换为灰度的过程,灰度图像中只包含了强度信息,而并没有颜色信息。

3.2.2 边缘检测

所谓边缘,是指其周围像素灰度有变化的那些像素的集合,它是图像分割、目标区域识别、区域形状提取等图像分析领域十分重要的基础,而且在车牌识别系统中提取车

9

牌位置占了很重要的地位。其中边缘检测的算子有很多,如Roberts算子、Sobel算子、Prewitt算子、Zerocross算子、Log算子以及Canny算子。Sobel算子是对图像进行差分和滤波运算,且它对噪声具有一定的抑制能力,所以本设计运用Sobel算子对图像进行边缘检测。

Sobel边缘算子: -1 0 1 -2 0 2 -1 0 1

-1 -2 -1 0 0 0 1 2 1 图3-2 Sobel边缘算子模板

如图3-2所示,两个卷积核形成了Sobel边缘算子。图像中的每个点都用这两个核做卷积。通常,一个核对垂直边缘响应最大,而另一个核则对水平边缘响应最大,两个卷积的最大值作为该点的输出值,运算结果是一幅边缘幅度图像。

对于边缘清晰的图像,Sobel提出一种检测边缘点的算子。对数字图像{f(i,j)}的每一个像素点考察它上、下、左、右相邻点灰度的加权差,与之接近的邻点权重大。据此,定义的Sobel算子表示为

S(i,j)?|[f(i?1,j?1)?2f(i?1,j)?f(i?1,j?1)]?[f(i?1,j?1)?2f(i?1,j)?f(i?1,j?1)]|?|[f(i?1,j?1)?2f(i,j?1)?f(i?1,j?1)]?[f(i?1,j?1)?2f(i,j?1)?f(i?1,j?1)]| (3-1)

适当取阀值T,做如下判断:若S(i,j)?T,则(i,j)点为边缘点,所有边缘点的集合

{S(i,j)},为边缘图像[14]。

3.2.3 形态学图像处理

数学形态学以形态为基础对图像进行分析,其基本思想是用具有一定形态的结构元素去度量和提取图像中的对应形状以达到对图像分析和识别的目的。数学形态学的基本运算有4个:膨胀(或扩张)、腐蚀(或侵蚀)、开启和闭合[15]。

膨胀运算符号为?,假设A为图像集合,用B为结构元素来对A进行膨胀,则记作A?B,定义为:

10

?)?A??} (3-2) A?B?{x|[(Bx?表示B的映像,即与B关于原点对称的集合。上式表明,用B对A进行膨其中B胀的运算过程如下:首先作B关于原点的映射,再将其映像平移x,当A与B映像的交集不为空时,B的原点就是膨胀集合的像素。膨胀运算会使图像的区域进行扩张。

腐蚀的运算符号为?,A用B来腐蚀记作A?B错误!未找到引用源。,其定义为:

A?B??x|(B)x?A? (3-3)

上式表明,腐蚀的过程为结构元素B平移x后,结构元素B仍在集合A中的参考点的集合。腐蚀运算会使图像的区域进行收缩。

使用同一结构元素对图像先进行膨胀运算,然后对结果进行腐蚀运算的运算方法成为闭运算,闭运算的符号为?。A用B的闭运算记作A?B,其定义为:

A?B?(A?B)?B (3-4)

闭运算可以平滑图像的轮廓,它一般用来填充目标内的细小空洞和裂缝、连接断开的临近目标。

采集数字图像过程中通常会会受到多种噪声的污染。另外,如果在过程中产生污染则会将要处理的图像上表现出一些较强的视觉效果孤立像素点和像素块。一般情况下,这些噪声在研究对象中一般都是无用的信息,而且还会对研究对象造成干扰,极大降低了图像质量,影响图像分割、图像识别等后继工作的进行。为了有效的去除这些噪声,并且有效的保存研究对象的图像形状、大小及特定的几何和拓扑结构特征,我们就要采取滤波。滤波,即在尽量保留图像细节特征的条件下对目标图像的噪声进行抑制,是图像预处理中不可缺少的操作,其处理效果的好坏将直接响到后续图像处理和分析的有效性和可靠性。

3.3 车牌定位原理

我们已经对车牌在图像中的位置作了初步的定位,移除小对象后的二值图像中白色区域基本就是车牌的位置了。二值图像是指整幅图像画面内仅黑、白二值的图像,每一个像素取两个离散数值(0或1),其中0代表黑色,1代表白色。灰度图像二值化在图像处理的过程中有着很重要的作用,他不仅能使数据量再一次变小,而且还能突出需要的目标轮廓,从而进行图像的处理与分析。所谓的二值化处理就是将车牌图像上的像素点的灰度值设置为0或255,从而让整张图片变成黑白的效果,将灰

11

度图片通过适当的阈值选取,从而将能在灰度图像获取可以反映图像特征的二值化图像。在图像处理中灰度大于或等于阀值的像素被判定为属于特定物体,其灰度值为255表示,否则这些像素点被排除在物体区域以外,灰度值为0,表示背景或者例外的物体区域在实际的图像处理系统中,进行图像二值变换的关键是要确定合适的阈值,使得字符与背景能够分割开来。不同的阈值设定方法对一幅图像进行处理会产生不同的二值化处理结果。二值化阈值设置过小易产生噪声;阈值设置过大会降低分辨率,使非噪声信号被视为噪声而滤掉二值变换的结果[16]。

车牌识别的下一步是分割出具体的车牌,具体过程首先是将二值图像中所有白色的点的坐标放入数组location_of_1中,对这些坐标进行计算,寻找x坐标与y坐标之和最大的点a与最小的点b,a即为车牌的左上角,b为车牌的右下角。通过这两个坐标将车牌分割出来,最后在对分割出的车牌进行二值化处理。

二值化的处理过程是通过阈值化对图像进行处理的[17]。

设有图像f(x,y),其灰度级范围为??z0,zk??,T是z0和zk之间的任意一个数。则设置阈值为T的结果可以得到一幅二值图像fT?x,y?,它由

??0,fT(x,y)????1,f(x,y)?T (3-5)

f(x,y)?T或者是

fT(x,y)????0,f(x,y?)T??1,f(x,y?)T (3-6)

定义。也可以选择双阈值,把所需灰度级范围内的像素变为1,而把此范围外的像数变为0,即

?1,T1?f(x,y)?T2 (3-7) f(T1,T2)(x,y)???其他??0,或者

??0,T1?f(x,y)?T2 f(T,T)(x,y)?? (3-8)

12其他??1,更为一般地,如果Z是一个任意的灰度级的集合,Z?[zl,zk],就可以定义一种广义的“阈值化”运算,它把放在Z中的灰度级变为1,把不在Z中的灰度级变为0,即

12

?1,fZ(x,y)?????0,3.4 车牌字符分割 3.4.1 字符分割

f(x,y)?Z (3-9)

其他在汽车牌照识别过程中,字符分割有承前启后的作用。它在前期牌照定位的基础上进行字符的分割,然后再利用分割的结果进行字符识别。车牌字符分割是对二值图像从左向右按列计算每一列之和,没有白点的列和为0,有白点的列和为非零,转换为逻辑1,记录下所有列和在0与1转换的列,即为需要切割的列,共有14列,可切出7个字符。切割出单个字符后,放入char_(i)中,并切割掉每个字符的上下的空白区域,完成精确切割。

3.4.2 字符归一化处理

由于数码相机拍摄的汽车图像大小不一样, 所以得到的牌照上的字符大小就不一样,为了便于字符的识别,需要对字符进行归一化处理。归一化处理的目的就是使车牌字符同标准模块里面的字符特征一样。而大小归一是指在长度和宽度方向上分别乘以一个比例因子,使其等于标准模块的字符大小,本文采用的大小归一的方法是分别从水平投影和垂直投影两个方向上对字符象素的大小进行归一化处理。

3.5 字符识别 3.5.1 字符识别简述

利用计算机自动识别字符的技术,是模式识别应用的一个重要领域。人们在生产和生活中,要处理大量的文字、报表和文本。为了减轻人们的劳动,提高处理效率,50年代开始探讨一般字符识别方法,并研制出光学字符识别器。60年代出现了采用磁性墨水和特殊字体的实用机器。60年代后期,出现了多种字体和手写体文字识别机,其识别精度和机器性能都基本上能满足要求。如用于信函分拣的手写体数字识别机和印刷体英文数字识别机。70年代主要研究文字识别的基本理论和研制高性能的文字识别机,并着

13

重于汉字识别的研究[18]。

3.5.2 字符识别分类

车牌字符识别方法基于模式识别理论,主要有以下几类: (1) 结构识别;

他由识别及分析两部分组成,识别部分主要组成是:预处理、基元抽取(包括基元和子图像之间的关系)和结构分析。分析部分包括基元选择及结构推理。

(2) 统计识别;

确定已知样本所属的类别是统计模式识别的目的。它的理论依据是数学上的决策理论,而且统计识别的统计学识别模型都是根据数学上的决策理论建立的。它的基本模型是在对研究的图像进行大量的统计分析,并找出其规律性,抽出反应图像本质特点进行识别[8]。

(3) 基于BP神经网络的字符识别;

通常所说的BP神经网络模型,即误差后向传播神经网络,是神经网络中使用最广泛的一类,网络分为三层分别是输入层,隐层还有输入层,层与层之间多采用全互联方式同一层单元之间不存在互连连接。

(4) 基于模板匹配的字符识别;

模板匹配是数字图像处理的重要组成部分之一。是把根据已知模式到另外一幅图中寻找相应模式的处理方法就叫做模板匹配。

3.5.3 基于模板匹配的字符识别

如果已知图像中目标的特征,或者要检测图像中是否包含特定目标,则可根据对目标的了解建立相应的模板,进而来考察模板和原图像中的各个尺寸相同子区域的相似性。如果相似程度足够高,便认为该部分与模板相同,该区域即是被检目标。遍历整幅图像即可完成对所有目标的识别与分割,这种方法称为模板匹配技术。匹配可以在空域中进行,也可以在频率域等变换域进行;在空域中进行匹配的是目标图像本身,在变换域进行匹配的是目标的一些特征量。

在该类方法中,关键问题是如何建立匹配模板以及采用何种相似性的度量。 (1)相似性度量

14

相似性度量有多种表示方法,其中最常用的是差值测度法和相关测度法。 设目标图像为g(x,y),图像中相同大小的子区域D上的图像为f(x,y)。它们在D上的差值测度有如下三种计算方式:

L?max|f(x,y)?g(x,y)| (3-10)

(x,y)?DL???|f(x,y)?g(x,y)|dxdy (3-11)

DL???[f(x,y)?g(x,y)]dxdy (3-12)

D2采用以上三种方式计算出的结果越小,说明模板和子区域相似程度越高。差值测度法计算简单,对于简单区域的匹配是可行的,但对于复杂区域的匹配准确度不高。复杂区域的匹配常采用相关测度法[19]。

模板图像通常要比待测图像小,设模板图像大小为,待测图像大小,在匹配操作时,模板在待测图像上滑动,并在每一个可能的位置与其做相关运算。模板图像和待测图像的相关测度计算式为

M?1M?1L(k,l)?g(i,j)f(k?i,l?j)??i?0i?0M?1M?1M?1M?1 (3-13)

g2(i,j)??f2(k?i,l?j)??i?0j?0i?0j?0上式对互相关进行了归一化,这在多目标的检测中,有利于多个模板互相关结果的比较和判断。

(2)匹配模板

由模板匹配的原理知,匹配模板要根据待测目标的特征来构造。如果在空域进行处理,则是根据目标的形状、灰度、纹理等特征刻画一个目标的样板,以此为模板在图像中寻找与其相似甚至相同的部分。如果是在变换域里进行匹配,此时的模板要根据目标的变换域特征来建立,比如在频率域匹配,建立的模板要具有目标的频域特征,实际就是目标所具有的频谱分布。

模板匹配是字符识别方法中最具代表性的基本方法之一,模板匹配的方法是从图像区域f(i,j)或待识别的图像中提取出若干特征量,在逐个比较提取出的特征量与模板

T(i,j)相应的特征量,计算它们之间的互相关量,其中期间相似程度最高就是互相关量

最大的一个,这样就可以将图像分为很多类型。模板匹配也可以计算模板特征量和图像

15

之间的距离,根据最小距离法来将图像划分为某个类型。但是一般情况下用于模板匹配的图像成像条件都是不一样的,有些图像经过图像预处理后,图像中的像素点或灰度的位置发生了改变,有些图像还会有较大的噪声干扰图像的质量。在实际制作模板的过程中,因为图像中的各个区域形状都有特点,所以在设计模板时重点是凸显各相似区域之间的不同的地方,其次,还需要考虑的问题是位移和噪声(这两个因素的由图像经过处理时引起的),并且构建模板时通过一些特征量来建造模板,这些特征量是基于图像不变特性所设计的,这样子就不会遇到以上的几个问题了。

本文采用基于模板匹配的字符识别,它的基本过程是:首先我们要建立字符识别样本库,然后把归一化的字符图像与模板中的字符相减,找到差别点最少的模板为对应模板。由于我国的普通小型汽车车牌第一位字符是汉字,分别代表各个省的简称,然后第二位是A到Z的字母,接下来的后五位则是数字和字母的混合搭配。所以我们在对比的时候为了提高效率和准确性,我们分别对第一位和后六位分别识别。最后识别完成后输出识别的车牌的结果,流程图如图3-3所示。

建立识别样本库 读取分割且归一化的出来的将切割字符与模板库进行模板匹配 待识别字符与模板字符相减,值越小相似度越大,找到最小的一个即为匹配的最好的 识别完成,输出此模板对应值 图3-3 车牌识别系统字符识别流程图

16

4 运用MATLAB实现车牌识别

本次设计使用640*480的彩色JPG格式图片,以MATLAB软件为平台,采用编写代码程序实现车牌定位、车牌字符分割、车牌字符识别。当然,在这之前,我们首先要对图像进行一系列的预处理,因为图像在形成、传输或变换过程中,受多种因素的影响,如:光学系统失真、系统噪声、曝光不足或过量、相对运动等,往往会与原始景物之间或图像与原始图像之间产生了某种差异,这种差异称为降质或退化。由于图像产生了退化,所以在图像处理之前必须进行灰度化和预处理,预处理包括边缘检测、对边缘图像进行腐蚀、再对其进行闭运算、最后滤波移除小对象等。

4.1 车牌图像灰度化

在车牌识别系统中,将一幅图像转换为另一种类型是非常有用的,因为如果采用原始采集的彩色图像,它里面则包含了大量的无用信息,从而对定位、识别的过程中造成干扰,会造成存储的浪费以及在车牌识别系统中拖慢识别的速度,而且投入使用中将大大的提高硬件的要求,从而造成了经济成本的上升,所以我们将要对原始采集的对象通过代码进行灰度化处理,将其变成灰度图像。

车牌图像灰度化首先将通过MATLAB将原始图片通过函数imread读入并且输出如图4-1(a)所示,然后对读入的图像通过rgb2gray进行灰度处理如图4-1(b)所示。经过灰度变换后,像素的动态范围增加,图像的对比度扩展,使图像变得更加清晰、细腻、容易识别。

4.1.1 程序分析

I=imread('cell.jpg'); %读入图像 figure(1);

imshow(I), title('原始图像');

I_gray=rgb2gray(I); %对图像I进行灰度处理 figure(2);

imshow(I_gray),title('灰度图像');

17

4.1.2 结果分析

(a)车辆牌照原始图像

(b)车牌灰度图像 图4-1 车牌图像灰度化

由图4-1(b)可知,原始的彩色图像已经转换成了灰度图像,灰度图像的每一个像素的取值就是256中灰度中的一种(0表示黑,255表示白,从0到255亮度逐渐增加),也就是说灰度图像只有亮度信息而没有色彩信息。通过了图像灰度化处理,才有利于车牌定位的实现。

18

4.2 车牌图像预处理

车牌图像的预处理包括了边缘检测、对边缘图像进行腐蚀、再对其进行闭运算、最后滤波移除小对象。在本次设计中,我利用Sobel算子对灰度图像进行边缘检测,然后再对边缘图像进行腐蚀,去除掉边缘图像细的、间断的边缘,对剩下的区域进行闭合以填充图像,此时车牌区域已经形成了一个大的连通域,再调用bwareaopen函数去掉小的连通域。

4.2.1 程序分析

I_edge=edge(I_gray,'sobel'); %利用Sobel算子进行边缘检测 figure(3);

imshow(I_edge),title('边缘检测后图像'); se=[1;1;1];

I_erode=imerode(I_edge,se); %对边缘图像进行腐蚀 figure(4);

imshow(I_erode),title('腐蚀后边缘图像'); se=strel('rectangle',[25,25]);

I_close=imclose(I_erode,se); %填充图像 figure(5);

imshow(I_close),title('填充后图像');

I_final=bwareaopen(I_close,2000); %去除聚团灰度值小于2000的部分 figure(6);

imshow(I_final),title('形态滤波后图像');

边缘检测是为了对有意义的边缘点进行分类,与这个点相联系的灰度级必须比在这一点的背景上变换更有效,我们通过门限方法来决定一个值是否有效。所以,如果一个点的二维一阶导数比指定的门限大,我们就定义图像中的次点是一个边缘点,一组这样的依据事先定好的连接准则相连的边缘点就定义为一条边缘。经过一阶的导数的边缘检测,所求的一阶导数高于某个阈值,则确定该点为边缘点,这样会导致检测的边缘点太多。可以通过求梯度局部最大值对应的点,并认定为边缘点,去除非局部最大值,可以检测出精确的边缘。一阶导数的局部最大值对应二阶导数的零交叉点,这样通过找图像强度的二阶导数的零交叉点就能找到精确边缘点。

19

边缘检测选用不同的额算子或者阈值都会对结果造成很大的影响,经过反复试验,我选取了Sobel算子进行边缘检测,通过代码I_edge=edge(I_gray,'sobel')就能得到边缘检测的图像如图4-2(a)所示。

4.2.2 结果分析

(a) 车牌边缘检测图像

(b) 腐蚀后边缘图像

20

(c) 填充后图像

(d) 形态滤波后的图像 图4-2 车牌图像预处理

本文通过对图像进行腐蚀、膨胀如图4-2(b),腐蚀是一种消除边界点的过程,结果是使目标缩小,孔洞增大,因而可有效的消除孤立噪声点。经过腐蚀过后,图像中目标周围的边缘被腐蚀了,大大的缩小目标的范围,为后面提取车牌的进行提供了先决条件。对其实现闭运算如图4-2(c),先膨胀后腐蚀的过程称为闭运算,具有填充物体内细小空洞,连接邻近物体和平滑边界的作用。最后还用了bwareaopen来去除对象中不相干的小对象。由此得到车牌图像的初步定位,如图4-2(d)所示。通过对比原始图片,我们可以发现形态滤波后的图像已经很接近正确的车牌位置了,因此后期处理将通过这张图来找出车牌位置。

21

4.3 牌照定位

观察经过预处理后得到的图像发现车牌位置有明显的矩形图样,通过对矩形区域的定位即可获得具体的车牌位置。设计过程首先将二值图像中所有为白色的点的坐标放入数组location_of_1中,对这些坐标进行计算,寻找x坐标与y坐标之和最大的点a与最小的点b,最大点a即为车牌的左上角,最小点b为车牌的右下角,通过这两个坐标将车牌分割出来。

4.3.1 程序分析

I_new=zeros(size(I_final,1),size(I_final,2)); location_of_1=[];

for i=1:size(I_final,1) %寻找二值图像中白的点的位置 for j=1:size(I_final,2) if I_final(i,j)==1; newlocation=[i,j];

location_of_1=[location_of_1;newlocation]; end end end

mini=inf;maxi=0;

for i=1:size(location_of_1,1)

%寻找所有白点中,x坐标与y坐标的和最大,最小的两个点的位置 temp=location_of_1(i,1)+location_of_1(i,2); if tempmaxi maxi=temp; b=i; end end

22

first_point=location_of_1(a,:); %和最小的点为车牌的左上角 last_point=location_of_1(b,:); %和最大的点为车牌的右下角 x1=first_point(1)+4; %坐标值修正 x2=last_point(1)-4; y1=first_point(2)+4; y2=last_point(2)-4; I_plate=I(x1:x2,y1:y2);

g_max=double(max(max(I_plate))); g_min=double(min(min(I_plate)));

T=round(g_max-(g_max-g_min)/3); % T 为二值化的阈值 I_plate =im2bw (I_plate,T/256); subplot(3,2,5),imshow(I_plate); I_plate=bwareaopen(I_plate,20);

figure,imshow(I_plate),title('车牌提取') %画出最终车牌

4.3.2 结果分析

图4-3 车牌提取图片

定位后车牌图像是彩色的,会占用较大的存储空间,加重计算机负担,所以要对图像进行二值化以及滤波处理。这样才有助于字符分割的进行。如图4-3所示

23

4.4 字符分割

此部分是将前面分割出的车牌的7个字符分割出来,其过程是从左向右像按列计算每一列之和,没有白点的列和为0,有白点的列和非零,转换为逻辑1,记录下所有列和在0与1转换的列,即为需要切割的列,共有14列,可切出7个字符。切割出单个字符后,放入char_(i)中,并切割掉每个字符的上下的空白区域,完成精确切割。

4.4.1 程序分析

X=[]; %用来存放水平分割线的横坐标 flag=0;

for j=1:size(I_plate,2) sum_y=sum(I_plate(:,j));

if logical(sum_y)~=flag %列和有变化时,记录下此列 X=[X j];

flag=logical(sum_y); end end figure

for n=1:7

char=I_plate(:,X(2*n-1):X(2*n)-1); %进行粗分割

for i=1:size(char,1) %这两个for循环对分割字符的上下进行裁剪

if sum(char(i,:))~=0 top=i; break end end

for i=1:size(char,1)

if sum(char(size(char,1)-i,:))~=0 bottom=size(char,1)-i; break end

24

end

char=char(top:bottom,:); subplot(2,4,n);imshow(char);

char=imresize(char,[32,16],'nearest'); %归一化为32*16的大小,以便模板匹配 eval(strcat('Char_',num2str(n),'=char;')); %将分割的字符放入Char_i中 end

4.4.2 结果分析

图4-4 字符分割图像

在汽车牌照自动识别过程中,字符分割有承前启后的作用,它在前期牌照定位的基础上进行字符的分割,然后再利用分割的结果进行字符识别。一般分割出来的字符要进行进一步的处理,以满足下一步字符识别的需要,但是对于车牌的识别,并不需要太多的处理就已经可以达到正确识别的目的,在此只进行了归一化处理,然后进行后期处理。由于我们制作的模板是32*16像素点的规格,为了方便后面的模板匹配,我们就将分割的图片进行32*16像素点的归一化处理,最后结果如图4-4所示。

4.5 字符识别

模板库的合理建造是字符识别准确的关键之一,所以在字符识别之前必须把模板库

25

设置好。汽车牌照的字符一般有 7 个,大部分车牌第一位是汉字,通常代表车辆所属省份,或是军种、警别等有特定含义的字符简称;紧接其后的为字母与数字。车牌字符识别与一般文字识别在于它的字符数有限, 十个阿拉伯数字0~9, 24个大写英文字母 A~Z 以及相关的车牌用汉字:京、沪、苏、台、港、澳、甲、乙、丙、使、领、学、试、境、消、边、警等,以及新式军牌中的汉字南、兰、广、北、沈、济、空、海等。所以建立字符模板库也极为方便。建立模板数据库时要作为模板的图片进行统一处理,所以将这些图片归一化为大小32*16像素点的规格。制作出的汉字模板存储在命名为chinese的文件夹中,字母与数字的模板存储在命名为cha&num的文件夹中

接下来是对前面分割出的字符进行识别,运用的是模板匹配字符识别算法,过程是把切割出的字符与库里的汉字和字符的模板做减法运算,找到差别点最少的模板为对应模板,输出该模板对应的字符,最后识别出车牌。

4.5.1 程序分析 char=[];

store1=strcat('贵','琼','粤','湘','鄂','皖','鲁','藏','京','苏','黑','吉','冀','晋','辽'); %创建汉字识别模板库 for j=1:15

Im=Char_1;

Template=imread(strcat('chinese\\',num2str(j),'.jpg')); Template=im2bw(Template); Differ=Im-Template;

Compare(j)=sum(sum(abs(Differ))); end

index=find(Compare==(min(Compare))); char=[char store1(index)];

store2=strcat('A','B','C','D','E','F','G','H','J','K','L','M','M','N','P','Q','R'...

,'S','T','U','V','W','X','Y','Z','0','2','3','4','5','6','7','8','9'); %创建字母与数字识别模板库

for i=2:7 for j=1:34

Im=eval(strcat('Char_',num2str(i)));

26

Template=imread(strcat('cha&num\\',num2str(j),'.jpg')); Template=im2bw(Template); Differ=Im-Template;

Compare(j)=sum(sum(abs(Differ))); end

index=find(Compare==(min(Compare))); char=[char store2(index)]; end

figure,imshow(I),title(strcat('车牌为:',char));

4.5.2 结果分析

图4-5 字符识别结果图像

本文以MATLAB R2009a为实验平台,在得到这个结果之前,需要对车牌图像进行预处理、车牌定位、车牌分割等处理。

在图像采集的过程中,由于外界的干扰如光线等因素原因以及车主在车牌周围的装饰,还有生产厂家对车身的点缀容易给车牌的定位造成很大程度的影响,因此需要对原始图象进行识别前的预处理。对于光照条件不理想的图象,可先进行一次图象增强处理,使得图象灰度动态范围扩展和对比度增强,再进行定位和分割,这样可以提高分割的正

27

确率。由于车牌采集的信息都是些彩色图片,含有大量的数据信息,因此我们还要对其进行灰度化处理。图像中车辆牌照是具有比较显著特征的一块图象区域,这此特征表现在:近似水平的矩形区域;其中字符串都是按水平方向排列的;在整体图象中的位置较为固定。正是由于牌照图象的这些特点,再经过适当的图象变换,它在整幅中可以明显地呈现出其边缘,于是对其边缘提取,此处边缘的提取采用的是Sobel算子。随之进行定位及分割还有识别。

对于识别错误情况的分析得到,主要原因有以下几点: (1) 汽车牌照上外界干扰,如在牌照周围添加饰物;

(2) 采用不同的边缘检测算子将会使牌照字符的分割失败,导致识别错误; (3) 某些字符具有相似性,字符识别结果可能发生混淆的情况。

尽管目前牌照字符的识别率还不是很完美,但是只要在分割出的字符的大小、位置的归一化,以及尝试提取分类识别能力更好的特征值和设计分类器等环节上再完善,进一步提高识别率是完全可行的。

28

5 总结

近年来我国随着社会经济的高速发展、汽车数量急剧增加,对交通管理的要求也日益提高,而相应的人工管理方式以不能满足实际的需要,微电子、通信和计算机技术在交通领域的应用极大地提高了交通管理的效率。而车牌识别技术恰好能满足这一需求,通过车牌识别我们可以解决被纳入“黑名单”的通缉车辆,可以统计一定时间范围内进出各省的车辆,还能有效的对该车辆进行定位,对公安机关等相关部门有着很重要的作用通过智能的车牌定位及识别技术将对于维护交通安全和城市治安,防止交通堵塞,实现交通自动化管理有着现实的意义。

通过本次车牌识别的设计,我也对数字图像处理技术的原理及MATLAB编程技术有了更进一步的了解。让我不仅仅是在学习知识上,还有对科学实验的严谨态度上都有了很大提升。本次设计的研究以MATLAB软件作为设计工具,通过对采集到的原始图像进行预处理、车牌定位、字符分割以及字符识别才识别出图像中的车牌。本次设计主要解决了一下几个问题:

(1)对彩色图像进行灰度化处理的方法:

(2)选取合适的边缘检测算子及对灰度图像进行边缘检测的方法; (3)如何在图像中定位出车牌位置并从定位好的车牌图像中提取出车牌; (4)如何对车牌字符进行分割和字符识别。

在车辆牌照字符识别系统的研究领域,近几年已经出现了许多切实可行的识别技术和方法,从这些新技术和方法中可以看到两个明显的趋势:一是单一的人工选取合适的算法和其他指标已经不能取得很好的结果。二是车牌识别逐渐走上智能化的过程,通过智能系统选取不同的算法进行自动的分析才能更准确的应对各个角度及位置的车牌信息识别。虽然本次设计出的车牌识别技术还存在很多不足之处,但是我在此次的毕业设计中学习到了很多知识,增加了我的学习能力,这对我来说是很大的锻炼。

29

附录

设计代码 I=imread('cell.jpg');

subplot(3,2,1);imshow(I), title('原始图像'); I_gray=rgb2gray(I);

subplot(3,2,2),imshow(I_gray),title('灰度图像'); I_edge=edge(I_gray,'sobel');

subplot(3,2,3),imshow(I_edge),title('边缘检测后图像'); se=[1;1;1];

I_erode=imerode(I_edge,se);

subplot(3,2,4),imshow(I_erode),title('腐蚀后边缘图像'); se=strel('rectangle',[25,25]);

I_close=imclose(I_erode,se); %图像闭合、填充图像 subplot(3,2,5),imshow(I_close),title('填充后图像');

I_final=bwareaopen(I_close,2000); %去除聚团灰度值小于2000的部分 subplot(3,2,6),imshow(I_final),title('形态滤波后图像'); I_new=zeros(size(I_final,1),size(I_final,2)); location_of_1=[];

for i=1:size(I_final,1) %寻找二值图像中白的点的位置 for j=1:size(I_final,2) if I_final(i,j)==1; newlocation=[i,j];

location_of_1=[location_of_1;newlocation]; end end end

mini=inf;maxi=0;

for i=1:size(location_of_1,1)

%寻找所有白点中,x坐标与y坐标的和最大,最小的两个点的位置 temp=location_of_1(i,1)+location_of_1(i,2);

30

if tempmaxi maxi=temp; b=i; end end

first_point=location_of_1(a,:); last_point=location_of_1(b,:); x1=first_point(1)+4; x2=last_point(1)-4; y1=first_point(2)+4; y2=last_point(2)-4; I_plate=I(x1:x2,y1:y2);

g_max=double(max(max(I_plate))); g_min=double(min(min(I_plate)));

T=round(g_max-(g_max-g_min)/3); I_plate =im2bw (I_plate,T/256); subplot(3,2,5),imshow(I_plate); I_plate=bwareaopen(I_plate,20);

figure,imshow(I_plate),title('车牌提取') X=[]; flag=0;

for j=1:size(I_plate,2) sum_y=sum(I_plate(:,j));

if logical(sum_y)~=flag X=[X j];

flag=logical(sum_y); end end figure

%和最小的点为车牌的左上角 %和最大的点为车牌的右下角 %坐标值修正 % T 为二值化的阈值 %最终车牌

%用来存放水平分割线的横坐标 %列和有变化时,记录下此列 31

for n=1:7

char=I_plate(:,X(2*n-1):X(2*n)-1); %进行粗分割

for i=1:size(char,1) %这两个for循环对分割字符的进行裁剪 if sum(char(i,:))~=0 top=i; break end end

for i=1:size(char,1)

if sum(char(size(char,1)-i,:))~=0 bottom=size(char,1)-i; break end end

char=char(top:bottom,:); subplot(2,4,n);imshow(char);

char=imresize(char,[32,16],'nearest'); %归一化为32*16的大小,以便模板匹配 eval(strcat('Char_',num2str(n),'=char;')); %将分割的字符放入Char_i中 end char=[];

store1=strcat('贵','琼','粤','湘','鄂','皖','鲁','藏','京','苏','黑','吉','冀','晋','辽'); for j=1:15

Im=Char_1;

Template=imread(strcat('chinese\\',num2str(j),'.jpg')); Template=im2bw(Template); Differ=Im-Template;

Compare(j)=sum(sum(abs(Differ))); end

index=find(Compare==(min(Compare))); char=[char store1(index)];

store2=strcat('A','B','C','D','E','F','G','H','J','K','L','M','M','N','P','Q','R'... ,'S','T','U','V','W','X','Y','Z','0','2','3','4','5','6','7','8','9'); for i=2:7

32

for j=1:34

Im=eval(strcat('Char_',num2str(i)));

Template=imread(strcat('cha&num\\',num2str(j),'.jpg')); Template=im2bw(Template); Differ=Im-Template;

Compare(j)=sum(sum(abs(Differ))); end

index=find(Compare==(min(Compare))); char=[char store2(index)]; end

figure,imshow(I),title(strcat('车牌为:',char));

33

参考文献

[] 刘长青.车牌识别技术的研究和实现[D], 湖南:湖南大学,2007

[2] 王璐.基于MATLAB的车牌识别研究[D]. 上海:上海交通大学,2009 [3] 陈贤青.基于计算机视觉的车牌定位研究[D]. 天津:天津大学,2007

[4] 徐辉.基于MATLAB实现汽车车牌自动识别系统[J]. 电脑知识与技术,2010,06(17):43-48 [5] 朱秀昌.刘峰,胡栋.数字图像处理教程[M]. 北京:清华大学出版社,2011 [6] 徐建华.图像处理与分析[M]. 北京:科学出版社,1992

[7] 王洪元.MATLAB语言及其在电子信息工程中的应用[M]. 北京:清华大学出版社,2004 [8] 刘刚.MATLAB数字图像处理[M]. 北京:机械工业出版社,2010

[9] 钱海军.基于MATLAB图像增强中直方图均衡化的应用[J]. 电脑开发与应用,2011,24(11):47-49

[0] 叶晨洲等.车辆牌照字符识别系统[J]. 计算机系统应用,2000,34(5): 10-13页

[1] 许伦辉、陈衍平、修科鼎.基于图像处理的静态车牌识别技术[J]. 江西理工大学学报,2011,32(1):58-62

[2] 张仲康.数字图像处理及应用[M]. 北京:国防工业出版社,1985

[3] 渠国祥.基于DSP技术的智能防盗报警系统[D]. 南京:南京理工大学,2007:24-25页 [4] 韩晓军,数字图像处理技术与应用[M]. 北京:电子工业出版社,2009

[5] 龚声蓉,刘纯平,王强.数字图像处理与分析[M]. 北京:清华大学出版社,2006

[6] 袁志伟,潘晓露.车辆牌照定位的算法研究[J]. 昆明理工大学学报,2001,26(2): 56-60 [7] 余松煜,周源华,张瑞.数字图像处理[M]. 上海:上海交通大学出版社,2007 [8] 钟珞,潘昊,何平.模式识别[M]. 武汉:武汉大学出版社,2006

[9] 张引,潘云鹤.面向车辆牌照字符识别的预处理算法[J]. 计算机应用研究,1999,23(7): 4-9

34

致谢

随着青春的激情和求知的欲望,我即将走完大学四年求知之旅,美好的大学生活培养了我严谨的思维方式,更造就了我积极乐观的生活态度和开拓创新的意识,在不断学习中养成了严谨踏实和团结协作的优秀品质。而且通过将近两个月的时间,我终于完成了此次的毕业设计和毕业论文,在程序代码的编写上和毕业论文的撰写上我都遇到了许多的困难,但是通过我自己的努力,查阅相关资料,询问老师和同学,我才顺利完成了本次的毕业设计和毕业论文。在此,我要特别感谢我的指导老师XXX老师,从论文的选题、定题、以及可行性分析以及后期的论文反复修改,X老师深刻而细致的指导都让我受益匪浅,他严谨的科学研究精神也都是我学习的榜样。

其次要感谢大学四年中给我们传授知识的所有老师们,谢谢你们的悉心指导和精心栽培,让我掌握了专业知识以及各类人文及自然科学的知识,为我以后步入社会工作打下了良好的基础。

还有感谢我的父母,是你们给予我生命并让我有接受教育的机会,你们的关怀将是我人生道路上永不停歇的动力。

最后感谢我的同学和朋友,在我编写代码程序的过程中给予我很多建议,还在论文的撰写和排版过程中提供热情的帮助,帮我解决了很多问题,谢谢你们的陪伴、谢谢你们的支持、谢谢你们一路上对我的鼓励和帮助。在此我向帮助和指导过我的各位老师表示最衷心的感谢!由于我了解的知识水平有限,毕业设计和所写论文难免有不足之处,所以恳请各位老师和同学批评和指正!

35