基于Opencv的车牌识别工具研究与实现

更新时间:2024-06-16 05:46:01 阅读量: 综合文库 文档下载

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

摘 要

近年来随着智能交通系统的全面实施,车牌自动识别(License Plate Recognition,LPR)技术应用越来越广泛。车牌识别作为目前智能交通系统不可或缺的一部分,已经普遍的应用到各个领域。

本文主要研究汽车牌照自动识别技术,通过研究国内现有车牌特征,使用相关识别算法,利用VC++和OpenCV(计算机视觉库)等开源库,开发了一个车牌识别工具。该工具可以使用数字图像处理技术,模式识别,计算机视觉分析技术,对图像进行处理、定位、分割,从而实现车牌识别,准确获取车牌号码。

本文使用水平分割、垂直分割和车牌大小归一化技术对预处理之后的图像进行定位,同时利用 OpenCV库中的边缘检测方法将已定位好的车牌区域进行分割、保存,对已经分割的图像使用字符切割算法进行切割,最终将切割的字符保存为单个的字符图像,使用已有的字符模板进行特征值匹配,实现字符识别功能。

最后本文对已经完成的车牌识别工具进行了实验,实验结果表明该工具可以快速准确的进行车牌号码识别。

关键词: OpenCV;车牌定位;车牌识别

ABSTRACT

In recent years, with the full of implementation intelligent transport systems, automatic license plate recognition (License Plate Recognition, LPR) technology is widely applied. License Plate Recognition as the current integral part of intelligent transportation systems has been widely applied to various fields.

This paper studies the automatic license plate recognition technology, by studying the characteristics of existing domestic license to use the relevant recognition algorithm, using VC++ and OpenCV (computer vision library) and other open source library, developed a license plate recognition tools. The tool can be used on digital image processing, pattern recognition, computer vision analysis of image processing, positioning, segmentation, enabling license plate recognition, license plate number to obtain accurate.

This article uses the horizontal split, vertical split, and the license plate size normalization after the image preprocessing techniques to locate, while using OpenCV library edge detection method will have good positioning region segmentation, preservation, has been the use of image segmentation Save character cut algorithm for cutting, the character will eventually cut into individual character images, using existing character template feature values match, the realization character recognition function.

Finally, on the license plate recognition tools have been completed experimental results show that the tool can be quickly and accurately identify the license plate number.

Keywords: OpenCV; license plate location; license plate recognition

目 录

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

1.1课题背景及研究意义 .......................................... 1 1.2国内外的研究现状 ............................................ 1 1.3本文主要研究内容 ............................................ 1 1.4本章小结 .................................................... 2

第2章 相关技术简介 ............................................................................ 3

2.1 OPENCV计算机视觉函数库 ..................................... 3 2.2车牌图像及字符的先验知识 .................................... 4 2.3车牌自动识别技术 ............................................ 5 2.4本章小结 .................................................... 7

第3章 车牌识别软件的总体设计 ........................................................ 8

3.1 需求概述 .................................................... 8 3.2 软件总体结构设计 ............................................ 8 3.3车牌识别的工作流程 .......................................... 9 3.4本章小结 .................................................... 9

第4章 车牌识别技术实现 .................................................................. 10

4.1车牌图像预处理技术 ......................................... 10 4.2 车牌图像分割及识别技术 ..................................... 13 4.3 本章小结 ................................................... 17

第5章 系统实现及测试 ...................................................................... 18

5.1系统界面 ................................................... 18 5.2系统测试 ................................................... 18 5.3本章小结 ................................................... 19

结束语 ...................................................................................................... 20 致 谢 ...................................................................................................... 21 参考文献 .................................................................................................. 22

三江学院2014届本科生毕业设计(论文)

第1章 绪论

1.1课题背景及研究意义

随着我国经济的快速发展,汽车数量也逐年大幅度增长,公路交通基础设施在我国起到决定性的作用。目前,人们利用各种科技手段,来提高智能交通管理效率和交通安全。在智能交通领域中,能够对车辆进行统一的智能管理是智能交通发展的方向,针对车辆的管理主要在于对车牌号的识别,因为车牌是一辆汽车的准确标识。目前主要通过计算机视觉识别方法和模式识别对车牌进行定位和识别。车牌识别也应用在日常管理方面,可如:检测交通流量、高速公路收费、停车场收费等。所以,无论从经济、理论、价值等方面,还是从实现智能交通系统的技术方面,都首先需要进行深入研究车牌识别。

1.2国内外的研究现状

相对而言车牌识别研究较早的国外,已经有很多可以借鉴的成果,并且部分应用已经成熟。由于我国车牌色彩的多样、种类繁多,国外的车牌识别系统并不适合我国实际情况。近年来,全国有很多高校和科研院所都在这方面进行研究,如上海交通大学,西安交通大学,同济大学,浙江大学等,对其技术进行不断革新,以适应不同场合。

(1)美国和欧洲等发达国家在上个世纪80年代后期及90年代初期,相继开展了车牌识别系统的应用研究工作。Eun Ryung Lee[1]等根据图像中不同的颜色信息,对车牌进行定位。R.Parisi[2]等利用DSP和神经网络技术来提高识别效果。

(2)1998年北京汉王科技公司研制的嵌入式、一体化的车牌识别技术产品——“汉王眼”[3]是一个较为实用化的产品,它采用DSP芯片作为识别算法运行的硬件平台,在不需要外力支持情况下就能完成闪光照明、采集图像、识别车牌等功能。

(3)中国香港Asia Vision Technology公司在2001年开发了VECON车牌识别产品,1992年新加坡Optasia公司已经开发的VLPRS产品[4]等,都是相对成熟的产品应用于实际生活中。

随着图像处理和模式识别技术的不断成熟,课题的研究不断的引入了许多新的方法。目前国际上,在实际生活中已经应用的车牌识别技术在识别率方面有了很大进步,识别速度相对上世纪末较快。但由于外界环境光线变化、光路中有灰尘、季节环境变化及车牌本身被污染而模糊等条件的影响,使得车牌识别技术得不到很好的应用,相信这些问题将通过不断的努力来解决。

1.3本文主要研究内容

在本文中,利用图像处理技术识别车牌图像,通过预处理捕获图像,车牌定位,字符分割,识别的研究方法,并且使用VC++(计算机编程语言)和OpenCV

1

三江学院2014届本科生毕业设计(论文)

(国际开放的计算机视觉库)实现一个车牌识别基础工具。与车牌识别相关的图像处理技术,包括:

(1)图像预处理:收集到的车牌图像进行初步处理,以提高识别率。 (2)车牌定位:根据预处理图像的特征采取某些算法,来识别车牌区域。 (3)字符分割:对被划分好的固定区域,将其中切分出来的字符图像,保存为单个的字符图片。

(4)字符识别:通过模板匹配算法,对每个字符图像的字符识别。

1.4本章小结

首先阐述本文研究背景,表明了课题的意旨,同时就目前国内外汽车牌照识别进行介绍。最后,通过对汽车牌照识别工具的实现过程入手介绍了研究内容。

2

三江学院2014届本科生毕业设计(论文)

第2章 相关技术简介

本章重点介绍了与车牌识别相关的具体技术,以及使用VC++中MFC图像库和OpenCV计算机视觉库来处理图像等技术。

2.1 OPENCV计算机视觉函数库 2.1.1OpenCV 简介

OpenCV(Open Source Computer Vision Library),是开源跨平台的计算机视觉库,由Intel公司在1999年建立,目前由Willow Garage提供技术支持[5]。OpenCV是一种由一系列C、C++函数组成的轻量级、高效的视觉处理算法和代码仓库,提供了多种语言移植方式,包括:Python、Ruby、Matlab等。

OpenCV拥有包括500多个C函数的跨平台的中、高层API。它不依赖于其它的外部库——尽管也可以使用某些外部库。OpenCV为Intel Integrated Performance Primitives(IPP)提供了透明接口。这意味着如果有为特定处理器优化的IPP库,OpenCV将在运行时自动加载这些库。其作为开放的数字图像处理和计算机视觉软件平台,具备许多的鲜明特征[6],其主要使用C/C+ +语言源代码计算机视觉库,其目的是开发实时的应用程序。对于计算机硬件,图像管理和操作系统,OpenCV也是完全独立的。同时在图像/视频载入,访问和保存模块也很常见。OpenCV中还具有顶部和底部的应用程序包,用户可以直接使用。

2.1.2 OpenCV结构

OpenCV主要由六个模块构成[7],包括:Cv、CvAux、CvCAM、HighGui、ML和CvCore,其中主要模块为四个,分别为:CV(图像处理和视觉算法)、CvCore(基本数据结构与核心功能)、HighGUI(图像视频输入输出)、ML(统计分类器),如图 2-1 所示。

CV

图像处理和视觉算法

ML 统计分类器

HighGUI 图像视频输入输出

CvCore

基本结构和算法、XML支持、绘图函数

图2-1 OpenCV结构图

3

三江学院2014届本科生毕业设计(论文)

其中:

(1)Cv,图像处理和视觉算法模块,是OpenCV库中的最核心的模块,包含了图像处理非常多的算法和功能,这些算法和功能覆盖了包括图像处理、模式别等,主要用于图像处理和视觉算法。

(2)CvCore,基本数据结构模块,是其他模块的基础,也是整个库之中最基本的模块,它里面定义了整个库中的几乎所有的函数用到的数据类型和结构,其中还实现了一些基本算法和数据的基本运算。

(3)HighGUI,图像视频输入输出模块,该库是整个库之中唯一的具有图形界面的模块,它提供图像或者视频数据与用户交互的功能,用户可以使用这个模块中的函数,来实现视频图像的显示和处理。本文中的图像显示部分就用到了这个模块。

(4)ML模块,统计分类模块,是计算机学习库,包含一些基于统计的分类和聚类工具。

2.1.3OpenCV应用

OpenCV致力于真实世界的实时应用,它被广泛应用于许多领域,如人机互动、图象分割、人脸识别、动作识别、运动跟踪、汽车安全驾驶[8]等等。

OpenCV在车牌识别应用过程中能实现许多功能[9],例如:图象分割,对图像进行基本的数据处理,包括图像的转换变换、阈值分割、图像旋转和各种函数滤波等,同时对不同的结构和序列图像进行分析;运动跟踪,图像数据和视频图像的各种基本操作,包括数据的分配、复制和释放、视频设备的打开和关闭以及视频文件的播放和录制等;人机互动,具有视频中的一些基本的图形界面功能,能够方便地与用户进行数据交互,这些都包括响应和处理用户发出的鼠标或者键盘命令等。

2.2车牌图像及字符的先验知识 2.2.1车牌先验知识

在我国的交通管理规定中,所有行驶的机动车都要在交通管理部分进行登记和安装相应的车牌号码。目前,在我国内使用的车牌依然是按照1992年的管理规定来执行的。该牌标准为GA36-1992《中华人民共和国机动车号牌》。它对车牌的方方面面做了详细的规定和阐述,十分明确地说明了包括车牌的大小、颜色等各方面的要求。

2.2.2车牌字符规律

我国汽车现行使用的牌照主要有这么几种:小型车专用牌、大型车专用牌、军车车牌和国外驻华机构专用车牌。这些车牌的车牌背景颜色和车牌字符颜色搭配还各有不同,上述车型相对应,在这么多类型的车牌之中,蓝底白字车牌占绝

4

三江学院2014届本科生毕业设计(论文)

大部分。在我国,车牌标准格式如图2-2 所示。按照标准车牌大小是440*140mm,其中单个的字符大小是45*90 mm(宽*高) ,第二和第三个字符之间是34mm,小圆点位置在车牌高度的中心点,宽度是 10mm,它也刚好在第二个和第三个字符之间距离的中心点。车牌格式是:X1X2X3X4X5X6X7X8,加上一个点符号共有8个字符。其中X1是中国国内各个省、直辖市、民族自治区和军区的简称,比如吉林,简称“吉”,南京军区,简称“南”。X2是大写的英文字母字符,X3是点字符,接着X4X5是字母或者数字,X6X7X8这最后三位全部是数字字符。如图 2-2 所示:

图2-2 车牌尺寸标准格式

从上面所述我们可以知道,车牌上的字符都是比较规则的,各个字符的大小、位置、字符的笔画粗细等都是有既定标准的,这些基于车牌制作标准的车牌先验知识十分有助于精确分割字符。

2.3车牌自动识别技术 2.3.1车牌定位算法

车牌定位准不准确直接影响到后续的切分和识别,因为车牌定位是最基本的,也是第一步,同时对系统识别率起到关键作用。车牌定位是车牌原始输入图像,通过数字图像处理,模式识别,从而准确地获得图像中车牌区域。车牌的特征不同对应的算法也不尽相同,但是基本上所有算法都有一个共同点就是利用车牌独特的特性进行判别。目前常用的车牌定位算法[10]大致可以分为以下几大类:基于边缘检测的车牌定位算法,基于车牌颜色特征的车牌定位算法,基于机器学习的定位算法。

(1)基于边缘检测的车牌定位算法:主要是检测图像中的边缘,准确地定位

5

三江学院2014届本科生毕业设计(论文)

图像边缘,进行边界分析。边缘检测能有效的抑制噪声对图像的影响,适用于边缘检测的算子有很多种。

基于边缘检测的车牌定位算法相对其他算法来说,速度较慢,而且对拍摄到的图像环境要求较高,对于不同的环境和要求,只有找到合适的算子,才能达到车牌定位良好的效果。

(2)基于车牌颜色特征的车牌定位算法:在车牌定位的研究中,利用车牌的颜色特征信息(包括车牌上字符的颜色和车牌背景颜色),有多种车牌的定位算法已被提出。由于基于车牌图像质量要求的颜色特征的车牌定位算法是比较高的,因此,当室外照明条件的变化或牌照褪色等条件下,比较难达到很高的定位精确度。但在特定的规则和条件下,利用车牌颜色特征定位的精确度还是非常高的。

(3)基于机器学习的定位算法:寻找好的功能训练方法是此方法不可或缺的因素。通过使用adoboost + Haar独特的车牌检测来达到很高的检测率,但也有其弊端如不具有完整性和高的准确率。所以想要更实际更广泛的应用还是要寻找显著的特征。

本文通过边缘检测的车牌定位算法来获得车牌区域。在若干经典的车牌定位算法中边缘检测算子简单,处理速度快,加工后的边缘光滑且是连续的。这种方法简单而有效,故被广泛的应用。

2.3.2字符分割算法

车牌字符分割基于车牌定位之上,进一步获得车牌上单个字符,同时这个过程是识别的前提和准备。车牌字符分割中相同的识别性能起着关键的作用。因此,在字符的分割识别系统中起着决定性的作用。现今车牌字符分割算法大致有以下三种[11]:垂直投影法、基于灰度图像的分割法方法和利用图像形态学法。 (1)垂直投影法:该方法借用数组来暂存数值,通过计算垂直投影值的核心方法来确定阈值,从而获得单个的字符图像。

(2)基于灰度图像的分割法:车牌图像预处理是第一步,将彩色图像转换为灰色图像,最后获得二值化图像。同时按照一个个分割字符的功能去除噪声的影响。 (3)利用图像形态学法[12][13]:该方法首先采用动态阈值法将车牌图像进行二值化处理,然后去除掉边框和柳钉等图像二值化后造成的影响,从而达到车牌字符分割的目的。该方法对图像质量要求高,实用性比较差。

本文采用垂直投影法来获得单个字符。该方法具有显著的效果,虽然有时切分存在缺陷,但是足以满足需求。

2.3.3字符识别算法

主要字符识别算法有以下几种:基于神经网络字符识别算法[14]、基于模板匹配[15]和基于特征统计方法。

(1)利用神经网络方法:利用神经网络算法来实现字符识别,效率高、速度快及分辨率高,在现实之中有很大的实用价值。该方法最主要的就是需要大量的

6

三江学院2014届本科生毕业设计(论文)

样本来进行训练,实现机器学习,样本数量的多少,决定了算法识别率的高低和算法的稳定性好坏。当在该算法之中,网络中输入数据的选择和网络结构以及参数优化很好的时候,该算法性能将会很优越。该方法具有非常好的分类能力,在实际的系统应用也比较多。

(2)模板匹配字符识别算法[16]:提取字符特有的性质和模板库相比对,找出彼此最接近的比较结果作为最终识别结果。

(3)统计特征算法[17][18]:顾名思义统计计算出字符特征设计分类器,但是字符本身难于分辨使该方法在实际应用中很难实现,有待详细的分析和研究探索。

本文对字符进行提取主要采用模板匹配法。它是字符识别中相对简单的处理方法,虽然准备工作比较繁琐,但该方法实现容易。

2.4本章小结

本章简要介绍OpenCV计算机视觉库,接着介绍车牌识别技术与车牌定位、字符分割和字符识别一些常用的算法。

7

三江学院2014届本科生毕业设计(论文)

第3章 车牌识别软件的总体设计

3.1 需求概述

结合汽车牌识别的一般过程,该软件能够实现以下一些功能:

(1)友好的用户界面:用户结合软件界面中的按钮和图像手动操作,按照既定车牌识别程序来执行实现,简单明了。

(2)车牌预处理:用一定的车牌图像输入处理算法,找到车牌定位。 (3)车牌定位:本软件采用基于车牌图像先验知识,对经过初步处理(二值化)后的图片,进行扫描统计,并暂存在一个数组中,然后根据数组值确定车牌的边界,最终车牌区域定位分割下来。

(4)字符分割:对定位到的车牌图片进行归一化处理便于和模板进行匹配识别,从而提高识别得出正确的结果。

(5)字符识别:识别分割字符,然后识别结果输出到屏幕上。

3.2 软件总体结构设计

根据整个软件的需求,将车牌识别工具通过4个模块来实现,划分成图像预处理模块、车牌定位模块、字符分割模块和字符识别模块,如图3-1所示。

图像灰度化图像预处理边缘检测图像二值化水平分割车牌定位车牌识别系统字符分割垂直分割车牌归一化垂直投影字符定位字符分割提取特征字符识别模板匹配识别结果 图3-1 车牌识别工具总体结构

其中:

(1)图像预处理部分,负责对拍摄的包含车牌信息的图片进行预处理。 (2)车牌定位部分,负责对预处理之后的图像,根据车牌共有的区域特征采取一定的算法,进一步识别定位车牌区域。

(3)字符分割部分,负责对已经确定区域的车牌,把车牌图像中的字符一个

8

三江学院2014届本科生毕业设计(论文)

个切分开,并把每一个字符保存为单个字符图像。

(4)字符识别部分,负责通过模板匹配算法,对每个字符图像进行字符识别。

3.3车牌识别的工作流程

对已采集的车牌图像进行处理,最终准确、快速地识别出车牌。总体工作流程如图3-2所示。

开始已采集到的图像字符个数是否是7图像预处理Y字符识别车牌定位识别结果保存与输出N判断是否为标准字符结束Y字符分割

图3-2 车牌识别的工作流程图

(1)图像预处理:对收集到的车牌图像进行灰度化处理,接着用 Canny 算子对图像进行边界检测,最后取自适应阈值二值化图像,来提高正确识别率。

(2)车牌定位:分割预处理之后的车牌边界,获得准确的车牌区域,再保存成统一大小。

(3)字符分割:对已经定位分割好的车牌区域进行垂直投影,获取字符信息;然后进行字符定位;最后将字符分割开来,保存为单个的字符图像。

(4)字符识别:提取出分割好的字符的特征值,将提取的特征值与模板比较,显示出识别的结果,并加以保存。

(5)输出结果保存在数组中,识别结束。

3.4本章小结

本章对本软件的功能模块设计进行了简要分析,并介绍了该软件的需求、总体结构和工作流程。

9

三江学院2014届本科生毕业设计(论文)

第4章 车牌识别技术实现

4.1车牌图像预处理技术 4.1.1图像预处理

由于车牌图像在拍摄时,会受到光照、障碍物、拍摄角度、摄像设备等的影响,图像中会产生较多与车牌无关的图像数据,造成噪声,这会大大地影响车牌的识别效果,所以必须对要识别的图像进行预处理,去除掉这些噪声干扰。本文通过对图像灰度化、二值化、边缘检测来去除车牌中的干扰数据,提高车牌识别效果。 (1)灰度化

数字图像分为彩色图像和灰度图像[19]。在RGB模式,当R=G =B,一个灰色的颜色表示,其中R值=G=B称为灰度值[20],通常使用G表示。图像灰度化就是把彩色的变换为灰色的。由于彩色图像占用大量的存储空间,为了加快处理速度,需要对彩色图像和灰度图像之间进行互相变换。

在OpenCV库函数中,利用cvCvtColor函数来处理灰度转换。该函数原型如下[21]:cvCvtColor(const CvArr*src,const CvArr*dst,int code)其中SRC是一个8位图像输入,8位图像输出DST,code表示颜色的空间模型,定义为CV_BGR2GRAY表示将源图像转换成灰度图的格式。图像灰度处理如图4-1(a)(b)。

(a)车牌原始图像 (b)车牌灰度化以后图像

图4-1 图像灰度处理示意图

经过了灰度化处理后,减小计算量提高了图像处理效率,能够满足车牌定位的实时性和精确性的要求。 (2)边缘检测

边缘检测通过边界分析的方法致力于图像的提取分割,分割效果取决于算子的使用。比如Canny算子[22]能够找到要检测图像的边界,同时将其他的干扰排除。在OpenCV库函数中,Canny边缘检测算法的函数为cvCanny[23]函数。

(3)基于灰度图像的二值化

找出适中的阈值是二值化图像的关键,灰度图像二值化就是进一步确定这个值。如果确定的像素灰度值小于找到的阈值,那么就把此像素的灰度值设为0,相反设为255。设最初灰度图像为f(x,y),转换后的二值图像为g(x,y),则二值化的过程可表示如公式4-1所示[24]:

10

三江学院2014届本科生毕业设计(论文)

?255,f?x,y??t g?x,y????0,f?x,y??t图4-1 二值化公式

经过二值化以后的车牌比原车牌变得更清晰更容易识别。处理结果如图4-2:

(a)二值化之前的灰度图像

(b)二值化以后的图像 图4-2 二值化前后对比图

整个过程使用函数:Void CMyDialog::Threshold (IplPic * Subs, IplPic *Pic_O); 该函数先对图像进行二值化处理,然后再进行Canny边缘检测。 部分代码如下:

// 最大灰度、最小灰度值获取

if(CV_Pic_Subs(Pic,func,j,i)>thresMax) //像素值比255大 thresMax=CV_Pic_Subs(Pic,func,j,i);//把元素值赋给 thresMax else if(CV_Pic_Subs(Pic,func,j,i)

thresMin=CV_Pic_Subs(Pic,func,j,i); //则改变thresMin

4.1.2车牌定位

一个车牌识别系统成功的关键因素在于车牌区域的确定,首先第一步的定位工作对后面的分割,识别有着直接的影响。所以车牌定位先要找到这个准确的区域,然后从这个区域把车牌分割出来,为后续的识别做准备。本文中根据车牌图像的先验知识,确定车牌的上下边界,然后利用OpenCV库中的CMyDialog函数,把车牌区域设为感兴趣区域,将图像处理为大小一致并且归一化,图像尺寸为20×40像素。

首先对二值化后的图像进行行扫描和列扫描,从而得到车牌区域。接下来找出每行的非零像素值的个数统计出来存储在数组中,最后通过投影统计出所有的图像像素,并保存投影数值和最大的。对保存的数值判断,如果满足要求这样就找出了车牌上水平线,同样的方法找出下水平线。

车牌左右边界寻找方法跟上段叙述的上下水平线方法相似,变成纵向扫描统

11

三江学院2014届本科生毕业设计(论文)

计像素个数,然后进一步确定。在此过程中统计列非零像素并找出最大连续统计,这值是车牌左边界,区域右边界同理可得。然后使用OpenCV的功能函数在此区域设置感兴趣的块,最后截取出车牌区域。该方法可以通俗易懂的描述成拿一个大小设置好图框去框像素,图框中的像素在不断的变化,变化到最大值时保存在数组中,则此区域就是车牌的区域,如图4-3所示。

图4-3 车牌定位图

图4-3中字母L字符,圆点表示像素,黑色像素值是0,白色像素值是255。A、B、C 是矩形框,A 是刚开始的矩形框,B 和 C 用虚线表示,代表依次往下移动。图像中一行的投影值存放在数组 num_h[]里。

整个过程使用函数:int CMyDialog::PlateAreaSearch(IplPic *pImg_Image); 部分代码如下: k=temp_i;

While (((num_h[k +1]>POINT_X )||

(num_h[k+2]>POINT_X )||(num_h[k]>POINT_X )) && k )

k--;

plate_n=k+1;//下边界行 k=temp_i+10;

while(((num_h[k-1]>POINT_X )||

(num_h[k-2]>POINT_X )||(num_h[k]>POINT_X ))&& (kheight))

k++; plate_s=k;

if ((ROI_rect.width+ROI_rect.x)> pImg_Image->width) {

ROI_rect.width=pImg_Image->width-ROI_rect.x;

//cout<<\垂直方向分割失败!\

12

三江学院2014届本科生毕业设计(论文)

MessageBox(\垂直方向分割失败!\Return 0 ; }

cvSetImageROI(src,ROI_rect);//将 ROI_rect 设置为感兴趣区域 cvCopy(src,pImg8uROI,NULL);//把感兴趣区域

pImg8uROI cvResetImageROI(src);//重新设置感兴趣区域 pImgResize=cvCreateImage(cvSize(40*HIGH_WITH_CAR,40),

IPL_DEPTH_8U,1);

cvResize(pImg8uROI,pImg8u11,CV_INTER_LINEAR); //车牌归一化 cvCvtColor(pImg8u11,pImgResize,CV_RGB2GRAY);//转为灰度图 Threshold(pImgResize,pImgResize);//二值化

车牌定位相比原车牌图像进一步精确了车牌区域,并从这个区域把车牌分割出来,为后面的识别做准备。

图4-4 车牌定位效果图

如图4-4所示为车牌定位效果图,实现车牌定位算法。

4.2 车牌图像分割及识别技术 4.2.1字符分割

字符分割的关键是在车牌字符的分割起始定位点,如果每个字符的起始定位点准确了,那么分割也就变得相当简单了。要识别已经定位到的车牌字符,首先要进行字符分割,得到单个字符,再进行字符识别。其基本方法是利用字符之间间隔的特点,进行垂直投影[25]。

首先对第二个字符末端进行初定位,然后再从定位的地方往前确定第一个和第二个字符位置,最后从第3个往后定位出后5个字符位置,

根据这样找到的位置来设置字符感兴趣的区域,利用OpenCV中的cvSetImageROI()函数,正如图4-5所示。

图4-5 字符垂直投影

13

三江学院2014届本科生毕业设计(论文)

整个过程使用函数:int CMyDialog::SegmentPlate(); 部分代码如下:

for (i=0;i<40*HIGH_WITH_CAR;i++) {

num_h[i]=0; //初始化指针 for (j=0;j<17;j++)//0-16/40 {

num_h[i]+=CV_PIC_SUBS(pImgResize,func,j,i)/45; }

for (j=24;j<40;j++)//24-39/40

{ num_h[i]+=CV_PIC_SUBS(pImgResize,func,j,i)/45;

}// 精定位

for(i=0;i<40*HIGH_WITH_CAR;i++)//每一列的 {

for(j=17;j<=24;j++)//17-24/40每一列的17到24行相加 {

num_h[i]+=CV_PIC_SUBS(pImgResize,func,j,i)/45;

}

}

for(j=letter[3];j>0;j--)//从第二个字符的末端开始 {

if ((num_h[j]

letter [2]=j;

letter[1]=(j>=23)?j-3:letter[1];

letter[0]=(j>=23)?j-23:letter[0]; //第一个字符的起始位置 break; } }

字符分割效果如图4-6所示:

图4-6 字符分割效果

最后确定好车牌字符的分割点,然后利用OpeCV函数中的cvSetImageROI()函数,分别把各个字符区域设置为感兴趣区域,然后把感兴趣区域保存下来,就

14

三江学院2014届本科生毕业设计(论文)

得到分割好的字符图片。

4.2.2字符识别

经过字符图像的分割之后,会得到七个已经保存好的单个字符的图像,使用模板匹配法[26],进行数字图像匹配。下面通过读取这些保存好的字符图像,通过匹配,判断输出字符结果,从而达到字符识别的目的。

车牌特征就是车牌一般大小即长宽比例固定并且每个字符之间的间隔一定,而第二个和第三个字符之间间隔稍大些,同时车牌里还包含汉字、数字和字母,第一个是汉字,第二个是字母,后面是字母和数字。

整个过程用到函数:int CMyDialog::CodeRecognize(IplPic*imgTest, int num, int char_num);

(1)提取模板的特征值,然后放到数组中,通过以下算法提取前九个特征。 for(k=0; k<8; k++) {

for(j=int(k/2)*10; j

{

for(i=(k%2)*10;i<(k%2+1)*10;i++)

{

num_t[k]+=CV_Pic_Subs(imgTest,func,j,i)/255; }

} }

num_t [ 8 ] + = num_t [K ];//第9个是前8个的和 之后的特征值提取也是固定的算法。

(2)对待处理的图片使用同样的提取算法,然后与数组中的值进行比较,如果差值在一定范围内则符合,同时把匹配次数相符最多的作为识别结果并保存。

输入原始车牌图片如图4-5所示:

图4-5 原始车牌图片

在定位、分割、识别以后的结果如图4-6所示:

图4-6 字符识别效果图

15

三江学院2014届本科生毕业设计(论文)

部分代码如下:

for(k=char_start;k<=char_end;k++)

{

matchnum=0;

for(i=0;i<8;i++)//区域的匹配

{

if (abs(num_t[i]-Num_Templete[k][i])<=2)//与模板进行匹配

matchnum+=2;

for(i=9;i

{

if (Num_Templete[k][i]>=5) {

if(abs(num_t[i]-Num_Templete[k][i])<=1)matchnum+=2;

} else if( num_t[i]==Num_Templete[k][i]) {

matchnum+=2; } }

if(matchnum>matchnum_max)

{

matchnum_max=matchnum;//保留最大的匹配

matchcode= k;

} }

}

通过调用void CMyDialog::OnShibiecar()函数7次来识别7个字符中的每一个字符,具体实现代码如下:

void CMyDialog::OnShibiecar() {

CodeRecognize(pImgCharOne,3,0); CodeRecognize(pImgCharTwo,1,1); CodeRecognize(pImgCharThree,2,2);

16

matchnum++; }

if(Num_Templete[k][i]-abs(num_t[i])<=8)//对第9个特征进行匹

G_PlateChar[char_num]=PlateCode[matchcode]; //保存字符

三江学院2014届本科生毕业设计(论文)

CodeRecognize(pImgCharFour,2,3); CodeRecognize(pImgCharFive,0,4); CodeRecognize(pImgCharSix,0,5); CodeRecognize(pImgCharSeven,0,6);

CString outFile= \

for(i =0;i<7;i++)//把结果放到 outFile CString 里 {

outFile += G_PlateChar[i]; }

GetDlgItem(IDC_RESULT)->SetWindowText(outFile); }

4.3 本章小结

本章对系统中涉及到的车牌识别技术做了详细的阐述,即利用了行扫描和列扫描的方法对车牌区域进行粗定位,字符分割采用垂直投影的方法,能对字符进行有效分割,最后运用模板匹配对字符进行识别。

17

三江学院2014届本科生毕业设计(论文)

第5章 系统实现及测试

5.1系统界面

基于图像的车牌识别模块的界面图,如图5-1所示:

图5-1 系统界面

界面中各个按钮的功能如下说明:

(1)打开图像:通过界面打开图像按钮来打开采集到的原始车牌图像,此时原始图像框显示打开的图像。

(2)图像二值化:在点击图像二值化按钮,将原始的车牌图像变换为灰度图像。

(3)车牌定位:接着点击车牌定位按钮,对二值化之后的车牌区域进行定位。 字符分割:下一步点击分割按钮,系统利用垂直投影和字符先验知识分割出车牌的字符,并显示在模块界面。

(4)字符识别:最后点击识别部分,系统利用模板匹配法将单个的车牌字符与原有的字符模板进行比对,识别出车牌字符。

5.2系统测试

本文通过对车牌识别软件中所用到的算法进行研究与实践,结合OpenCv和微软的MFC图形库,基于图片实现车牌的定位、字符分割、字符的识别等功能。经过对其测试,该系统能够完成字符识别功能。

18

三江学院2014届本科生毕业设计(论文)

首先,打开原始图像,然后进行图像色彩转换、车牌定位、字符分割、字符识别,最终完成识别的全过程。测试效果图如图5-2、图5-3所示:

图5-2 原始图像

如图5-2所示为原始图像,将进行操作的车牌图像。

图5-3 车牌定位、字符分割、字符识别效果图

如图5-3所示为车牌定位、字符分割、字符识别效果图,将原始车牌图像进行以上操作,从而实现系统整体功能。

5.3本章小结

本章通过测试使用相关算法研究和实践的车牌识别系统,该系统能够很好的识别出字符。

19

三江学院2014届本科生毕业设计(论文)

结束语

随着我国经济的快速发展,汽车数量也逐年大幅度增长,公路交通基础设施在我国起到决定性的作用,智能交通系统也随之产生。车辆牌照识别,作为一个重要组成部分,涉及到众多的知识领域,如数字图像处理,计算机视觉,人工智能与模式识别。它主要包括以下几个部分图像的预处理,车牌的定位,字符的分割和字符的识别。本文使用VC++(计算机编程语言)和OpenCV(国际开放的计算机视觉库),加上相关理论知识实现一个车牌识别基础工具。

本文先采用扫描对车牌粗定位扫描,便于字符分割,利用垂直投影法的字符分割,可以进行字符的有效分割,最后用模板匹配的字符识别,效果显而易见,但在实际应用中,车牌图像会受诸多因素的影响,因此,为了进一步提高识别率和识别速度,将会有越来越多的研究者对其进行深入研究。

虽然目前的车牌识别系统实施还存在许多不足之处,然而,伴随着不懈的研究和日益成熟的设施,车牌识别系统最终将广泛应用到实际生活中。

20

三江学院2014届本科生毕业设计(论文)

致 谢

首先我要衷心感谢 老师,在论文写作各个阶段,曹老师总能一丝不苟地为我细致的指导和教诲,让我不断提高,同时也学到了很多做事的深刻道理。无论生活或工作中,曹老师和蔼可亲,平易近人,治学严谨,脚踏实地的工作作风是永远值得我学习。在此,我谨向他表示我衷心的感谢和诚挚的祝福,祝愿他的事业更加蒸蒸日上!

感谢帮助过我的人,祝他们每天快快乐乐。

最后要感谢父母和家人,不论身在何处他们都会永远的支持我,鼓励我,给我勇气促使我不断的勇往直前。

21

三江学院2014届本科生毕业设计(论文)

参考文献

[1] Eun Ryung Lee, Pyeoung Kee King: Automatic recognition of a car license plate using color image processing[C]. Journal of Korea Institute of Telematics and Electronics: FEB, 1995, 128-131.

[2] R.Parisi, E.D.Di Claudio: Car plate recognition by neural networks and image processing[C]. IEEE Transaction on Vehicular Technology: APR, 1998, 790-799.

[3]陈贤青.基于计算机视觉的车牌定位研究[D].学位论文.2007.

[4]姚蕾.车牌识别系统的软件设计与实现[D].硕士学位论文.上海交通大学.2009. [5]吴晓阳.基于OpenCV的运动目标检测与跟踪[D].硕士学位论文.浙江大学.2008. [6]陈胜勇,刘盛.基于OpenCV 的计算机视觉技术实现[M].北京:科学出版社,2008:5-1. [7] OpenCV Web[EB/OL].http://www.opencv.org.cn/index.php,2013,3 [8] Web [EB/OL]. http://baike.http://www.wodefanwen.com//view/1343775.htm

[9]刘瑞祯,于仕琪.OpenCV 教程基础篇[M].北京:北京航空航天大学出版社,2007. [10]刘静.几种车牌字符识别算法的比较[J] .电脑与电信,2008,8(4):72-78.

[11]吴进军,杜树新.车牌字符分割新方法[J].工业控制计算机,2005,8(4):69-75.

[12]宋晨光,叶海建.基于数字形态学的车牌字符分割算法光电子技术与[J] .Dee18(6)2005. [13]陈黎等.基于聚类分析的车牌字符分割方法[J].计算机工程与应用.2002,6:221-223. [14]王春,刘波,周新志.采用 BP 神经网络的车牌字符识别方法研究[J].中国测试技术, 2005,31(l):26-28.

[15]胡晓燕,蒋先刚,刘海峰.基于神经网络的车牌字符识别算法实验及程序校验[J].华东交通大学学报,2005,22(l):71-75.

[16]马俊莉,莫玉龙,王明祥一种基于改进模板匹配的车牌字符识别方法[J].小型微型计算机系统,2003,24(9):2670-1672.

[17]黄卫,路小波,凌小静.基于小波包特征提取的车牌字符识别[J].科学通报,2004,49(24):2612-2614.

[18]周莉,郑建彬,颜碗.基于小波多尺度在图像字符特征提取方法的改进[J].计算机应用, 2004,7:5-8.

[19]王晓雪,苏杏丽.数字图像处理在车牌识别中的应用[D].上海大学航空航天学院,2002. [20] Imura J, sugieT,YokokohjiY, eta.l Robust control of robot manip-ulators based on joint torque sensor information[J]. The Interna-tional JournalofRoboticsResearch,1994,13(5):434-442. [21] cvCvtColor.Web[EB/OL]. http://baike.http://www.wodefanwen.com//view/2816025.htm

[22]陈卫东等.基于Canny算子的边缘检测[J].河南工业大学学报(自然科学版).2008 [23] cvCanny.Web[EB/OL]. http://baike.http://www.wodefanwen.com//view/5252720.htm

[24]张海宁,李 彬,陈超波,等.基于 OpenCV 的车牌识别系统研究[J].工业仪表与自动化装置,2012,6:78-80.

[25]潘中杰,谭洪舟.基于垂直投影法的一种新的车牌字符分割方法[J].自动化与信息工程,2007,22(02):10-13. [26]魏武,张起森,王明俊,等.一种基于模板匹配的车牌识别方法[J].中国公路学报,2001,14(1):104-106.

22

三江学院2014届本科生毕业设计(论文)

参考文献

[1] Eun Ryung Lee, Pyeoung Kee King: Automatic recognition of a car license plate using color image processing[C]. Journal of Korea Institute of Telematics and Electronics: FEB, 1995, 128-131.

[2] R.Parisi, E.D.Di Claudio: Car plate recognition by neural networks and image processing[C]. IEEE Transaction on Vehicular Technology: APR, 1998, 790-799.

[3]陈贤青.基于计算机视觉的车牌定位研究[D].学位论文.2007.

[4]姚蕾.车牌识别系统的软件设计与实现[D].硕士学位论文.上海交通大学.2009. [5]吴晓阳.基于OpenCV的运动目标检测与跟踪[D].硕士学位论文.浙江大学.2008. [6]陈胜勇,刘盛.基于OpenCV 的计算机视觉技术实现[M].北京:科学出版社,2008:5-1. [7] OpenCV Web[EB/OL].http://www.opencv.org.cn/index.php,2013,3 [8] Web [EB/OL]. http://baike.http://www.wodefanwen.com//view/1343775.htm

[9]刘瑞祯,于仕琪.OpenCV 教程基础篇[M].北京:北京航空航天大学出版社,2007. [10]刘静.几种车牌字符识别算法的比较[J] .电脑与电信,2008,8(4):72-78.

[11]吴进军,杜树新.车牌字符分割新方法[J].工业控制计算机,2005,8(4):69-75.

[12]宋晨光,叶海建.基于数字形态学的车牌字符分割算法光电子技术与[J] .Dee18(6)2005. [13]陈黎等.基于聚类分析的车牌字符分割方法[J].计算机工程与应用.2002,6:221-223. [14]王春,刘波,周新志.采用 BP 神经网络的车牌字符识别方法研究[J].中国测试技术, 2005,31(l):26-28.

[15]胡晓燕,蒋先刚,刘海峰.基于神经网络的车牌字符识别算法实验及程序校验[J].华东交通大学学报,2005,22(l):71-75.

[16]马俊莉,莫玉龙,王明祥一种基于改进模板匹配的车牌字符识别方法[J].小型微型计算机系统,2003,24(9):2670-1672.

[17]黄卫,路小波,凌小静.基于小波包特征提取的车牌字符识别[J].科学通报,2004,49(24):2612-2614.

[18]周莉,郑建彬,颜碗.基于小波多尺度在图像字符特征提取方法的改进[J].计算机应用, 2004,7:5-8.

[19]王晓雪,苏杏丽.数字图像处理在车牌识别中的应用[D].上海大学航空航天学院,2002. [20] Imura J, sugieT,YokokohjiY, eta.l Robust control of robot manip-ulators based on joint torque sensor information[J]. The Interna-tional JournalofRoboticsResearch,1994,13(5):434-442. [21] cvCvtColor.Web[EB/OL]. http://baike.http://www.wodefanwen.com//view/2816025.htm

[22]陈卫东等.基于Canny算子的边缘检测[J].河南工业大学学报(自然科学版).2008 [23] cvCanny.Web[EB/OL]. http://baike.http://www.wodefanwen.com//view/5252720.htm

[24]张海宁,李 彬,陈超波,等.基于 OpenCV 的车牌识别系统研究[J].工业仪表与自动化装置,2012,6:78-80.

[25]潘中杰,谭洪舟.基于垂直投影法的一种新的车牌字符分割方法[J].自动化与信息工程,2007,22(02):10-13. [26]魏武,张起森,王明俊,等.一种基于模板匹配的车牌识别方法[J].中国公路学报,2001,14(1):104-106.

22

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

Top