模板比较的车牌识别算法的研究与实现

更新时间:2024-06-14 09:54:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

本科毕业设计(论文)

题目 基于模板比较的车牌识别算法的研究与实现

学院名称

专业班级 学生姓名

信息学院 计科08-1

郝高祥

导师姓名 姚进

二○一二 年 六 月 十一 日

齐鲁工业大学本科毕业设计(论文)原创性声明

本人郑重声明:所呈交的毕业设计(论文),是本人在指导教师的指导下独立研究、撰写的成果。设计(论文)中引用他人的文献、数据、图件、资料,均已在设计(论文)中加以说明,除此之外,本设计(论文)不含任何其他个人或集体已经发表或撰写的成果作品。对本文研究做出重要贡献的个人和集体,均已在文中作了明确说明并表示了谢意。本声明的法律结果由本人承担。

毕业设计(论文)作者签名: 年 月 日

齐鲁工业大学关于毕业设计(论文)使用授权的说明

本毕业设计(论文)作者完全了解学校有关保留、使用毕业设计(论文)的规定,即:学校有权保留、送交设计(论文)的复印件,允许设计(论文)被查阅和借阅,学校可以公布设计(论文)的全部或部分内容,可以采用影印、扫描等复制手段保存本设计(论文)。

指导教师签名: 毕业设计(论文)作者签名: 年 月 日 年 月 日

目 录

摘 要 ............................................................................................ III ABSTRACT .......................................................................................... IV

第一章 绪论 ........................................................................ 1

1.1 课题背景和意义 .......................................................................... 1 1.2 国内外研究现状 .......................................................................... 1 1.3 本文所做主要工作 ....................................................................... 2 1.4章节安排 ....................................................................................... 3

第二章 车牌识别算法和技术简介 ...................................... 4

2.1 图像的灰度化 .............................................................................. 4 2.2 图像的二值化和阈值处理 ........................................................... 4 2.3 图像的倾斜矫正 .......................................................................... 5 2.4字符识别技术 ............................................................................... 5 2.4.1字符识别技术概念 .................................................................... 5 2.4.2常用字符识别技术简介 ............................................................ 6 2.5 模板匹配算法 .............................................................................. 7 2.5.1模板匹配算法原理 .................................................................... 7 2.5.2常用模板匹配算法简介 ............................................................ 8

第三章 系统分析与设计 ...................................................... 9

3.1系统需求及功能分析 .................................................................... 9 3.2功能模块设计 ............................................................................... 9 3.2.1图像预处理模块 ........................................................................ 9

I

3.2.2车牌定位模块 ........................................................................... 9 3.2.3字符分割模块 ......................................................................... 10 3.2.4字符识别模块 ......................................................................... 10 3.3系统流程设计 ............................................................................. 10 3.4技术开发平台 ............................................................................. 11 3.4.1 Microsoft Visual Studio 2008简介 .................................. 11

第四章 系统功能与实现 .................................................... 12

4.1图像预处理模块 ......................................................................... 12 4.1.1图像灰度化 ............................................................................. 12 4.1.2图像的灰度均衡 ...................................................................... 14 4.1.3图像的高斯滤波 ...................................................................... 15 4.2 车牌定位模块 ............................................................................ 18 4.2.1 Sobel边缘检测 ...................................................................... 18 4.2.2 车牌定位分割 ........................................................................ 22 4.3 字符分割模块 ............................................................................ 24 4.3.1 车牌人工矫正 ........................................................................ 24 4.3.2 车牌的灰度化和二值化 ......................................................... 28 4.3.3 车牌字符的分割 ..................................................................... 30 4.4 字符识别模块 ............................................................................ 32 4.5 压缩模板匹配技术 ..................................................................... 34 4.5.1样本集分类预处理 .................................................................. 34 4.5.2压缩模板生成 ......................................................................... 34

II

4.5.3压缩模板集构造与扩展 .......................................................... 35 4.5.4基于压缩模板集的模板匹配 ................................................... 35 4.6 车牌识别系统的测试 ................................................................. 36

结束语 .............................................................................................. 37 参考文献 .......................................................................................... 38 致 谢 .............................................................................................. 39

III

山东轻工业学院2012届本科生毕业设计(论文)

摘 要

车牌识别问题作为现代交通工程领域中研究的重点和热点问题之一,受到越来越多人们的关注。车牌识别系统一般分为车牌定位、牌照上字符的分割和字符识别三个主要组成部分。

从车辆图像中准确的定位分割出车牌区域是车牌识别中最为关键的步骤之一。图像分割是图像提取中的重要组成部分,只有有效地完成分割,才能进一步提取目标特征并识别目标。本文对车牌图片的预处理主要包括车牌图像的二值化、倾斜校正、去除边框干扰、切割出最小范围等步骤。本文通过投影分析和连通域分析,对车牌字符进行分割,并对分割后的字符进行规格化。最后运用基于模板匹配的车牌字符识别算法对其进行字符识别。 课题设计实现一个基于模板对比算法的车牌识别系统,该管理系统主要分为四大模块:图像预处理模块、车牌定位模块、字符分割模块、字符识别模块。该系统的设计是由美国Microsoft公司开发的可视化开发工具Microsoft Visual Studio 2008进行,在代码方面主要是以C#为主的设计语言。

通过测试验证,本车牌识别系统具有一定的实用价值,可以实现特定车牌图像的字符识别。

关键词:字符分割 字符识别 模板识别 车牌识别

III

山东轻工业学院2012届本科生毕业设计(论文)

ABSTRACT

The vehicle license plate image,we separate the character and normalize the character. Through researching the traditional template match algorithm, we supply As one of the focal points and hot problems of studying in the field of modem traffic engineering,the license plate recognition (LPR) has attracted more and more attention.License plate recognition algorithm consists of three modules in general,those are:license plate location,character segmentation and character recognition.

An image from the vehicle positioning accurate segmentation of license plate identification license plate region is the most critical one of the steps. Image segmentation is the extraction of an important component of the partition only effectively in order to further extract and identify the characteristics of the target goal. In this paper, pre-treatment plates include images of license plate image linearization, tilt correction, removal of border interference, such as cutting out the minimum steps. Projection-domain analysis and connectivity analysis, segmentation of license plate characters, and after the partition of standardized characters. Template matching based on the final use of the license plate character recognition algorithm for character recognition.

Program Design and Implementation of an algorithm based on the template contrast license plate recognition system, the management system is divided into four modules: image preprocessing module, the license plate locating module, character segmentation module, the character recognition module. The design of the system developed by Microsoft Corporation USA, visual development tool Microsoft Visual Studio 2008, language in the code is C #.

Verification test, the license plate recognition system has a certain practical value, can achieve a specific license plate image character recognition.

Key words:character segmentation; character recognition; pattern recognition; license plate recognition

IV

山东轻工业学院2012届本科生毕业设计(论文)

第一章 绪论

1.1 课题背景和意义

经济的迅速发展和人民生活水平的不断提高促进了汽车数量的急速增长,截至2011年底我国机动车保有量达到2.25亿辆,交通管理自动化越来越成为亟待解决的问题。现代智能交通系统 (Intelligent Transportation System,ITS)中,车辆牌照识别( License Plate Recognition,LPR)技术是计算机视觉与模式识别技术在交通领域应用的重要研究课题之一,是实现交通管理能够智能化的重要环节,其任务是分析、处理汽车图像,自动识别汽车牌号。LPR系统可以广泛应用于电子收费、出入控制、公路流量监控、失窃车辆查询和停车场车辆管理等需要车牌认证的场合;尤其在高速公路收费系统中,实现不停车收费提高公路系统的运行效率,LPR系统更具有不可替代的作用因而从事LPR技术的研究具有极其重要的现实意义和巨大的经济价值。

LPR系统中的两个关键子系统是车牌定位系统和车牌字符识别系统。 关于车牌定位系统的研究,国内外学者已经做了大量的工作,但实际效果并不是很理想,比如车牌图像的倾斜、车牌表面的污秽和磨损、光线的干扰等都是影响定位准确度的潜在因素。为此,近年来不少学者针对车牌本身的特点、车辆拍摄的不良现象及背景复杂状况,先后提出了许多有针对性的定位方法,使车牌定位在技术和方法上都有了很大的改善。然而现代化交通系统不断提高的快节奏,将对车牌定位的准确率和实时性提出更高的要求,因而进一步加深车牌定位的研究是非常有必要的。车牌字符识别是在车牌准确定位的基础上,对车牌上的汉字、字母、数字进行有效确认的过程,其中汉字识别是一个难点,许多国外的LPR系统也往往是因为汉字难识别而无法打入中国市场,因而探寻好的方法解决字符的识别也是至关重要的。目前已有的方法很多,但其效果与实际的要求相差的很远,难以适应现代化交通系统的高速度、快节奏的要求,因而对字符识别的进一步研究也同样具有紧迫性和必要性。车牌定位与识别方法,总体来说是图像处理技术与车牌本身特点的有机结合,当然也包括模式识别、神经网络、数学形态学、小波分析、模糊理论等知识的有效运用。一个车牌定位与识别系统基本包括:图像预处理、车牌搜索、车牌定位、车牌校正、车牌字符切分和字符识别结果的输出。本文主要研究车牌字符识别的算法问题。

1.2 国内外研究现状

车辆牌照识别技术自1988年以来,人们就对它进行了广泛的研究,目前国内外已经有众多的算法,一些实用的LPR技术已经开始用于车辆监控、出入控制、电子收费等场合。如以色列的Hi.Tech公司,新加坡的Optasia公司,Zamir公司分别研制了名为See/Car system,VLPRS,Insignia的LPR系统,这三种产

1

山东轻工业学院2012届本科生毕业设计(论文)

品所能识别的汽车图像均为单车牌灰度图像,即每一幅灰度图像只含有一个车牌的灰度图像。See/Car系统只能识别字母和数字,不能识别汉字。Insignia是针对欧洲和远东地区实际的车牌识别系统。香港的Asia VisionTechnology Ltd公司的产品慧光车牌号码自动识别系统,此系统能自动侦测、识别及验证行驶或停泊中车辆的车牌号码,并能辨认以文字和数字排列的车牌号码,如含有中、英及韩文的车牌。该软件识别准确率达到95%,要求车牌的宽度至少占整个图像宽度的1/5,识别时间小于1秒。欧洲的LPR产品大多只适合于该国的车牌格式的牌照,不能识别汉字。最近深圳吉通电子有限公司也推出了基于车牌识别技术的系统,这个平台是基于二值特征和灰度特征相结合的识别算法,因此也只能处理灰度图像,此外还有深圳创兴达科技有限公司的车牌识别系统。然而无论是LPR算法还是LPR产品都存在一定的局限性,都需要适应新的要求而不断完善。

虽然国外汽车牌照识别系统研究工作已有一定进展;但并不尽合我国国情;这主要是因为以下五个方面的原因:

(1)我国标准汽车牌照是由汉字、英文字母和阿拉伯数字组成;汉字的识别与字母和数字的识别有很大的不同,从而增加了识别的难度。

(2)国外许多国家汽车牌照的底色和字符颜色通常只有对比度较强的两种颜色,例如韩国,其车牌底色为红色,车牌上的字符为白色;而我国汽车牌照仅底色就有蓝、黄、黑、白等多种颜色;字符颜色也有黑、红、白等若干种颜色。 (3)其他国家的汽车牌照格式,如汽车牌照的尺寸大小,牌照上字符的排列等,通常只有一种;而我国则根据不同车辆、车型、用途;规定了多种牌照格式,例如分为军车、警车、普通车等。

(4)我国汽车牌照的规范悬挂位置不唯一。

(5)由于环境道路或人为因素造成汽车牌照污染严重,这种情况下国外发达国家不允许上路;而在我国仍可上路行驶。

由于我国汽车车牌识别的特殊性;采用任何一种单一识别技术均难以奏效,目前正在研制的无源型汽车牌照智能识别系统综合利用了车辆检测技术、计算机视觉技术、图像处理技术、人工智能技术和人工神经网络技术等,是一个比较有发展前途的车牌识别系统。

1.3 本文所做主要工作

车牌识别系统中,研究的重点和难点是软件算法的设计,本课题所做主要工作是深入研究了车牌识别系统中所需要的图像处理和模式识别的关键算法,基于Visual Studio2008环境,运用C#语言,设计并实现了一个完整的车牌识别系统。

本文阐述了图像预处理算法、字符分割算法和车牌识别算法;改进了图像预处理过程中图像灰度化过程,使图像更加细腻清晰,提高了图像的识别度;采用基于模板匹配的车牌字符识别算法来解决车辆牌照识别问题,针对现有的字符算

2

山东轻工业学院2012届本科生毕业设计(论文)

法来对车牌识别技术的关键算法进行了改进,依据现行的车牌设计原则,采用了一种自适应分割方法,将车牌图像分割7个待识别字符,并对分割后的字符进行了归一化处理;对分割后的字符,通过模板匹配的车牌识别算法进行识别,然后输出最终识别结果。

1.4章节安排

第一章:本章主要介绍了课题的研究背景,国内外研究现状,阐明了本文所做的工作。

第二章:本章主要介绍了车牌识别设计的一些算法和相关技术的原理。 第三章:本章主要对车牌识别系统进行了系统分析,平台技术简介。 第四章:本章主要通过实例对系统各模块的原理和功能实现进行了分析。

3

山东轻工业学院2012届本科生毕业设计(论文)

第二章 车牌识别算法和技术简介

2.1 图像的灰度化

汽车图像样本目前大都是通过摄像机、数码相机等设备拍摄获取的,因而预处理前的图像都是彩色图像。彩色图像包含着大量的颜色信息,不但在存储上开销很大,而且在处理上也会降低系统的执行速度,因此在对图像进行识别等处理中经常将彩色图像转变为灰度图像,以加快处理速度。由彩色转换为灰度的过程叫做灰度化处理。灰度图像就是只有强度信息而没有颜色信息的图像,存储灰度图像只需要一个数据矩阵,矩阵每个元素表示对应位置像素的灰度值。彩色图像的像素色为RGB(R,G,B),灰度图像的像素色为RGB(r,r,r),R,G,B可由彩色图像的颜色分解获得。而R,G,B的取值范围是0~255,所以灰度的级别只有256级。

从图像输入装置得到的图像数据,以浓淡表示,各个像素与某一灰度值相对应。设原图像像素的灰度值 D = ?(x,y),处理后图像像素的灰度值D′=g(χ,у),则灰度增强可表示为:

g(χ,у)=T[?(χ,у)] 或 D′=T(D) 公式(2-1)

要求D和D’都在图像的灰度范围之内。函数T(D)称为灰度变换函数,它描述了输入灰度值和输出灰度值之间的转换关系。一旦灰度变换函数确定,则确定了一个具体的灰度增强方法。图像中每一点的运算就被完全确定下来。灰度变换函数不同,即使是同一图像也会得到不同的结果。选择灰度变换函数应该根据图像的性质和处理目的来决定。选择的标准是经过灰度变换后,像素的动态范围增加,图像的对比度扩展,使图像变得更加清晰、细腻、容易识别。

2.2 图像的二值化和阈值处理

二值图像是指整幅图像画面内仅黑、白二值的图像。在数字图像处理中,二值图像占有非常重要的地位。在实际的车牌处理系统中,进行图像二值变换的关键是要确定合适的阈值,使得字符与背景能够分割开来,二值变换的结果图像必须要具备良好的保形性,不丢掉有用的形状信息,不会产生额外的空缺等等。车牌识别系统要求处理的速度高、成本低、信息量大,采用二值图像进行处理,能大大地提高处理效率。二值化的阈值选取有很多方法,主要分为3类:全局阈值法、局部阈值法和动态阈值法。全局阈值二值化方法是根据图像的直方图或灰度的空间分布确定一个阈值,并根据该阈值实现灰度图像到二值化图像的转化。全局阈值方法的优点在于算法简单,对于目标和背景明显分离、直方图分布呈双峰的图像效果良好,但对输入图像量化噪声或不均匀光照等情况抵抗能力差,应用

4

山东轻工业学院2012届本科生毕业设计(论文)

受到极大限制。局部阈值法则是由象素灰度值和象素周围点局部灰度特性来确定象素的阈值的,Bernsen算法是典型的局部阈值方法,非均匀光照条件等情况虽然影响整体图像的灰度分布却不影响局部的图像性质,局部阈值法也存在缺点和问题,如实现速度慢、不能保证字符笔划连通性、以及容易出现伪影现象等。动态阈7阈值法的阈值选择不仅取决于该象素灰度值以及它周围象素的灰度值,而且还和该象素的坐标位置有关,由于充分考虑了每个像素邻域的特征,能更好的突出背景和目标的边界,使相距很近的两条线不会产生粘连现象。

阈值处理的操作过程是先由用户指定或通过算法生成一个阈值,如果图像中某中像素的灰度值小于该阈值,则将该像素的灰度值设置为0或255,否则灰度值设置为255或0。

阈值化的变换函数表达式如下:

?0,x?Tf(x)???255,x?T 公式(2-2)

式中T 为指定的阈值,比它大就是白,比它小就是黑。

2.3 图像的倾斜矫正

由于拍摄时镜头与牌照的角度、车辆的运动及路面的状况等因素的影响,例如车牌在捕捉图像中的位置不固定,捕捉图像时车头或者镜头发生摆动以及车牌本身就挂歪了或路况较差,都可能使拍摄到的车牌图像有一定的倾斜度,为了正确识别需要进行倾斜度校正,否则将无法进行单个字符的正确分割,字符识别的误差率就会上升。但是若以某个固定的经验值对所有牌照统一进行旋转处理,又会使原本正常的牌照倾斜,导致新的错误。因此有必要针对特定的牌照图像提取其倾斜角度,再加以相应的旋转处理。如何从牌照中自动提取其倾斜度是预处理过程中的一个难点,一般使用Hough变换检测图像中的直线来对图像的倾斜进行相应的矫正。

Hough变换具有明了的几何解析性,一定的抗干扰能力和易于实现并处理等优点:但它存在着计算量大,需要巨大的储存空间等问题,所以不适合用在具有一定实时性要求的图像处理中。针对这个问题,Radon变换可以满足一定实时图像处理的要求。

2.4字符识别技术 2.4.1字符识别技术概念

字符识别技术,就是对输入的带有字符信息的数据通过图像分析和模式识别

5

山东轻工业学院2012届本科生毕业设计(论文)

技术,通过数学运算,输出对应的正确的附带在图像中的字符信息。在智能交通系统中,图像预处理技术,车牌定位技术,字符分割技术都可以认为,是字符识别技术的前期预处理技术,都是为了更好的识别字符信息进行的优化处理。因此,字符识别技术是整个系统最为核心的技术。

字符识别的基本思想也是匹配判别。首先对分割出来的字符进行预处理,并抽取出代表未知字符模式本质的各种特征,然后将此表达形式和预先储存在机器中的标准字符模式特征逐个匹配,最后用一定的判别准则进行判别,找出最接近输入字符模式的特征的标准字符,该表达模式所对应的字符就是识别的结果。

2.4.2常用字符识别技术简介

交通系统发展到现在,随着模式识别技术的进步也在不断的发展和更新,目前字符识别技术常用的一些技术有如下一些:

1)利用字符的结构特征和变换(如Fuorier)进行特征提取。这种方法对字符的倾斜变形有比较好的适应性,但是运算最大。

2)0cRcIptical Character Recognition),OcR发展初期结构方法得到了广泛的研究,其基本思想是把字符图像分割为若干基元,如笔画,拓扑点,结构突变点等,与模板比较,看必要的基元是否存在,不可有的基元是否出现,从而判断所属的类别。

3)基于轮廓结构的方法

轮廓也可以反映字符图像的结构,由于存在内外轮廓和笔画宽度等因素的影响,轮廓提取方法简单,结果确定,因而它仍不失为一种好的结构信息源。轮廓大致有两种描述方法,其一如骨架一样用结构点和弧线构成图的方法来描述,识别也与骨架相同;其二则用标准化后的轮廓的最远、最近点和最大、最小突变点得到一系列结构特征,构成识别规律。轮廓相对于骨架,带入了更精确的位置,也节省了细化的运算量,但它易受到笔画宽度和断线的影响。

4)基于局部图像的结构方法

一些研究表明可以直接从图像中抽取结构特征,标准化后的图像中抽取具有拓扑意义的局部作为特征。所取局部中有空洞、内外凸凹点,这正是人在速读时注意的。用所得的局部图像与模板的对应像素作比较,根据匹配程度得到识别结果。

5)人工神经网络

人工神经网络是仿生学的产物,它通过网络结点间的连接来存储信息并完成分类计算。ANN分类器通过学习,根据训练样本集来调整连接的权值,构造出相应的分类曲面。ANN所具有的学习努力使其能够在复杂的分布中提取出人直观还不能理解的规律,在实际应用中,ANN表现出其优异的分类性能,并在一定程度上成为检验新特征性能的测试基。

6

山东轻工业学院2012届本科生毕业设计(论文)

6)模板匹配

模板匹配是最为直观的一种方法,就如字面所理解的,选用一些样本作为模板,当进行判断时,首先计算待测数据与模板之间的距离,例如它们之间的直线距离等。找出距离最短的那个模板,这个模板的输出值就可以作为该数据对应的输出值。模板匹配的最大优点就是实现简单而直观,但是作为实际应用还是有很多不足的,比如很容易过渡训练,选择合适的模板非常困难,加入一个新的模板可能把之前可以正确识别的样本误判;而且计算时间长,随着训练样本的增加,模板数量也会相应地增加到比较大的数量,而待测字符都要和每个模板进行比较,这对时间的消耗是非常巨大的。

2.5 模板匹配算法 2.5.1模板匹配算法原理

模板匹配法是实现离散输入模式分类的有效途径之一,其实质是通过度量输入模式与模板之间的相似性,取相似性最大的作为输入模式所属类别。此方法是由字符的直观形象抽取特征,用相关匹配原理确定的匹配函数进行判决,也就是将输入字符与标准模板字符在一个分类器中进行匹配。下面以一维图像的处理为例,相关匹配算法描述如下:

设输入字符用输入函数f(x,y)表示,标准模板用函数F(x,y)表示,在相关器中比较后输出为T(x,y)。随机变量用x1,x2 表示,相关器输出为:

T(x1- x2,y1- y2)=!!f(x,y)F(x+(x1- x2),y+(y1- y2))dxdy

当x1=x2, y1=y2,且f(x,y)=F(x,y)时,T(0,0)=!!f2(x,y)dxdy,即为输入字符的自相关函数,且有T(0,0)≥T(x,y)成立。T(x,y)会在T(0,0)处出现主峰,而在其它标准字符处出现一些副峰,只要这些副峰和主峰不相等,就可通过选用适当的阈值进行鉴别,从而判断并识别出待识别的车牌字符。

模板匹配法根据建模时所取特征的不同,有图形匹配、笔划分析、几何特征抽取等几种形式。其中图形匹配法在建模和匹配比较时,都是基于字符的图形块本身进行匹配的,再根据其相似度得出识别结果。用图形匹配原理进行字符识别时,一般都是采用二值化字符:0 表示黑(背景),1 表示白(字符)。其基本思想是为每个字符均建立一个标准模板Ti,待识别的图像用Y 表示,它们的大小均为M×N。将未知的模式逐个与模板匹配,由下式求出相似度Si:

其中,“Y×Ti”是指矩阵中对应象素相乘。上式也可以表述为待识图像上对应点均为“1”的数目与标准模板上“1”点的数目之比。若max Si>λ,则判定Y∈Ti,否则拒绝识别。在这里λ为拒识阈值(一般由实验分析得出)。从理论上讲,这种判别法在一定条件下,错误概率和拒识概率最小。

7

山东轻工业学院2012届本科生毕业设计(论文)

2.5.2常用模板匹配算法简介

1.AD算法

假设待搜索图像S的尺寸为M×M,模板T的尺寸为N×N,M>>N,其中M,N代表图像像素。模板T在图像S上平移,搜索窗口所覆盖的子图记作

sij,

在这i与j为子图的左上角顶点在图S中的坐标。最简单的基于灰度值的方法是利用灰度的绝对差值(absolute difference,简称AD),即计算模板与搜索子图灰度值的L1距离:

D(i,j)???|si,j(m,n)?T(m,n)|m?1n?1NN 公式(2-3)

此种算法的时间复杂度是o(M2/V2),灰度发生变化,算法将可能会失效。 2.差方和算法(sum of squared difference,简称SSD)计算模板与搜索子图灰度值的L2距离:

NND(i,j)???[si,j(m,n)?T(m,n)]2m?1n?1 公式(2-4)

根据L2距离进行相似度匹配。 3.NCC算法

在多数应用场合,实际使用的是SSD的变形——归一化交叉相关算法(normalized cross correlation,简称NCC):

?|(sR(i,j?m,ni,j(m,n)?E(si,j))2||T(m,n)?E(T)|

E(

?(sm,ni,j(m,n)?E(si,j))2?(T(m,n)?E(T))2m,n 公式(2-5)

sij)与E(T)分别是搜索子图

sij与模板图T的灰度平均值。

8

山东轻工业学院2012届本科生毕业设计(论文)

第三章 系统分析与设计

本系统是使用C#语言编写的车牌识别系统,基于模版匹配的车牌字符识别算法来解决车辆牌照识别问题,对于道路交通管理有着一定的实用价值。

3.1系统需求及功能分析

本车牌识别系统主要包括四个模块:图像预处理模块、车牌定位模块、字符分割模块、字符识别模块。

车牌识别系统结构如图3-1所示:

图3-1 车牌识别系统结构图

3.2功能模块设计 3.2.1图像预处理模块

本模块功能是对获取原始图像经过一系列如:灰度化、灰度均衡、高斯滤波等预处理,目的是尽可能的改变图像质量,为车牌区域定位与车牌识别做准备。将彩色图像用加权平均值法转换成灰度图像,直方图均衡增加图像对比,高斯滤波去除噪声干扰,通过以上处理,提高了图像的质量,强化了图像区域。

3.2.2车牌定位模块

本模块包含边缘检测和车牌区域定位两个子功能模块。为了突出汽车牌照的边缘,采用Sobel算法实现图像的边缘检测,寻找图像灰度值发生急剧变化的区

9

山东轻工业学院2012届本科生毕业设计(论文)

域;选择基于边缘检测和投影法相结合的定位方法,提取大致的需要的车牌区域;经过边界调整和去除边框等操作,进一步的精确车牌区域。

3.2.3字符分割模块

本模块功能是根据水平投影和垂直投影,从车牌区域中提取字符,进行字符归一化,统一字符图像的大小,为字符识别做好准备。

3.2.4字符识别模块

本模块功能是对提取后的字符进行编码后识别并输出。我们选用基于模板匹配算法首先将分割后的字符二值化,并将其尺寸大小缩放为字符数据库中模板的大小,然后与所有的模板进行匹配,最后选最佳匹配作为结果。

3.3系统流程设计

本课题研制的车牌识别系统软件主要分为四大块,即图像预处理模块以及车牌定位、车牌字符分割和字符识别模块。

根据系统模块的划分,制定系统流程图如下图所示:

图3-2 系统流程图

原始图像 :载入由停车场数码相机或其它扫描装置拍摄到的图像。 图像预处理:对载入系统的图像进行灰度变换、高斯滤波等预处理以克服图

像干扰。

车牌定位 :进行边缘检测,计算边缘图像的投影面积,寻找峰谷点,大致

确定车牌位置,再计算此连通域内的宽高比,剔除不在域值范围内的连通域,最后得到车牌区域。

字符分割 :利用投影检测的字符定位分割方法得到单个的字符。 字符识别 :利用模板匹配的方法与数据库中的字符进行匹配从而确认出字

10

山东轻工业学院2012届本科生毕业设计(论文)

符,得到最后的汽车牌照,包括英文字母和数字。

3.4技术开发平台

合理选取开发工具,不仅会对系统的开发效率和周期产生重大影响,而且还有可能大幅度降低开发成本,并提高系统的稳定性和可维护性。车牌定位识别功能的开发属于一个较为复杂的图像处理程序,涉及到大量内存处理和与图像处理,因此对于该功能稳定性、可维护性以及系统开销问题要求极为严格。本系统的采用在VS2008 环境下基于C#语言的开发平台。在成熟的算法基础上迅速开展自己的工作,减少编程工作量,有效提高开发效率和程序运行的可靠性。

3.4.1 Microsoft Visual Studio 2008简介

Visual Studio 是微软公司推出的开发环境,Visual Studio 可以用来创建 Windows 平台下的 Windows 应用程序和网络应用程序,也可以用来创建网络服务、智能设备应用程序和 Office 插件。

Microsoft Visual Studio 2008是面向Windows Vista、Office 2007、Web 2.0的下一代开发工具,代号“Orcas”,是对Visual Studio 2005一次及时、全面的升级。 VS2008引入了250多个新特性,整合了对象、关系型数据、XML的访问方式,语言更加简洁。使用Visual Studio 2008可以高效开发Windows应用。设计器中可以实时反映变更,XAML中智能感知功能可以提高开发效率。同时Visual Studio 2008支持项目模板、调试器和部署程序。Visual Studio 2008可以高效开发Web应用,集成了AJAX 1.0,包含AJAX项目模板,它还可以高效开发Office应用和Mobile应用。

VS2008主要技术特点:可视化编程、支持面向对象技术以及支持.NET。VS2008提供了一系列可视化开发工具,如应用程序向导AppWizard、属性窗口等,通过使用可视化编程技术使得Wi ndows 编程更为直观、方便、快捷。VS2008支持的面向对象编程技术包装了windows内在的复杂运行机制,使得Windows编程更为简单易学。

11

山东轻工业学院2012届本科生毕业设计(论文)

第四章 系统功能与实现

本车牌识别系统主要包括四个模块,即图像预处理模块、车牌定位模块、字符分割模块、字符识别模块。下面将显示系统的主要功能模块。

4.1图像预处理模块

摄像时的光照条件,牌照的整洁程度,摄像机的状态(焦距,角度和镜头的光学畸变),以及车速的不稳定等因素都会不同程度的影响图像效果,出现图像模糊,歪斜或缺损,车牌字符边界模糊不清,细节不清,笔画断开,粗细不均等现象,从而影响车牌区域的分割与字符识别的工作,所以识别之前要进行预处理。

4.1.1图像灰度化 1、原理

彩色图像包含着大量的颜色信息,不但在存储上开销很大,而且在处理上也会降低系统的执行速度,因此在对图像进行识别等处理中经常将彩色图像转变为灰度图像,以加快处理速度。由彩色转换为灰度的过程叫做灰度化处理。选择的标准是经过灰度变换后,像素的动态范围增加,图像的对比度扩展,使图像变得更加清晰、细腻、容易识别。

在RGB模型中,如果R=G=B时,则彩色表示一种灰度颜色,其中R=G=B的值叫灰度值,因此,灰度图像每个像素只需一个字节存放灰度值(又称强度值、亮度值),灰度范围为0-255。加权平均法对彩色图像进行灰度化:

根据重要性及其它指标,将三个分量以不同的权值进行加权平均。由于人眼对绿色的敏感最高,对蓝色敏感最低,因此,按下式对RGB三分量进行加权平均能得到较合理的灰度图像。

f(i,j)=0.30R(i,j)+0.59G(i,j)+0.11B(i,j)) 公式(4-1)

本文对输入的图像进行循环扫描,根据灰度公式得到图像灰度,输出灰度图像。

2、代码实现

for (int y = 0; y < nHeight; ++y) {

for (int x = 0; x < nWidth; ++x) {

blue = p[0];

12

山东轻工业学院2012届本科生毕业设计(论文)

green = p[1]; red = p[2];

tt = p[0] = p[1] = p[2] = (byte)(.301 * red + .591 * green + .108 * blue);

rr[red]++;

gg[green]++; bb[blue]++; }

3、效果图

4、结果分析

gray[tt]++; p += 3; }

图4-1 打开的原始图像

图4-2 灰度化后的图像

13

山东轻工业学院2012届本科生毕业设计(论文)

本文采用加权平均值法,在公式的使用上对公式权值进行了精确的改动,使灰度化后的图像更加容易识别,提高了识别率。

4.1.2图像的灰度均衡 1、原理

由于白天和夜晚、晴天和阴天的光线强度有很大差异, 在某些情况下拍摄的牌照出现对比度不足的现象, 使图像的细节分辨不清, 严重干扰字符的识别。因此对于这类牌照必须进行图像增强, 而这种图像增强处理应尽量避免对正常的牌照产生干扰, 为此可采用基于点运算的图像增强方法, 即对图像的灰度级进行变换, 使图像对比度得到调整, 从而达到图像增强的目的。其中, 以直方图均衡法的实验效果最为理想, 他不仅使光照不均的牌照变得较为清晰, 而且对正常牌照进行同样的处理后也能得到较清晰的结果。直方图均衡是把已知灰度概率分布的图像, 经过变换最终演变成具有均匀灰度概率分布的图像。

设一幅图像的象素总数为N, 分为L个灰度级, 用NK代表灰度级rk 出现的频数, 于是第k 个灰度级出现的频率为:

Pr(rk) = NK?N, 0 ≤rk ≤1,k = 0, 1, 2?,L – 1 公式(4-2)

各灰度直方图均衡离散变换公式为:

Sk = T(rk) = ∑kj= 1Pr(rj) = ∑kj= 1NjN(1) 公式(4-3)

因此可以根据原图像的直方图统计量, 求得均衡后各象素的灰度变换值。

2、代码实现

unsafe {

byte* p = (byte*)(void*)Scan0; int nHeight = m_Bitmap.Height; int nWidth = m_Bitmap.Width; SumGray[0] = gray[0];//灰度均衡化

for (int i = 1; i < 256; ++i)//灰度级频度数累加 SumGray[i] = SumGray[i - 1] + gray[i]; for (int i = 0; i < 256; ++i)

SumGray[i] = (int)(SumGray[i] * 255 / count); for (int i = 0; i < 256; i++)

14

山东轻工业学院2012届本科生毕业设计(论文)

{

gray[i] = 0; }

for (int y = 0; y < nHeight; ++y) {

for (int x = 0; x < nWidth; ++x) {

tt = p[0] = p[1] = p[2] = (byte)(SumGray[p[0]]); gray[tt]++; p += 3; } } }

3、效果图

图4-3 灰度均衡后的图像

4、结果分析

本文采用直方图均衡化,把原始图像的灰度直方图从比较集中的某个灰度区间变成在全部灰度范围内的均匀分布,对图像进行非线性拉伸,重新分配图像像素值,使一定灰度范围内的像素数量大致相同,把给定图像的直方图分布改变成“均匀”分布直方图分布。

4.1.3图像的高斯滤波 1、原理

高斯滤波是一种线性平滑滤波,适用于消除高斯噪声,广泛应用于图像处理

15

山东轻工业学院2012届本科生毕业设计(论文)

的减噪过程。通俗的讲,高斯滤波就是对整幅图像进行加权平均的过程,每一个像素点的值,都由其本身和邻域内的其他像素值经过加权平均后得到。

高斯滤波的具体操作是:用一个模板(或称卷积、掩模)扫描图像中的每一个像素,用模板确定的邻域内像素的加权平均灰度值去替代模板中心像素点的值。 一般的模板为3*3或5*5大小,其权值分布如下图:

图4-4 高斯滤波模板图

本文采用5*5的高斯滤波模板对图像进行去噪处理。

2、代码实现

int[,] gaussianMatrix = { { 1, 2, 3, 2, 1 }, { 2, 4, 6, 4, 2 }, { 3, 6, 7, 6, 3 }, { 2, 4, 6, 4, 2 }, { 1, 2, 3, 2, 1 } };//高斯滤波器所选的n=5模板

for (int y = 0; y < nHeight; ++y) {

for (int x = 0; x < nWidth; ++x) {

if (!(x <= 1 || x >= nWidth - 2 || y <= 1 || y >= nHeight - 2)) { pp = p; sum = 0; int dividend = 79; for (int i = -2; i <= 2; i++) for (int j = -2; j <= 2; j++) {

pp += (j * 3 + stride * i);

sum += pp[0] * gaussianMatrix[i + 2, j + 2]; if (i == 0 && j == 0) {

if(pp[0]>240)

{

16

山东轻工业学院2012届本科生毕业设计(论文)

sum += p[0] * 30; dividend += 30; }

else if (pp[0] > 230) {

sum += pp[0] * 20; dividend += 20; }

else if (pp[0] > 220) {

sum += p[0] * 15; dividend += 15; }

else if (pp[0] > 210) {

sum += pp[0] * 10; dividend += 10; }

else if (p[0] > 200) {

sum += pp[0] * 5; dividend += 5; } } pp = p; }

sum = sum / dividend; if (sum > 255) {

sum = 255; }

p[0] = p[1] = p[2] = (byte)(sum); } tt = p[0]; gray[tt]++;

17

山东轻工业学院2012届本科生毕业设计(论文)

p += 3; } }

3、效果图

图4-5 高斯滤波后的图像

4、结果分析

高斯滤波对随机噪声和高斯噪声(尤其是服从正态分布的噪声)的去除效果都比较好,能够有效除去采集过来时图片的随机噪声。

4.2 车牌定位模块

自然环境下,汽车图像背景复杂、光照不均匀,如何在自然背景中准确地确定牌照区域是整个识别过程的关键。首先对采集到的视频图像进行大范围相关搜索,找到符合汽车牌照特征的若干区域作为候选区,然后对这些侯选区域做进一步分析、评判,最后选定一个最佳的区域作为牌照区域,并将其从图象中分割出来。

4.2.1 Sobel边缘检测 1、原理

Sobel算子包含两组3*3的矩阵,分别为横向及纵向,将之与图像作平面卷积,即可分别得出横向及纵向的亮度差分近似值。如果以A代表原始图像,Gx及Gy分别代表经横向及纵向边缘检测的图像,其公式如下:

??10?1???1?2?1??*A?0?*AGx???20?2]Gy?00????????10?1????1?2?1?? and 公式(4-4)

18

山东轻工业学院2012届本科生毕业设计(论文)

图像的每一个像素的横向及纵向梯度近似值可用以下的公式结合,来计算梯度的大小:

G?Gx?Gy22 公式(4-5)

然后可用以下公式计算梯度方向。

?Gy??arctan??G?x???? 公式(4-6)

在以上例子中,如果以上的角度?等于零,即代表图像该处拥有纵向边缘,左方较右方暗。

2、代码实现

int[] marginalMx = { -1, 0, 1, -2, 0, 2, -1, 0, 1 }; //sobel模板 int[] marginalMy = { 1, 2, 1, 0, 0, 0, -1, -2, -1 }; int[,] dlta = new int[nHeight, nWidth];

for (int y = 0; y < nHeight; ++y) //sobel算子 {

for (int x = 0; x < nWidth; ++x) {

if (!(x <= 0 || x >= nWidth - 1 || y <= 0 || y >= nHeight - 1)) {

pp = p; Sx = 0; Sy = 0;

for (int i = -1; i <= 1; i++) for (int j = -1; j <= 1; j++) {

pp += (j * 3 + stride * i);

Sx += pp[0] * marginalMx[(i + 1) * 3 + j + 1]; Sy += pp[0] * marginalMy[(i + 1) * 3 + j + 1]; pp = p; }

m[y, x] = (int)(Math.Sqrt(Sx * Sx + Sy * Sy)); if (m[y, x] > valve / 2) //增强白点

19

山东轻工业学院2012届本科生毕业设计(论文)

{

if (p[0] > 240) {

m[y, x] += valve; }

else if (p[0] > 220) {

m[y, x] += (float)(valve * 0.8); }

else if (p[0] > 200) {

m[y, x] += (float)(valve * 0.6); }

else if (p[0] > 180) {

m[y, x] += (float)(valve * 0.4); }

else if (p[0] > 160) {

m[y, x] += (float)(valve * 0.2); } } float tan; if (Sx != 0) {

tan = Sy / Sx; }

else tan = 10000;

if (-0.41421356 <= tan && tan < 0.41421356)//角度为-22.5度到22.5度之间

{

dlta[y, x] = 0; }

else if (0.41421356 <= tan && tan < 2.41421356)//角度为22.5度到67.5度之间

20

山东轻工业学院2012届本科生毕业设计(论文)

{

dlta[y,x]=1; }

else if (tan >= 2.41421356 || tan < -2.41421356)//角度为67.5度到90度之间或-90度到-67.5度

{

dlta[y,x]= 2; 3、效果图

} else {

dlta[y, x] = 3;//m[y,x] = 0; } } else

m[y, x] = 0; p += 3; if (m[y, x] > 0) {

sumCount++; sumM += m[y, x]; } } }

图4-6 Sobel边缘检测后的图像

21

山东轻工业学院2012届本科生毕业设计(论文)

4、结果分析

Sobel算子根据像素点上下、左右邻点灰度加权差,在边缘处达到极值这一现象检测边缘。对噪声具有平滑作用,提供较为精确地边缘方向信息,边缘定位精度不够高,但对于车牌的粗略定位还是能起作用的,效果比较好,尤其是对高斯滤波过后的图片。

4.2.2 车牌定位分割 1、原理

采用纹理跳变进行扫描,行扫描法是利用了车牌的连续特性。车牌区域有连续7个字符,而且字符与字符之间的距离在一定范围内。定义从目标到背景或者从背景到目标为一个跳变。牌照区域相对于其它非车牌区域跳变多,而且间距在定范围内和跳变次数大于一定次数,并且连续满足上述要求的行要达到一定的数目。

按从下到上的顺序扫描,对图像的每一行进行从左向右的扫描,碰到跳变点记录下当前位置,如果某行连续20个跳变点以上,并且前一个跳变点和后一个跳变点的距离在30个像素内,就记录下起始点和终止点位置,如果连续有10行以上这样的跳变点,则认为该区域就是车牌预选区域。

本文先对图片从头扫描到底,对符合规律跳变的点存入数组countMatch,也记入行列数至数组mark;对数组countMatch进行去噪,除去不符合连续跳变的地方和上半部分面积;对数组countMatch进行2*6的粗定位;通过处理定位车牌四边,并在图上做出标记,分割出车牌区域并显示。

2、代码实现

if (m[y + i, pWH - 1] > 0 && m[y + i, pWH] <= 0)//白-->黑 {

pWHR = pWH - 1; if (pWL != pWHL) {

if ((Wmin <= (pWR - pWL) && (pWR - pWL) <= Wmax) || (Bmin <= (pWHL - pWR - 1) && (pWHL - pWR - 1) <= Bmax) || (Wmin <= (pWHR - pWHL) && (pWHR - pWHL) <= Wmax))

{

if (-pWL + pWHR < 30) //记录该点 {

double rate1 = Wmax / (Math.Abs((pWR - pWL) -

22

山东轻工业学院2012届本科生毕业设计(论文)

(Wmax - Wmin)) / 2 + 1);

double rate2 = Wmax / (Math.Abs((pWHR - pWHL) - (Wmax - Wmin)) / 2 + 1);

double rate3 = Bmax * 3 / (pWHL - pWR);

mark[y / div, pWL + (pWR - pWL) / 2] += (int)(rate3 + rate2 + rate2);

} }

if (pWR - pWL > 2 * lv) {

for (int t = pWL + lv / 2; t < pWR - lv / 2; t += lv) //连续白(或)宽于一个字符宽度

{

countMatch[y / div, t / lv] = -1; } }

if (pWHL - pWR - 1 > 2 * lv) {

for (int t = pWR + lv / 2; t < pWHL - lv / 2; t += lv) {

countMatch[y / div, t / lv] -= 1; } }

if (pWHR - pWHL > 2 * lv) {

for (int t = pWHL + lv / 2; t < pWHR - lv / 2; t += lv) {

countMatch[y / div, t / lv] -= 1; } } }

3、效果图

23

山东轻工业学院2012届本科生毕业设计(论文)

图4-7 标记出车牌区域的图像

图4-8 分割出来的车牌图像

4、结果分析

车牌定位采用纹理跳变法实现的,在算法中采用了2*6的粗定位,能够准确地将车牌区域定位并分割出来。

4.3 字符分割模块

完成牌照区域的定位后,再将牌照区域分割成单个字符,然后进行识别。字符分割一般采用垂直投影法,由于字符在垂直方向上的投影必然在字符间或字符内的间隙处取得局部最小值的附近,并且这个位置应满足牌照的字符书写格式、字符、尺寸限制和一些其他条件,利用垂直投影法对复杂环境下的汽车图像中的字符分割有较好的效果。

4.3.1 车牌人工矫正 1、原理

由于车牌图像不是水平的,对分割和识别会产生影响,需要人工对其矫正,本文采用Hough变换进行图像矫正。

Hough变换思想为:在原始图像坐标系下的一个点对应了参数坐标系中的一条直线,同样参数坐标系的一条直线对应了原始坐标系下的一个点,然后,原始坐标系下呈现直线的所有点,它们的斜率和截距是相同的,所以它们在参数坐标

24

山东轻工业学院2012届本科生毕业设计(论文)

系下对应于同一个点。这样在将原始坐标系下的各个点投影到参数坐标系下之后,看参数坐标系下有没有聚集点,这样的聚集点就对应了原始坐标系下的直线。

对于Oxy 平面上给定的一条直线y = ux + v, (其中u和v 分别为直线的斜率和直线的截距), 对应于一个数对(u, v), 反之, 给定一个数对(u, v) 则对应于一条直线y =ux + v, 即: 如Oxy 平面上有一条直线y = ux + v, 那就和Ouv 平面上的一个点(u, v) 一一对应, 同理,Ouv 平面上的一条直线v= - xu+ y 和Oxy 平面上有一个点(x, y) 也是一一对应的。如果Oxy 平面上有一条直线y = ux + v, 那上面的每个点都对应于Ouv 平面上的一条直线, 这些直线相交于一点, 利用这个重要性质可以检测共线点。由于直线的斜率可能会接近无穷大, 为了使变换域有意义, 需要采用直线方程的法线式表示: p = xcos H+ ysin H, 其中, p 为直线到坐标系原点的距离, H为直线法线与X 轴的夹角。于是极坐标上的一点对应了Oxy 平面坐标上的一条直线, 而Oxy平面坐标上的一点对应于极坐标上的一条曲线, 而且易知Oxy 平面坐标上的共线点所对应的极坐标上的所有曲线相交于一点, 且由于Oxy 平面坐标上的一条直线上的各点都对应于极坐标上的一点, 如果对过这一点的曲线进行计数,结果会是比较大的数据。通过这一原理, 可以很方便地提取出图像上的直线。在提取车牌倾斜度时, 先对所有列进行扫描, 提取出所有第一次从0→1的可能边界点, 再进行hough变换, 得到的直线的倾斜度即为所求。

本文程序获取输入的角度量,根据原始图像,循环逐点获取变换后的点,输出变换后的图片。

2、代码实现

for (int i = 0; i < nHeight; i++) {

for (int j = 0; j < nWidth; j++) {

tempHeight = i - halfHeight; tempWidth = j - halfWidth;

tempX = tempWidth * myCos - tempHeight * mySin; tempY = tempHeight * myCos + tempWidth * mySin; if (tempWidth > 0) {

xr = (int)tempX; } else {

25

山东轻工业学院2012届本科生毕业设计(论文)

xr = (int)(tempX - 1); }

if (tempHeight > 0) {

yr = (int)tempY; } else {

yr = (int)(tempY - 1); }

p1 = tempX - xr; q1 = tempY - yr;

tempWidth = xr + halfWidth; tempHeight = yr + halfHeight;

if (tempWidth < 0 || (tempWidth + 1) >= nWidth || tempHeight < 0 || (tempHeight + 1) >= nHeight)

{

p[0] = p[1] = p[2] = 0; } else {

byte bian1 = 0, bian2 = 0, bian3 = 0; pp = pp1;

pp += (tempWidth * 3 + stride * tempHeight); bian1 = (byte)((1.0 - q1) * (1.0 - p1) * pp[0]); bian2 = (byte)((1.0 - q1) * (1.0 - p1) * pp[1]); bian3 = (byte)((1.0 - q1) * (1.0 - p1) * pp[2]); pp = pp1;

pp += ((tempWidth + 1) * 3 + stride * tempHeight); bian1 = (byte)((1.0 - q1) * p1 * pp[0] + bian1); bian2 = (byte)((1.0 - q1) * p1 * pp[1] + bian2); bian3 = (byte)((1.0 - q1) * p1 * pp[2] + bian3); pp = pp1;

pp += ((tempWidth + 1) * 3 + stride * (tempHeight + 1)); bian1 = (byte)(q1 * p1 * pp[0] + bian1);

26

山东轻工业学院2012届本科生毕业设计(论文)

bian2 = (byte)(q1 * p1 * pp[1] + bian2); bian3 = (byte)(q1 * p1 * pp[2] + bian3); pp = pp1;

pp += ((tempWidth) * 3 + stride * (tempHeight + 1)); p[0] = bian1 = (byte)(q1 * ((1.0 - p1) * pp[0]) + bian1); p[1] = bian2 = (byte)(q1 * ((1.0 - p1) * pp[1]) + bian2); p[2] = bian3 = (byte)(q1 * ((1.0 - p1) * pp[2]) + bian3); }

3、效果图

} p += 3; }

p += nOffset;

图4-9 人工矫正

图4-10 矫正前的图像

图4-11 矫正后的图像

27

山东轻工业学院2012届本科生毕业设计(论文)

4、结果分析

本文采用人工输入角度进行矫正,基本实现矫正功能,对后面的分割识别奠定了基础。

4.3.2 车牌的灰度化和二值化 1、原理

图像二值化就是将图像上的像素点的灰度值设置为0或255,也就是将整个图像呈现出明显的黑白效果。

将256个亮度等级的灰度图像通过适当的阈值选取而获得仍然可以反映图像整体和局部特征的二值化图像。在数字图像处理中,二值图像占有非常重要的地位,首先,图像的二值化有利于图像的进一步处理,使图像变得简单,而且数据量减小,能凸显出感兴趣的目标的轮廓。其次,要进行二值图像的处理与分析,首先要把灰度图像二值化,得到二值化图像。

所有灰度大于或等于阀值的像素被判定为属于特定物体,其灰度值为255表示,否则这些像素点被排除在物体区域以外,灰度值为0,表示背景或者例外的物体区域。

此处车牌图片的二值化采用的是自适应阈值二值化,它根据公式得出阈值, 根据车牌字符和车牌背景的区分,区分成黑底白字和白底黑字2种,将字符凸现出来。

2、代码实现

//求阈值 int va;

if (count1 < count2)

{ //白底黑字

va = Mr - count1 / count2 * Math.Abs(g1 - Mr); }

else //黑底白字

va = Mr + count2 / count1 * Math.Abs(g2 - Mr);

BitmapData bmData = c_Bitmap.LockBits(new Rectangle(0, 0, c_Bitmap.Width,c_Bitmap.Height),ImageLockMode.ReadWrite,PixelFormat.Format24bppRgb);

unsafe {

int stride = bmData.Stride;

28

山东轻工业学院2012届本科生毕业设计(论文)

System.IntPtr Scan0 = bmData.Scan0; byte* p = (byte*)(void*)Scan0;

int nOffset = stride - c_Bitmap.Width * 3; int nWidth = c_Bitmap.Width; int nHeight = c_Bitmap.Height; for (int y = 0; y < nHeight; ++y) {

for (int x = 0; x < nWidth; ++x) {

if (p[0] > va) {

p[0] = p[1] = p[2] = 255; } else

p[0] = p[1] = p[2] = 0; p += 3; }

p += nOffset; } }

3、效果图

图4-12 灰度化的车牌图像

图4-13 二值化的车牌图像

4、结果分析

此处车牌图片的二值化采用的是自适应阈值二值化,它根据车牌字符和车牌背景的区分,能有效地将字符突出出来,对车牌的分割有着很大的优点。

29

山东轻工业学院2012届本科生毕业设计(论文)

4.3.3 车牌字符的分割 1、原理

由于铆钉和周围其它干扰像素的原因,使得垂直投影中,铆钉会对图像的分割起干扰作用,所以要先去除铆钉和确定字符上下界。

首先将图片看成是一个平面,将图片向水平方向投影,这样有字的地方的投影值就高,没字的地方投影得到的值就低。这样会得到一根曲线,像一个又一个山头。然后,用一根扫描线从下向上扫描。这个扫描线会与图中曲线存在交点,这些交点会将山头分割成一个又一个区域。车牌图片一般是7个字符,因此,当扫描线将山头分割成七个区域时停止。然后根据这七个区域向水平线的投影的坐标就可以将图片中的七个字符分割出来。

然后对图像进行垂直投影,竖直方向从下到上扫描出6个大的间隙,再根据字符的宽度特点,确定其字符位置。

切割出字符后,将文字的外边框按比例线性放大或缩小成为规定尺寸的文字图像;简单的采用图像的放大和缩小算法,实现所有字符的同大小,为下一步识别做好准备。并将已预处理过后相应的字符归一化后后台保存起来,为下一步车牌识别准备

本文是对二值化后的车牌图像循环取得水平的白点个数,依据连续原则判断出精确车牌的上下界,在确定上下界范围中循环取得垂直的白点个数,循环从下界取值,到一定值时出现7段低于阈值时,按一定原则分割确定字符,在车牌图片加辅助线,分割字符,对字符进行归一化,依次存储并显示。

2、代码实现

if ((Xl - Xh) > 1 && (Yr - Yl) > 1)//确定边界 {

Rectangle sourceRectangle = new Rectangle(Yl, Xh, Yr - Yl, Xl - Xh);

c_Bitmap2=c_Bitmap1.Clone(sourceRectangle, PixelFormat.DontCare);

BitmapData bmData2 = c_Bitmap2.LockBits(new Rectangle(0, 0, c_Bitmap2.Width,c_Bitmap2.Height),ImageLockMode.ReadWrite,PixelFormat.Format24bppRgb);

int stride2 = bmData2.Stride;

System.IntPtr Scan02 = bmData2.Scan0; byte* p2 = (byte*)(void*)Scan02;

int nOffset2 = stride2 - c_Bitmap2.Width * 3;

30

山东轻工业学院2012届本科生毕业设计(论文)

int nWidth2 = c_Bitmap2.Width; int nHeight2 = c_Bitmap2.Height; for (int y = 0; y < nHeight2; ++y) {

for (int x = 0; x < nWidth2; ++x) {

if (x == (Yr1[0] - Yl) || x == (Yl1[0] - Yl) || x == (Yr1[1] - Yl) || x == (Yl1[1] - Yl) || x == (Yr1[2] - Yl) || x == (Yl1[2] - Yl) || x == (Yr1[3] - Yl) || x == (Yl1[3] - Yl) || x == (Yr1[4] - Yl) || x == (Yl1[4] - Yl) || x == (Yr1[5] - Yl) || x == (Yl1[5] - Yl) || x == (Yr1[6] - Yl) || x == (Yl1[6] - Yl) || x == (Yr1[7] - Yl) || x == (Yl1[7] - Yl))

{

if (x != 0) {

p2[2] = 255; p2[0] = p2[1] = 0; } } p2 += 3; }

p2 += nOffset2; }

c_Bitmap2.UnlockBits(bmData2); panel2.Invalidate();

if ((Xl - Xh) > 1 && (Yr1[0] - Yl1[0]) > 1)//字符归一化 {

Rectangle sourceRectangle0 = new Rectangle(Yl1[0], Xh, Yr1[0] - Yl1[0], Xl - Xh);

z_Bitmap0=c_Bitmap1.Clone(sourceRectangle0, PixelFormat.DontCare);

z_Bitmaptwo[0]=c_Bitmap.Clone(sourceRectangle0, PixelFormat.DontCare);

objNewPic = new System.Drawing.Bitmap(z_Bitmaptwo[0], 9, 16); z_Bitmaptwo[0] = objNewPic; panel10.Invalidate(); }

31

山东轻工业学院2012届本科生毕业设计(论文)

3、效果图

图4-14车牌字符指示图像

图4-15 字符分割后的图像 图4-16经过归一化的字符

4、结果分析

本文采用系统切割出来的字符作为模板,对于一些实际情况有着良好的适应性,提高字符识别率。

4.4 字符识别模块 1、原理

字符识别方法目前主要有基于模板匹配算法和基于人工神经网络算法。 我们选用基于模板匹配算法首先将分割后的字符二值化,并将其尺寸大小缩放为字符数据库中模板的大小,然后与所有的模板进行匹配,最后选最佳匹配作为结果。

运行该程序后,会将上一步存储的字符与已存好的模板进行匹配,把其像素点的相同点数和白点的个数作为依据,采用AD算法,求提取的模板和原来模板像素点灰度绝对值之差,并统计差的和值,将该和作为2幅图像的距离,选择距离最小者输出结果,能够针对一部分车牌图像进行很好的识别。

2、代码实现

for (int i = 0; i < 39; i++)//车牌字母或数字比较识别 {

byte* p = (byte*)(void*)Scan; BitmapData gb);

int stride1 = bmData1.Stride;

32

bmData1=font[i].LockBits(new Rectangle(0, 0,

font[i].Width,font[i].Height),ImageLockMode.ReadWrite,PixelFormat.Format24bppR

山东轻工业学院2012届本科生毕业设计(论文)

System.IntPtr Scan1 = bmData1.Scan0; byte* p1 = (byte*)(void*)Scan1; int nOffset1 = stride1 - font[i].Width * 3; int nWidth1 = font[i].Width; int nHeight1 = font[i].Height; int ccc0 = 0, ccc1 = 0; lv = 0;

}

3、效果图

for (int y = 0; y < nHeight; ++y) {

for (int x = 0; x < nWidth; ++x) {

if ((p[0] - p1[0]) != 0) lv++;

if (p[0] == 255) { ccc0++; } if (p[1] == 255) { ccc1++; } p1 += 3; p += 3; }

p1 += nOffset; p += nOffset; }

lv = lv + Math.Abs(ccc0 - ccc1);//模板匹配 if (lv < lc) { lc = lv; con = i;

zf[j] = xianshi[con]; }

font[i].UnlockBits(bmData1); 33

本文来源:https://www.bwwdw.com/article/9fu6.html

Top