基于SVM与ANN技术的车牌识别讲课文档_第1页
基于SVM与ANN技术的车牌识别讲课文档_第2页
基于SVM与ANN技术的车牌识别讲课文档_第3页
基于SVM与ANN技术的车牌识别讲课文档_第4页
基于SVM与ANN技术的车牌识别讲课文档_第5页
已阅读5页,还剩55页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

主要内容车牌检测车牌字符的识别现在二页,总共六十一页。车牌样本选取环境离车前方2-3米左右,在白天正常的光线下,并且不是平行与地面而是与车牌的有个小角度的倾斜情况下(因为很难做到拍摄出的车牌没有倾斜)拍摄车牌照片。现在四页,总共六十一页。车牌样本现在五页,总共六十一页。摄像机的选用如果我们使用一个带有红外线投影结构和滤波的摄像机重新获取,将得到一个非常高质量的照片以用来分割和随后的检测和识别车牌数字。也即照片不依赖于任何光线环境,如下图所示:现在六页,总由于硬件限制,我们没有使用红外线摄像,而是使用常规的摄像。这样做,以至于很难得到一个最好的结果,其最终车牌的检测错误率和字符的识别错误率很相对高一些,但是无论何种摄像机,对车牌的处理过程是一样的。现在七页,总共六十一页。车牌规格我们使用西班牙最普通(使用最多)的车牌,其大小是520*110mm。两种字符(数字和字母)的间距是41mm。数字和数字之前(或者字母和字母之间)距离是14mm。第一组字符含有四个数字。另外一组含有三个字母,其中不包括元音字母:A,E,I,O,U和N,Q。所有的字符大小为45*77。这些数据对于字符分割很重要,以这些尺寸为依据来大致确定区域是否是车牌或者字符区域,如下是一个车牌图。现在八页,总共六十一页。车牌检测与车牌字符识别现在九页,总共六十一页。车牌检测——检测出一个图像帧中的车牌。第一步(分割),应用不同的滤波器,形态学操作,轮廓算法,获取所有可能的车牌部分。第二步(分类),我们采用支持向量机

(SVM)分类得出我们所需要的车牌部分。现在十页,总共六十一页。(一)车牌图像分割分割是把一幅图像分割成许多部分的过程。这个过程可以简化图像分析,使特征提取更容易。车牌部分的一个重要特征是在车牌中有高数量的垂直边缘(也就是垂直边缘比较多),假定照片是从前面拍的,车牌没有旋转,并且没有视觉上的扭曲。我们将sobel滤波得到垂直边缘特征可以作为分割的第一步,来排除那些没有垂直边缘的区域。在寻找垂直边缘之前,我们需要把彩色图像转换为灰度图像,因为彩色图像在我们的任务中没有帮助,并且用线性滤波的方法来移除来自相机或者外界对图像的噪声。如果我们不应用去噪方法,我们将得不到许多的垂直边缘,将会产生检测失败。现在十一页,总共六十一页。灰度化及线性滤波后效果现在十二页,总共六十一页。Sobel滤波后效果现在十三页,总共六十一页。Sobel滤波后,我们应用一个阈值滤波器来获得一个二值图像,阈值通过Otsu方法获得。Otsu算法又称大津算法,需要一个8位图像作为输入,该方法自动的获取图像最佳的阈值。现在十四页,总共六十一页。二值化后效果现在十五页,总共六十一页。接下来,通过应用一个闭操作(先膨胀,再腐蚀),我们能够去掉每个垂直边缘线的空白黑色部分。并且连接含有边缘数量很多的所有区域。在这一步,我们得到可能的含有车牌的区域。现在十六页,总共六十一页。闭操作后效果现在十七页,总共六十一页。连通域轮廓现在十八页,总共六十一页。最小外接矩形现在十九页,总共六十一页。我们基于面积和宽高比,对于检查到的所有外接矩形区域做一下确认。如果宽高比大于为520/110=4.727272(车牌宽除以车牌高)(允许带有40%的误差)和边界在15像素到

125像素高的区域,我们才认为可能是一个车牌区域。这些值可以根据图像的大小和相机的位置进行估算。现在二十页,总共六十一页。去除干扰区域后现在二十一页,总共六十一页。剩余6块外接矩形现在二十二页,总共六十一页。对仅剩下的6块区域,我们利用车牌的白色背景属性可以进一步改善。所有的车牌都有统一的背景颜色。我们可以使用漫水填充算法来获得这些剩余旋转矩阵的精确筛选。所谓漫水填充,简单来说,就是自动选中了和种子点相连的区域,接着将该区域替换成指定的颜色,这是个非常有用的功能,经常用来标记或者分离图像的一部分进行处理或分析.漫水填充也可以用来从输入图像获取掩码区域,掩码会加速处理过程,或者只处理掩码指定的像素点.现在二十三页,总共六十一页。寻找种子点现在二十四页,总共六十一页。随机选取每个区域十个种子点现在二十五页,总共六十一页。为了下一步轮廓寻找、最小外接矩形的获取以及筛选合适大小的轮廓做准备,我们对图像漫水填充时,只对黑色背景的二值掩码区域进行填充,不对原彩色图进行填充,填充颜色为白色。现在二十六页,总共六十一页。掩码填充效果现在二十七页,总共六十一页。掩码填充效果现在二十八页,总共六十一页。掩码填充效果现在二十九页,总共六十一页。掩码填充效果现在三十页,总共六十一页。掩码填充效果现在三十一页,总共六十一页。掩码填充效果现在三十二页,总共六十一页。因为使用车牌,车牌有边界,漫水填充不会超过车牌的边界,而对于其他区域(检查出来的矩形)漫水填充会占据很多区域,形成的矩形也很大,再对矩形进行大小判别时,可能就会被丢弃,得到更可能是车牌的区域。因此我们在原图上标记出仅剩的三块可能车牌区域。现在三十三页,总共六十一页。仅剩3块可能的车牌区域现在三十四页,总共六十一页。将这三块区域提取出来后,先进行适当的旋转,然后把所有的图像调整为统一的大小,对其采用直方图均衡化最终效果如下。现在三十五页,总共六十一页。车牌分类我们预处理和分割图像的所有可能部分之后,我们现在需要判别每一个分割部分是不是一个车牌。为这样做,我们使用SVM算法。支持向量机是一个模式识别算法,它是监督学习算法的一份子,最初创建是为了二值分类的。有监督的学习是一种机器学习算法,它通过标签数据的使用进行学习。我们需要一些带有标签的数据来训练这个算法。每一个数据集需要有一个类别。现在三十六页,总共六十一页。SVM创建一个或多个超平面,用来区分每类数据。一个典型的例子是2维点集,它定义了两个类。SVM寻找最优线来区分每个类。现在三十七页,总共六十一页。训练SVM分类器,简单来说在二维空间里就是求解这样一个线性函数,g(x)=wx+b,x是输入的特征,g(x)是输出的分类的类别,我们已知了输入特征与输出类别,来训练求解w和b的最优的值,获得这两个值后也就获得了这个分类的数学模型,接着就可对新样本进行预测。现在三十八页,总共六十一页。寻找训练分类器所需特征在任一分类之前的第一个任务是训练我们的分类器。我们用大小为144*33的75张车牌和35非车牌来训练我们的系统。我们在下面的图中能看到数据的一些样本。现在三十九页,总共六十一页。为机器学习的SVM算法训练的数据存储在一个N*M的矩阵中,N表示样本数,M表示特征数。类别存储在另外一个大小为N*1的矩阵中。用0或者1表示无车牌和有车牌类别。我们将以上存储了已经处理好和准备好的所有图像的数据,写成xml文件保存起来输入到分类器中进行训练。现在四十页,总共六十一页。创建和训练分类器Opencv为支持向量机算法定义了CvSVM类。我们用训练的数据、类别和参数数据来初始化它并用CvSVM类中的train()函数训练我们的分类器。CvSVM

svmClassifier(SVM_TrainingData,SVM_Classes,

Mat(),Mat(),SVM_params);bool

CvSVM::train(const

CvMat*

trainData,

const

CvMat*responses,

const

CvMat*

varIdx=0,

const

CvMat*sampleIdx=0,

CvSVMParams

params=CvSVMParams()

)现在四十一页,总共六十一页。预测分类分类器准备好了,我们可以使用CvSVM类的

predict函数来预测一个可能的修剪图像。这个函数返回类别i。在我们的实例中,我们标记每一个车牌类别为1,非车牌类别标记为0。对于每个检测到的区域,我们使用

SVM来分出它是车牌还是非车牌。float

CvSVM::predict(const

CvMat*samples,

CvMat*

results)

const现在四十二页,总共六十一页。车牌字符的识别车牌识别目标的第二步即要获取车牌上的字符。对于每个检测到的车牌,我开始分割车牌得到每个字符,并且使用人工神经网络机器学习算法来识别字符。现在四十三页,总共六十一页。OCR分割(字符分割)我们将第一步检测到的车牌作为输入的图像然后对其进行二值化,因为我们需要获取字符的轮廓,而轮廓的算法寻找的是白色像素。所以通过改变二值化函数的参数来把白色值变为黑色,黑色值变为白色。最后我们检测到所有白色区域的轮廓,并且找到它们的最小外接矩形。现在四十四页,总共六十一页。对于每一个检测到的轮廓,我们核实一下大小,去除那些规格太小的或者宽高比不正确的区域。字符是45/77的宽高比。我们允许用于选择或者扭曲带来的百分之35的误差。如果一个区域面积高于80%(就是像素大于0的超过80%),则我们认为这个区域是一个黑色块,不是字符。现在四十五页,总共六十一页。提取每个字符的特征不像车牌检测特征提取的是图像的所有像素。我们使用一个更加通用的特征在字符识别中,其中包括水平和垂直累加直方图,一个低分辨率样本。现在四十六页,总共六十一页。一旦我们拥有了特征,我们创建一个M列的矩阵,矩阵的每一行中的每一列都是特征值。现在四十七页,总共六十一页。OCR分类(字符分类)在分类这一步,我们使用人工神经网络机器学习算法。更具体一点,多层感知器(MLP),一个广泛使用的人工神经网络算法。现在四十八页,总共六十一页。MLP神经网络有一个输入层,输出层和一个或多个隐层。每一层有一个或多个神经元连接着前向和后向层。下面的例子表示一个3层感知器(它是一个二值分类器,它映射输入的是一个实值向量,输出单一的二值),它带有三个输入,两个输出和一个含有5个神经元的隐层。现在四十九页,总共六十一页。每个神经元用带有权重的输入和加上一个偏移量再经过一个选择的激活函数转换后得到输出结果。现在五十页,总共六十一页。一个训练人工神经网络的输入是一个特征矢量。它传输值到隐层。用权重和激活函数来计算结果。它进一步的把输出结果往下传输直到到达含有一定数量的神经元类别时整个过程结束。每一层的权重,通过训练神经网络算法来计算和学习。现在五十一页,总共六十一页。简单的神经网络学习过程现在五十二页,总共六十一页。在图中,Xl

,X2,…,Xn

,是输入样本信号,W1

,W2,…,Wn

是权系数。输入样本信号通过权系数作用,在u产生输出结果∑Wi

Xi

,即有u=∑Wi

Xi

=W1

X1

+W2X2+…+Wn

Xn,再把期望输出信号Y(t)和u进行比较,从而产生误差信号e。即权值调整机构根据误差e去对学习系统的权系数进行修改,修改方向应使误差e变小,不断进行下去,一直到误差e为零,这时实际输出值u和期望输出值Y(t)完全一样,则学习过程结束。现在五十三页,总共六十一页。训练所需特征和类别char

OCR::strCharacters[]

={"0","1","2","3","4","5","6","7","8","9","B",

"C",

"D",

"F",

"G",

"H",

"J","K",

"L",

"M",

"N",

"P",

"R",

"S","T",

"V",

"W",

"X",

"Y",

"Z"};int

OCR::numCharacters=30;现在五十四页,总共六十一页。由于最终我们的分类器分类出30个类别,所以我们获取这30个类别的大量样本,提取每个类别每个样本的特征作为分类器的输入来训练我们的分类器。为机器学习的ANN算法训练的数据存储在一个N*M的矩阵中,N表示样本数,M表示特征数。现在五十五页,总共六十一页。而和SVM分类器类别存储在一个大小为N*1的矩阵中不同的是,必须创建一个N*30大小的矩阵来存储类别,这里的N是训练的样本,30是类别(因为我们的车牌中是10个数字和20个字母)。如果某一行假定第i行属于j(j=0-29)类,则我们将位置(i,j)的设置为1.我们将以上存储了已经处理好和准备好的所有图像的数据,写成xml文件现在五十六页,总共六十一页。创建并训练分类器我们用训练的特征数据,隐含层所含神经元的数目,类的数目及激活函数参数等来初始化分类器。OpenCV也为我们提供了ANN算法的类。layers.at<int>(0)=

TrainData.cols;layers.at<int>(1)=

nlayers;layers.at<int>(2)=

numCharacters;void

CvANN_MLP::create(const

CvMat*layerSi

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论