《西电数字图像处理大作业车牌识别出结果.pdf》由会员分享,可在线阅读,更多相关《西电数字图像处理大作业车牌识别出结果.pdf(33页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、第 1 页 共 33 页基于基于 MATLABMATLAB 软件的车牌识别软件的车牌识别作者:学 号:作者:学 号:学院(系):电子工程学院专业:电子信息工程题目:基于 matlab 的车牌识别指导教师:李洁职称:教授2013 年 5 月摘摘要要随着经济社会的发展及人们生活水平的提高,机动车辆的数量越来越多,第 2 页 共 33 页给交通管理带来了很大的压力,所以,我们必须找到一种方法来解决这个问题。因为车牌号的重要地位,我们第一个想到就是设法利用车牌号来对车辆进行管理,所以车牌提取应运而生, 用来提高汽车的安全管理水平及管理效率。车牌识别系统主要包括了图像采集、图像预处理、车牌定位、字符分割
2、、字符识别等五大核心部分。关键词:关键词:MATLABMATLAB、图像预处理、车牌识别与分割、图像预处理、车牌识别与分割第 3 页 共 33 页目目录录1. 绪论. 1 1.1 本课题的研究背景. 11.2 国内外发展状况. 31.3 主要应用领域. 51.4 设计原理. 62. MATLAB 简介 . 72.1 MATLAB 发展历史 . 73各模块的实现. 113.1 设计方案 . 113.2 图像预处理 . 113.2.1 图像灰度化 . 113.2.2 图像的边缘检测 . 123.3 车牌定位和分割 . 143.3.1 车牌的定位 . 153.3.2 车牌的分割 . 163.3.3
3、对定位后的彩色车牌的进一步处理 . 173.4 字符的分割和归一化处理 . 17 3.4.1 字符的分割 . 18 3.4.2 字符的归一化处理 . 193.5 字符的识别. 194实验结果和分析. 225实验总结. 24致谢. 25参考文献. 26程序附录. 27第 32 页 共 33 页第一章 绪论1.11.1 本课题的研究背景本课题的研究背景随着经济社会的发展及人们生活水平的提高,机动车辆的数量越来越多,给交通管理带来了很大的压力,所以, 我们必须找到一种方法来解决这个问题。因为车牌号的重要地位,我们第一个想到就是设法利用车牌号来对车辆进行管理,所以车牌提取应运而生,用来提高汽车的安全管
4、理水平及管理效率。此外,智能交通系统,简称 ITS(Intelligent Traffic System)已成为现代社会道路交通发展趋势。智能交通系统,是在当代科学技术高速发展的背景下产生的。其目标在于将现金的计算机处理技术、数据通信技术、自动控制技术等综合应用于地面交通管理体系,从而建立起一种高效、准确、 实时的交通管理系统。公路交通基础建设的不断发展和车辆管理体制的不断完善,为以视觉监控为基础的智能交通系统的实际应用打下了良好基础。车牌号识别系统是基于图像处理技术的基础进行研究的。 本课题图像处理分为以下几方面:1.图像数字化其目的是将模拟形式的图像通过数字化设备变为数字计算机可用的离散的
5、图像数据。2.图像变换为了达到某种目的而对图像使用一种数学技巧 ,经过变换后的图像更为方便、容易地处理和操作。3.图像增强图像增强的主要目标是改善图像的质量。 采用某些处理技术来突出图像中的某些信息,削弱或消除某些无关信息,从而有目的地强调图像的整体或局部特征,让观察者能看到更加直接、清晰的分析和处理图像。直方图修正、灰度变换、强化图像轮廓等都是常用的手段。4.图像分割在图像研究和应用中,人们往往仅对图像的某些部分感兴趣。它们一般对应图像中待定的、具有独特性质的区域。图像分割就是把图像中需要的那一个部分第 33 页 共 33 页分割出来。5.图像分析图像分析的内容分为特征提取、 图像分割、 符
6、号描述、 和图像的检测与匹配。1.21.2 国内外的发展状况国内外的发展状况在现代化交通系统中, 如何快速准确地提取目标车辆的车牌信息一直是一个技术性难题,它一直制约着交通系统现代化、自动化、智能化的发展脚步。车牌识别技术的研究早在20世纪90年代就已经开始了。 技术的核心是通过对拍到的车牌图像进行分析, 在非人工千预的情况下自动获取车牌信息, 从而确定车辆牌号。在车牌识别系统研究中,许多的新技术和新方法被不断地提出并应用,例如图像处理技术、模糊数学理论、 神经元网络算法等等,也有人将一些传统方式和高新技术相结合来进行应用,但到目前为止, 由于各种客观的不利环境因素存在,还没有一种解决办法可以
7、作为最有效的银弹, ,来解决应用中的所有技术难题,它们在系统的准确性和实时性方面虽都有其自己的解决办法和设计方案, 但健壮性和鲁棒性均达不到理想要求。因此 LPR 系统虽然经历了20多年的发展,依然是一个能够被解决但一直没有被妥善解决的问题。国外在这方面的研究工作开展较早。早在上世纪70年代,英国就在实验室中完成了实时车牌检测系统, ,的广域检测和开发。同时代,还诞生了面向被盗车辆的第一个实时自动车牌监测系统。直至今日,国外对车牌检测的研究已经取得了一些令人瞩目的成就,如 YuniaoCul 提出了一种车牌识别系统,在车牌定位以后,利用马尔科夫场对车牌特征进行提取和二值化,对样本的识别达到了较
8、高的识别率。EunRyung 等利用图像中的颜色分量,对车辆牌照进行定位识别,其中提到了三种方法:以 Hough 变换为基础的边缘检测定位识别;以灰度值变换为基础的识别算法;以 HLS 彩色模式为基础的车牌识别系统,识别率分别为81.25%、85%、91.25%。日本对车牌图像的获取也做了大量的研究,并为系统产业化做了大量工作。目前,以色列的Hi 一 Teeh 公司研制的多种 see/CarSystem,适用于几个不同国家的车牌识别。新加坡的vLPRs 只适合于新加坡的车牌。此外日本、 德国等发达国家都有适合自己本国车牌的识别系统。 我国做得较好的产品是中科院自动化研究所的汉王眼,另外,亚洲视
9、觉科技有限公司、 深圳市吉通电子有限公司以及上海交通大学、清华大学等高校都做过类似的研究。从目前一些产品的性能来看,车牌识别系统的识别率和识别速度都有待提高。因此,研究高速、准确的定位与识别算法是当前的主要任务, 图像处理技术的发展与计算机性能的提高都会促进车牌识别技术的发展,提高车牌识别系统的性能。1.31.3 主要应用领域主要应用领域车牌自动识别系统具有广泛的应用范围,主要应用于:(1)高速公路收费、监控管理;(2)小区、停车场管理;(3)城市道路监控、第 32 页 共 33 页违章管理;(4)车牌登录、验证;(5)车流统计、安全管理等。车牌自动识别系统应用于这些系统,可以解决通缉车辆的自
10、动稽查问题,可以解决车流高峰期因出入口车流瓶颈造成的路桥卡口、停车场交通堵塞问题,可以解决因工作人员作弊造成的路桥卡口、高速公路、 停车场应收款流失的问题,还可以以最简单的方式完成交通部门的车辆信息联网,解决数据统计自动化,模糊查询的问题。1.41.4 设计原理设计原理汽车牌照自动识别技术是一项利用车辆的动态视频或静态图像进行牌照号码、牌照颜色自动识别的模式识别技术。 通过对图像的采集和处理,完成车牌自动识别功能,能从一幅图像中自动提取车牌图像,自动分割字符, 进而对字符进行识别.第二章第二章 MATLAB MATLAB 简介简介2.12.1 MATLAB MATLAB发展历史简介发展历史简介
11、MATLAB 软件是由美国 Mathworks 公司推出的用于数值计算和图形处理的科学计算系统环境。MATLAB 是英文 MATrix LABoratory(短阵实验室)的缩写。它的第 1版(DoS 版本 1.0)发行于 1984 年,经过 10 余年的不断改进,现今已推出它的WindoM 98/NT 版本(6.1 版)。新的版本集中了日常数学处理中的各种功能,包括高效的数值计算、矩阵运算、信号处理和图形生成等功能。在 MATLAB 环境下,用户可以集成地进行程序设计、数值计算、图形绘制、输入输出、文件管理等各项操作。 MATLAB 提供了一个人机交互的数学系统环境,该系统的基本数据结构是矩阵
12、, 在生成矩陈对象时, 不要求作明确的维数说明。 与利用 c 语言或 FoRTRAN语言作数值计算的程序设计相比,利用 MATLAB 可以节省大量的编程时间。在美国的一些大学里,MATLAB 正在成为对数值线性代数以及其他一些高等应用数学课程进行辅助教学的有益工具。在工程技术界,MATLAB 也被用来解决一些实际课题和数学模型问题。典型的应用包括数值计算、算法预设计与验证, 以及一些第 33 页 共 33 页特殊的短阵计算应用,如自动控制理论、统计、数字信号处理 (时间序列分拆)等。 MATLAB 系统最初是由 CIeve Moler用 FORTRAN 语盲设计的,有关短阵的算法来自 LINP
13、ACK 和 EIsPACK 课题的研究成果;现在的 MATLAB 程序是 MathWorks公司用 C 语言开发的,第一版由 steve Bangert 主持开发编译解释程序,SteveKleiman 完成图形功能的设计,John Little 和 Cleve Moler 主持开发了各类数学分分析的子模块,撰写用户指南和大部分的M 文件。自从第1 版发行以来,已有众多的科技工作者加入到 MATLAB 的开发队伍中, 并为形成今天约 MATLAB 系统做出了巨大的贡献。 MATLAB 以商品形式出现后,仅短短几年,就以其良好的开放性和运行的可靠性,使原先控制领域里的封闭式软件包(如英国的UMIS
14、T,瑞典的 LUND 和 SIMNON, 德国的 KEDDC) 纷纷淘汰, 而改以 MATLAB 为平台加以重建。在时间进入 20 世纪九十年代的时候,MATLAB 已经成为国际控制界公认的标准计算软件。到九十年代初期,在国际上30 几个数学类科技应用软件中,MATLAB 在数值计算方面独占鳌头, 而Mathematica和Maple则分居符号计算软件的前两名。Mathcad 因其提供计算、图形、文字处理的统一环境而深受中学生欢迎。MathWorks 公司于 2001 年推出 MATLAB6.0 版本, 6.x 版在继承和发展其原有的数值计算和图形可视能力的同时, 出现了以下几个重要变化:(1
15、) 推出了 SIMULINK。这是一个交互式操作的动态系统建模、仿真、 分析集成环境。它的出现使人们有可能考虑许多以前不得不做简化假设的非线性因素、随机因素,从而大大提高了人们对非线性、随机动态系统的认知能力。 (2)开发了与外部进行直接数据交换的组件,打通了 MATLAB 进行实时数据分析、处理和硬件开发的道路。 (3)推出了符号计算工具包。1993 年 MathWorks 公司从加拿大滑铁卢大学购得 Maple 的使用权,以 Maple 为“引擎”开发了 Symbolic Math Toolbox 1.0。MathWorks公司此举加快结束了国际上数值计算、符号计算孰优孰劣的长期争论,促成
16、了两种计算的互补发展新时代。 (4)构作了 Notebook 。MathWorks 公司瞄准应用范围最广的 Word ,运用 DDE 和 OLE,实现了 MATLAB 与 Word 的无缝连接,从而为专业科技工作者创造了融科学计算、图形可视、文字处理于一体的高水准环境。MTALAB 系统由五个主要部分组成,下面分别加以介绍。 (1)MATALB 语言体系MATLAB 是高层次的矩阵数组语言具有条件控制、函数调用、数据结构、输入输出、面向对象等程序语言特性。利用它既可以进行小规模端程,完成算法设计和算法实验的基本任务,也可以进行大规模编程,开发复杂的应用程序。第 32 页 共 33 页(2)MA
17、TLAB 工作环境这是对 MA 丁 LAB 提供给用户使用的管理功能的总称包括管理工作空间中的变量据输入输出的方式和方法,以及开发、调试、 管理 M 文件的各种工具。 (3)图形句相系统这是 MATLAB 图形系统的基础,包括完成 2D 和3D 数据图示、图像处理、动画生成、图形显示等功能的高层MATLAB 命令,也包括用户对图形图像等对象进行特性控制的低层 MATLAB 命令,以及开发 GUI 应用程序的各种工具。 (4)MATLAB 数学函数库这是对 MATLAB 使用的各种数学算法的总称 包括各种初等函数的算法, 也包括矩阵运算、 矩阵分析等高层次数学算法。(5)MATLAB 应用程序接
18、口(API) 这是 MATLAB 为用户提供的一个函数库,使得用户能够在 MATLAB 环境中使用 c 程序或 FORTRAN 程序, 包括从 MATLAB 中调用于程序(动态链接),读写 MAT 文件的功能。可以 看出 MATLAB 是一个功能十分强大的系统,是集数值计算、图形管理、程序开发为一体的环境。除此之外, MA 丁 LAB还具有根强的功能扩展能力,与它的主系统一起,可以配备各种各样的工具箱,以完成一些特定的任务。用户可以根据自己的工作任务,开发自己的工具箱。 在欧美大学里,诸如应用代数、数理统计、自动控制、数字信号处理、模拟与数字通信、时间序列分析、动态系统仿真等课程的教科书都把
19、MATLAB 作为内容。这几乎成了九十年代教科书与旧版书籍的区别性标志。在那里,MATLAB 是攻读学位的大学生、硕士生、博士生必须掌握的基本工具。在国际学术界,MATLAB 已经被确认为准确、可靠的科学计算标准软件。在许多国际一流学术刊物上, (尤其是信息科学刊物) ,都可以看到 MATLAB 的应用。在设计研究单位和工业部门,MATLAB 被认作进行高效研究、开发的首选软件工具。如美国 NationalInstruments 公司信号测量、分析软件 LabVIEW,Cadence 公司信号和通信分析设计软件 SPW 等,或者直接建筑在MATLAB 之上,或者以MATLAB 为主要支撑。又如
20、 HP 公司的 VXI 硬件,TM 公司的 DSP,Gage 公司的各种硬卡、 仪器等都接受MATLAB 的支持。第 33 页 共 33 页第三章第三章 各模块的实现各模块的实现车牌识别系统包括图像采集、图像预处理、车牌定位、字符分割、字符识别等模块,本文主要研究图像预处理、车牌定位和字符分割三个模块。3.13.1 设计方案:设计方案:该系统主要是由图像处理和字符识别两部分组成。 其中图像处理部分包括图像预处理、边缘提取模块、牌照的定位以及分割模块。 字符识别部分可以分为字符分割与特征提取和单个字符识别两个模块。字符识别部分要求照片清晰,但由于该系统的摄像头长时间在室外工作,加上光照条件、摄像
21、头角度和距离、车辆自身条件以及车辆的行驶速度的影响,想拍出较理想的图片很困难。因此,我们要对摄像头拍摄的图片进行预处理, 主要包括图片灰度化和图片边缘提取等。车牌定位和车牌分割是整个系统的关键, 其作用是在经图象预处理后的灰度图象中确定牌照的具体位置, 并将包含牌照字符的一块子图象从整个图象中分割出来,供字符识别子系统识别之用,分割的准确与否直接关系到整个牌照字符识别系统的识别率。车牌识别系统的最终目的就是将不清楚的车牌照片进行识别, 输出清晰的图片。现在字符识别的常用方法有模板匹配法和神经网络模型法。3.23.2图像预处理图像预处理3.2.13.2.1图像灰度化图像灰度化:第 32 页 共
22、33 页汽车图像样本目前大都是通过摄像机、数码相机等设备拍摄获取的,因而预处理前的图像都是彩色图像。彩色图像包含着大量的颜色信息,不但在存储上开销很大,而且在处理上也会降低系统的执行速度。由于图像的每个象素都具有三个不同的颜色分量,存在许多与识别无关的信息,不便于进一步的识别工作,因此在对图像进行识别等处理中,经常将彩色图像转变为灰度图像,以加快处理速度。对于将彩色图像转换成灰度图像时, 目前比较主流的灰度化方法叫平均值法,公式为: H=0.229R+0.588G+0.144B公式中 H 表示灰度图的亮度值;R 代表彩色图像红色分量值;G 代表色彩图像绿色分量值; B 代表彩色图像蓝色分量值。
23、 RGB 三分量前的系数为经验加权值。加权系数的取值建立在人眼的视觉模型之上。 对于人眼较为敏感的绿色取较大的权值; 对人眼较为不敏感的蓝色则取较小的权值。通过该公式转换的灰度图能够比较好地反应原图像的亮度信息。在 MATLAB 中我们可以调用 im2gray 函数对图像进行灰度化处理。3.2.23.2.2图像的边缘检测:图像的边缘检测:边缘是指图像灰度发生空间突变或者在梯度方向上发生突变的像素的集合。用摄像机采集到的机动车图像由于受到噪声干扰以及车辆本身的影响, 使得获得的图像质量不理想。因此,在进行对汽车牌照的定位及字符识别之前需要先对车辆图像进行边缘检测处理,提高图像的质量, 使其易于后
24、面的分割和识别。通过良好的边缘检测可以大幅度的降低噪声、分离出复杂环境中的车辆图像、保留完好的车牌字符信息,方便后面的车牌精确定位与字符识别。由于车牌识别系统摄像头安装位置固定以及机动车车牌的固有属性, 我们可以发现机动车车牌图像都处在水平的矩形区域,在图像中位置较为固定,车牌中字符都是按水平方向排列。因为有这些明显的特征,经过适当的图像变换, 可以清晰的呈现出车牌的边缘。 本文采用经典的 Roberts 边缘检测算子来对图像进行边缘检测。第 33 页 共 33 页图图 3.13.1 原图原图图图 3.23.2 灰度图灰度图第 32 页 共 33 页图图 3.3 Robert3.3 Rober
25、t 算子边缘检测算子边缘检测3.33.3 车牌定位和分割车牌定位和分割该系统的摄像头拍摄的图片是整个机动车的图片, 而只有车牌部分是对系统有用的。所以我们要对照片进行车牌定位和分割。车牌的定位和分割是从经过图像预处理后的灰度图像中确定牌照位置,并将车牌部分从整个图像中分割出来,从而进行字符识别。 车牌图像的灰度图的车牌部分是一个水平度很高的长方形图样,在原图中比较集中, 且灰度值和周围图样有明显差异,因此很容易用边缘检测来对图像进行分割。 车牌定位和分割的准确度直接关系到最后的字符识别的质量。第 33 页 共 33 页对图像进行图像腐蚀除去图像杂质通过计算寻找 X 和 Y方向车牌的区域对定位后
26、的彩色车牌的进一步处理完成车牌定位图图 3.43.4 车牌定位流程图车牌定位流程图3.3.13.3.1 车牌定位车牌定位机动车图像经过灰度化和边缘检测的处理后,边缘得到了加强,牌照区域已经非常明显。本文采用的是用数学形态学来进行图像处理和模式识别。数学形态学用具有一定形态的机构元素去量度和提取图像中的对应形状以达到对图像分析和识别的目的,能有效的去除噪声,保留图像原有信息的同时提取的边缘比较平滑,提取的图像骨架也比较连续, 断点少。现在我们将经过预处理的图像进行图像腐蚀以及去除杂质,就可以得到相对准确的车牌位置。图图 3.53.5 腐蚀后的图像腐蚀后的图像第 32 页 共 33 页图图 3.6
27、3.6 平滑图像的轮廓平滑图像的轮廓图图 3.73.7 从对象中移除小对象后图像从对象中移除小对象后图像3.3.23.3.2 车牌分割车牌分割车牌字符分割是车牌自动识别系统中的重要步骤, 这一模块的正确性受到很多因素的影响,最大问题是二值化不彻底使投影图像中字符间的波谷不够分明;其次,车牌污损、反光、光照不均等原因使车牌图像交差,存在大量噪声;再次,车牌边框和铆钉也会造成分割不正确; 还有车牌的前两个字符和后面五个字符之间的间隔符(小圆点)对字符识别有影响;车牌旋转对水平分割有较大影响。本文车牌部分的分割采用的是利用车牌彩色信息的彩色分割法。 使用统计彩色像素第 33 页 共 33 页点的方法
28、分割出车牌区域,确定车牌底色蓝色 RGB 对应的灰度范围,然后统计在行方向的颜色范围内的像素点数量,确定车牌在行方向的区域。然后, 在分割出的行区域内,统计列方向蓝色像素点的数量,最终确定完整的车牌区域。图图 3.83.8 车牌对位的图像车牌对位的图像3.3.33.3.3 对定位后的彩色车牌的进一步处理对定位后的彩色车牌的进一步处理定位后车牌图像是彩色的,会占用较大的存储空间,加重计算机负担。且车辆图片不可避免存在噪声,所以要对图像进行灰度化,二值化以及滤波处理。图像的二值化处理就是将图像上的点的灰度置为两个数值,通常为0 或 255,使整个图像呈现出明显的黑白效果。 也就是将 256 个亮度
29、等级的灰度图像通过适当的门限值选取而获得仍然可以反映图像整体和局部特征的二值化图像。 滤波则是为了除去图像噪声。滤波方法有多种, 本文采取的滤波方法为均值滤波。均值滤波是典型的线性滤波算法,指在图像上对目标像素给一个模板,该模板包括了其周围的临近像素。再用模板中的全体像素的平均值来代替原来像素值。第 32 页 共 33 页图图 3.93.9 车牌的进一步处理车牌的进一步处理3.43.4 字符分割与归一化字符分割与归一化m,n=size(d) ,逐排检查有没有白色像素点,设置1=j=120)&(PY11) PY1=PY1-1; end PY2=MaxY; while (Blue_y(PY2,1)
30、=40)&(PY2y) PY2=PY2+1; end IY=I(PY1:PY2,:,:);%IY 为原始图像 I 中截取的纵坐标在 PY1:PY2 之间的部分 %end 横向扫描 %begin 纵向扫描 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)&(PX1x) PX1=PX1+1; end PX2=x; while (Blue_x(1,PX2)PX1
31、) PX2=PX2-1; end第 33 页 共 33 页 %end 纵向扫描 PX1=PX1-2;%对车牌区域的校正 PX2=PX2+2; dw=I(PY1:PY2,:,:); t=toc;figure(7),subplot(1,2,1),imshow(IY),title(行方向合理区域);figure(7),subplot(1,2,2),imshow(dw),title(定位剪切后的彩色车牌图像)imwrite(dw,dw.jpg); %将图像数据写入到图像文件中filename,filepath=uigetfile(dw.jpg,输入一个定位裁剪后的车牌图像);%读取jpg=strcat
32、(filepath,filename); %将数组filepath,filename水平地连接成单个字符串,并保存于变量 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-
33、g_min)/3); % T 为二值化的阈值m,n=size(b); %返回矩阵 b 的尺寸信息, 并存储在 m、n 中。其中 m 中存储的是行数,n 中存储的是列数。d=(double(b)=T); % d:二值图像imwrite(d,2.车牌二值图像.jpg); %将图像数据写入到图像文件中figure(8);subplot(3,2,2),imshow(d),title(2.车牌二值图像)figure(8),subplot(3,2,3),imshow(d),title(3.均值滤波前)% 滤波h=fspecial(average,3); %建立预定义的滤波算子, average 指定算子的
34、类型,3 为相应的参数第 32 页 共 33 页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=si
35、ze(d); %返回矩阵 b 的尺寸信息, 并存储在 m、n 中。其中 m 中存储的是行数,n 中存储的是列数if bwarea(d)/m/n=0.365 %计算二值图像中对象的总面积 d=imerode(d,se); %图像的腐蚀elseif bwarea(d)/m/n=0.235 %计算二值图像中对象的总面积 d=imdilate(d,se); %实现膨胀操作endimwrite(d,5.膨胀或腐蚀处理后.jpg); %将图像数据写入到图像文件中figure(8),subplot(3,2,5),imshow(d),title(5.膨胀或腐蚀处理后)% 寻找连续有文字的块,若长度大于某阈值,
36、则认为该块有两个字符组成,需要分割d=qiege(d); %切割m,n=size(d); %返回矩阵 b 的尺寸信息, 并存储在 m、n 中。其中 m 中存储的是行数,n 中存储的是列数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第 33 页 共 33 页 k1=j; while s(j)=0 & j=round(n/6.5) val,num=min(sum(d(:,k1+5:k2-5); d(:,k1+num+5)=0; % 分割 endend%
37、 再切割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 widey2第 32 页 共 33 页 flag=1;word1=temp; % WORD 1 end d(:,1:wide)=0;d=qiege(d); endend% 分割出第二个字符word2,d=getword(d);% 分割出第三个字符word3,d=getword(d);% 分割出第四个字符word4,d=g
38、etword(d);% 分割出第五个字符word5,d=getword(d);% 分割出第六个字符word6,d=getword(d);% 分割出第七个字符word7,d=getword(d);figure(9),imshow(word1),title(1);figure(10),imshow(word2),title(2);figure(11),imshow(word3),title(3);figure(12),imshow(word4),title(4);figure(13),imshow(word5),title(5);figure(14),imshow(word6),title(6);
39、figure(15),imshow(word7),title(7);m,n=size(word1); %返回矩阵 b 的尺寸信息, 并存储在 m、n 中。其中 m 中存储的是行数,n 中存储的是列数word1=imresize(word1,40 20);% 商用系统程序中归一化大小为 40*20,此处演示第 33 页 共 33 页word2=imresize(word2,40 20); %对图像做缩放处理,高 40,宽 20word3=imresize(word3,40 20);word4=imresize(word4,40 20);word5=imresize(word5,40 20);wo
40、rd6=imresize(word6,40 20);word7=imresize(word7,40 20);figure(16),subplot(3,7,8),imshow(word1),title(1);subplot(3,7,9),imshow(word2),title(2);subplot(3,7,10),imshow(word3),title(3);subplot(3,7,11),imshow(word4),title(4);subplot(3,7,12),imshow(word5),title(5);subplot(3,7,13),imshow(word6),title(6);sub
41、plot(3,7,14),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 鲁陕苏渝京); %建立自动识别字符代码表,将 t0:9 A:Z 鲁陕苏豫多个字符串组成一个字符数组,每行对应一个字符串,字符数不足的自动补空格SubBw2=zeros(32,16);l=1;f
42、or I=1:7 SubBw2=zeros(32,16); %产生 32*16 的全 0 矩阵 ii=int2str(I);%转换为串第 32 页 共 33 页 t=imread(ii .jpg);%读取图片文件中的数据 SegBw2=imresize(t,32 16,nearest); %对图像做缩放处理,高 32,宽 16,nearest: 这个参数,是默认的, 即改变图像尺寸时采用最近邻插值算法 SegBw2=double(SegBw2)20; if l=1 %第一位汉字识别 kmin=37; kmax=40; elseif l=2 %第二位 AZ 字母识别 kmin=11; kmax=
43、36; else l=3 %第三位以后是字母或数字识别 kmin=1; kmax=36; end for k2=kmin:kmax fname=strcat(字符模板,liccode(k2),.bmp); %把一个行向量转化成字符串 SamBw2 = imread(fname);%读取图片文件中的数据 SamBw2=double(SamBw2)1; for i=1:32 for j=1:16 SubBw2(i,j)=SegBw2(i,j)-SamBw2(i,j); end end % 以上相当于两幅图相减得到第三幅图 Dmax=0;第 33 页 共 33 页 for k1=1:32 for l
44、1=1:16 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;endfigure(5),imshow(dw),title (车牌号码:, Code,Color,b);%子程序: (getword 子程序)fun
45、ction 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 widey2第 32 页 共 33 页 d(:,1:wide)=0; if sum(sum(d)=0 d=qiege(d); % 切割出最小范围 else word=;flag=1; end else word=
46、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 result=d; % (qiege 子程序)function e=qiege(d)m,n=size(d);top=1;bottom=m;left=1;right=n; % initwhile sum(d(top,:)=0 & top1 bottom=bottom-1;endwhile sum(d(:,left)=0 & left=1第 33 页 共 33 页right=right-1;enddd=right-left;hh=bottom-top;e=imcrop(d,left top dd hh); %返回图像的一个裁剪区域