APP下载

车牌超分辨率重建与识别

2018-03-27

计算机测量与控制 2018年3期
关键词:车牌字符字典

(四川大学 电子信息学院,成都 610065)

0 引言

随着信息科学的高速发展,智能化场景在人们生产生活中变得越来越常见。其中智能化交通设施就是比较经典而常见的一个。汽车牌照是车辆身份的唯一标识,通过智能化手段对现实场景中的汽车进行身份识别是智能交通提出的基本功能需求。这样的识别系统一般主要包含车牌检测定位、字符分割和字符识别3个部分。实际拍摄的图像往往存在噪声污染,形变扭曲,字符断裂,牌照颜色、尺寸多样化等问题,而且系统对算法的复杂度鲁棒性有较高要求,所以单一地运用某种方法不能解决问题[1]。本文研究的车牌识别方法基于一定预处理技术提取车牌图块,对其运用超分辨率的方法重建,然后对重建后的图片执行车牌识别前处理流程,提取到车牌并分割好字符后做特征提取,最后送入识别网络进行识别。测试之前先使用来源于网络的100张全国各省的牌照图片以及若干数量的字符图片来训练SVM判决器和ANN识别网络以及学习车牌的稀疏字典对。测试时使用了实地采集的小汽车正面或背面图片样本,共100张。样本拍摄时候的距离大都在三米之内,拍摄角度大都倾斜较小,光照均匀聚焦良好。经实验测试表明,该方案是一套行之有效的车牌识别方案。

1 车牌超分辨重建与识别系统设计

该系统主要包括五个方面:候选车牌检测、车牌SVM判决、车牌的超分辨率重建、车牌字符分割和字符识别。这前4个过程均可以视为识别的前处理,这些流程均是为了最后的识别。系统输入为彩色图片,一次能识别一个牌照。系统输出为牌照的识别结果,即一个字符串。系统的结构如图1所示。图中的每个模块将在后文中详细描述。

图1 系统整体流程

1.1 车牌检测

车牌检测是车牌识别系统的关键步骤,只有正确检测到图片中的车牌区域,后续的车牌分割提取以及识别才有意义。本文综合基于颜色、基于边缘和基于MSER算法三种策略,运用并行计算技术分别得到三种方法的检测结果,综合之后来给出最后的车牌检测结果。

1)基于车牌颜色的车牌检测。国内车辆牌照依据车辆类型分别有蓝底白字、黄底黑字、黑底白字、白底黑字和白底红字等5种标准。这种独特的颜色特征可以用来检测车牌的存在。

首先将RGB模型转换成HSV模式,即色调、饱和度、亮度模型。当H的取值在200~280度之间,颜色就可以确认在蓝色范畴;H取值30~80度之间就确认为黄色;H取值0度左右为红色;以上颜色在V和S越接近1时候越纯正。S接近0而亮度V 接近1为白色,而S和V都接近0时为黑色。这样,将原图在HSV空间中遍历所有的像素。根据前面的分析,若H值在200~280度之间,且S和V的值在0.30~1之间的像素点颜色标记为白色,此时S和V不在此范围则标记为黑色。于是可以得到原图像的一个经过处理后的二值图像。对这个二值图像做进一步的形态学处理,再结合车牌先验知识,最终确认车牌候选区域。

基于车牌颜色特征的检测时间效率很高,对于高清彩色车牌照片效果较好。不足之处在于,如果照片背景颜色过于复杂,比如蓝色车牌照片中有大量蓝紫色的图像块或区域,导致筛选提取受到干扰。

2)基于形态学处理以及边缘检测的车牌检测。

车牌图像区域相对背景区域有个明显的特点就是,车牌部分的矩形边框和里面的数字字母都包含着大量的横竖边缘,尤其是竖直边。通过特定的一个图像基元块与图像做某种类似逻辑运算的作用,可以得到这一边缘密集的区域。常见的这种操作有腐蚀膨胀、开操作和闭操作。具体地,先将彩色图像转化为灰度图,并且利用5*5高斯模糊去除摄像机和环境噪声。然后利用sobel滤波器和一个阈值滤波器来得到二值图像。所采用的阈值由Otsu算法得到。使用形态学处理方法闭操作来删除竖直边之间的空白区,从而得到包含这些大量竖直边的连通闭合区域。这些区域就是车牌的候选区域。

图2 阈值处理 图3 形态学处理

3)基于MSER的车牌检测。MSER全称为Maximally Stable Extremal Regions,即最大稳定极值区域。这种区域特点是相对背景而言自成一个组织,组织内灰度比较一致。通过多次尝试不同的阈值对原图像进行二值化滤波,获取取各个阈值时候的各区域并计算相应形态变化。在一定的阈值变化范围内如果某个区域的形状达到最大而且稳定(类似一个数学函数取得极大值的情况),那么认定其为一个MSER区域[2]。通过设置合适的阈值变化范围可以检测到车牌候选区域。

这样,同时运行这三种算法就得到了一系列候选车牌区域,调整其尺寸为136*36为下一步的SVM判决做准备。

1.2 候选车牌SVM判决

上面的方法提取到的矩形区域可能不是车牌,需要经过判决得到真实车牌。SVM(support vector machine)是一种基于统计学习理论的机器学习算法,并且是一种有监督算法。监督学习是通过输入训练数据做运算并对照数据标签提供的相关信息,利用梯度下降等策略来优化调整系统参数的方法。标签数据标识了每个数据样本对应所属的类别标号。SVM算法是通过在样本空间通过计算来生成一个最优的判决平面来将所有样本分为两类。本文采用该方法解决一个二分类问题,即候选矩形图块是或不是真实车牌图片。

对测试图片做判决工作之前,需要先用一定数量的正负样本来训练SVM分类器。本文使用了在现实场景中拍摄以及从网络获取的数百张汽车牌照和非牌照照片作为原始素材,通过程序提取车牌图片作为正样本,使用相同尺寸的非车牌图片作为负样本。下面将详细介绍SVM具体建模过程。

1)首先确定分类器个数。这里只有车牌这一个类别,则分类器个数是1。

2)建立样本库。选取来源于互联网的各省车牌图片100张作为正样本负样本图像块数据来源。利用系统测试时产生的与车牌等大小的矩形候选图块按照是否为车牌作为正负样本。这些样本在做成训练数据之前需要先预处理,比如灰度化,图像滤波等。

3)特征提取。本文使用大小为136*36的整张车牌图片作为训练数据输入,因此特征就是车牌图片本身。特征值排序后对其归一化处理,与标签数据一起做成训练数据。

4)核函数选定。SVM的构造效果受核函数选取影响很大,合适的核函数选取可以得到显著的分类效果,相反核函数选取不当则分类效果会大大降低。主要的核函数有线性内核,多项式内核,径向基内核(RBF)等,其中RBF核应用最广泛。本文选取RBF高斯径向基核函数。

5)训练SVM。根据选定的核函数计算每个特征向量的映射值。SVM分类问题可归结为寻找一个样本集的最优分割面。离这个分割面最近的正负样本点称为支持向量。优化目标则进一步转为去最大化这些支持向量到分割面的距离。通过一些数学转化,优化问题可以表达为,

s.t.y(i)(ωTx(i)+b)≥1,i=1,...,m

ω和b都是SVM的模型参数,也是决定输入样本所属类别的决策平面的特征参数。y是训练样本的类别标签。m为训练样本的个数。不等式约束条件是正负样本分别约定标示y为1和-1时的表达形式,等号当且仅当输入为支持向量时取得。

通过拉格朗日松弛引入松弛因子α,得到拉格朗日多项式,将约束转化到优化目标函数中去,问题转化为求以下式子的最小值:

最后运用KKT条件求解可得到模型参数以及预测表达式。此时SVM模型参数随之确定。

OpenCV提供了一个FileStorage类可以来管理数据文件。我们借助这个类来存储训练数据矩阵和类别标签。以上步骤完成好了就可以进行训练了,这时候系统会按照以上数学原理来计算生成模型参数。借助OpenCV的CvSVM类,我们用之前生成的训练数据文件来初始化一个判决器实例来完成训练过程。训练完成后,系统就具备判决类似样本数据类别的能力了,这个称为训练过程。如图4所示为训练SVM的部分样本数据。

图4 SVM训练样本集

经过判决后选出真实的灰度车牌如图5所示。

图5 提取的灰度车牌

1.3 车辆图片的超分辨率重建

这个步骤运用超分辨率的方法来对提取到的灰度车牌进行处理。车牌图片质量得到了增强,大小和清晰度变得各加有利于下一步的处理。

目前研究的主流超分辨率重建方法有三种:基于插值、基于重建和基于字典学习的方法。其中基于插值的方法比较简单也最为实用,能满足一般的要求且能应用于实时场景。基于重建的方法是利用前向观测模型对输入的低分辨率图像进行一致性约束,同时结合图像先验信息进行求解,适合和运动估计相关的多帧图像的超分辨率重建场合。为了加入更多的先验信息,出现了基于学习的方法。基于学习的方法最早可追溯到Freeman的VISTA方法[3]。这种方法主要思路是分别选定高低分辨率训练图像集,在其上建立一种对应关系。近些年来兴起了基于字典学习的方法,建立高低分辨率图像块的基元组合即字典。字典的选取有邻域嵌入方法(Neighborhood Embedding)和稀疏编码法(Sparse Coding)。

邻域法认为同一幅图的低分辨率和高分辨率版本中,流形对象的几何结构是一样的。因此每一个图像块由K最近邻的其他图块重建的关系也应该是一样的,即这里的重建系数是一样的。这种方法直接使用采样图块作为字典组成元素。但是随着图像块数目增多,即这里采用的字典的原子数增大,计算复杂度会大大增加。

为了解决这个计算复杂度增加的问题,Yang等结合信号的稀疏编码理论提出稀疏字典学习方法[4]。

这种方法主要包括两个阶段,先学习稀疏字典然后重建。首先分别建立高分辨率和低分辨率图块的字典Dh和Dl。问题归结为寻找低分辨率块yi在字典Dl下的最稀疏表示:

式中,α表示低分辨率字典下的稀疏表达,F表示特征提取作用矩阵。L0范数优化属于NP难问题,于是转化成L1范数最小化:

引入正则化因子λ,进一步转化为:

这是一个L1范数线性回归问题,可以运用优化理论求解。解出最优系数α后进行超分辨率重建:

xi=Dhα

这种基于稀疏编码的方法解决了字典数据集体量急剧增加的问题。但是这个稀疏字典集的建模过程仍然需要耗费大量时间。

在以上研究的基础之上,Radu等人提出一种结合邻域和稀疏编码的方法--固定邻域回归法(Anchored Neighborhood Regression)[5]。本文将使用这种方法来完成车牌图片的超分辨率重建。

运用岭回归的思想,该问题首先可以归结为:

其中:Nl代表LR(low resolution)空间的邻域字典,与之对应地邻域法中则是输入特征yF的K个最近邻,在稀疏编码中则是LR字典。λ可以消除奇异解问题,使问题能有稳定解。通过线性代数的方法可以解得图块的邻域表达β为:

在该方法中,LR(Low Resolution)和HR(High Resolution)版本的邻域关系视为等同,于是可以据此并结合HR的邻域矩阵可以得出重建的高分辨率图块:

x=Nhβ

这里x即为HR输出的图像块。Nh是HR版本的图块邻域矩阵,和Nl对应。至此求得了由输入LR版本的特征向量yF得到HR版本图块的公式:

该方法可以从一个学习到的稀疏字典开始。对稀疏字典中的每个原子通过计算与其他原子的相关系数来找到K个最相近的邻居。这样原来图块的稀疏表达可以转换成这些邻居原子的表达。以这种方式,对于特定的图块而言,其表达空间维度大大减小,原来需要整个字典集来查找表达系数,现在只需要在一个近邻空间里去寻找表达,这样计算效率将大大提高。

车牌图片可以看做一种特有的模式,其上的纹理是十分相似的。因此车牌图片适合单独训练一个字典然后完成高分辨率重建。通过学习一定数目的较清晰车辆图片和较模糊车辆样本,来训练这个字典。

进行超分辨率重建后,车辆图片分辨率明显提高,字符骨干得到强化,从而各加利于下一步的处理。超分辨率重建后的车牌如图6所示。

图6 灰度车牌超分辨率重建

1.4 字符分割

经过超分辨率重建、滤波、二值化等过程,下一步采用基于连通域的方法来提取字符。字符分割的目的就是为了得到单独的字符图片作为识别模块的输入。常见的车牌分割方法有以下三种。

1)垂直投影法。得到车牌的二值图后,从左到右扫描车牌的每一个纵列并统计非零像素个数。不难发现当扫描到字符间隙的时候这个统计值达到极小值,且相邻极小值之间就是字符区域。这种方法分割速度快,满足实时性要求,不足之处在于对字符粘连处理效果不好。

2)模板匹配法。这种方法需要首先根据标准车牌设计一个同比例的模板,再调整到实验中的车牌尺寸。在该模板上用矩形框标记好字符区域的位置。当使用该模板从左到右在实验车牌上滑动时,标记区域内的白色像素值(字符像素)将在某一时刻达到峰值。此时矩形区域内选中的部分即为实验车牌的字符区域。该方法对于车牌字符有缺损有较好的分割效果,但是计算复杂度较高,每次滑动的时刻要统计区域内的像素,相邻时刻还要计算变化趋势。

3)连通域方法。车牌上除了汉字,其余字符均是连通的。运用这个特点,使用OpenCV的库函数在二值车牌上标记连通域并用外接矩形来包围这些区域,以此分割得到车牌上的连通区域。通过尺寸校验字符像素空占比等可以去除分隔符等干扰。此方法对于车牌图片质量要求较高,否则容易受到背景要素干扰。

本文结合了连通域方法和基于模板匹配的分割方法。OpenCV提供了一个查找轮廓的函数,可以方便的找到二值图中的连通区域的轮廓。对连通域方法检测到的车牌字符以水平位置排序。经过尺寸校验去除干扰后,取后面六位字符存入字符向量。最后根据汉字到第一个英文字符的距离制作模板提取汉字字符存入单独的汉字字符向量。

字符分割定位效果如图7所示。

图7 字符分割结果

1.5 字符识别

识别之前先选取适当结构的神经网络,将有标签的训练样本输入并使用BP算法训练。得到网络模型后对测试样本提取特征送入神经网络进行识别。

1.5.1 字符特征选取

字符图片送入神经网络进行识别之前首先要做特征提取。传统的特征有字符图像的水平和竖直累计直方图,低分辨率字符图像样本,SIFT(Scale-invariant feature transform)特征,LBP(Local Binary Pattern)特征等。本文同时采用LBP特征和水平竖直累积直方图特征。LBP是一种用来描述图像纹理特征的算子。初级的LBP算子反映每个像素与周边像素的大小关系(比中心像素大则置1,否则置0),对所有像素和其领域执行这种统计和比较便可以得到这种特征,特征维数和原图大小相同。

图8 LBP特征示意图

对于数字和字母图片尺寸归一化到10*10,LBP特征占去100个数据位,加上横竖的累计直方图信息20位,整个特征将占用120位数据。这也决定了非汉字网络的输入神经元为120个。类似地,汉字字符考虑到其复杂性,尺寸归一成20*20,对应的特征将占用440位,因此汉字网络的输入神经元个数为440。特征收集好了之后,将使用人工神经网络来完成字符分类即识别过程。

1.5.2 人工神经网络选取

人工神经网络的本质是一个从输入映射到输出的多层复合函数。

如果节点之间不构成循环,就称为前馈网络。前馈网络也是最基本的神经网络。本文就使用这种网络来做字符识别。

一般而言,层数多则网络模拟现实世界复杂关系的能力就强,但与此同时网络的训练方法会随着层数增加而变得非常复杂。如图9所示,本文采用一个单隐层的网络结构,为简化表达,输出层只画了一个节点作为代表。输入层不计,总层数为两层,即隐层和输出层。

图9 神经网络表示 图10 神经元表示

如图10所示,对于每一个神经节点,来自上层的输出首先作为本层的输入被线性加权且带有一个额外的偏置量。线性加权后的结果随后进入激励函数,作用后传入下一层。以第一层即隐层为例,用公式表达为:

z[1]=w[1]a[0]+b[1]

这里a[0]表示上一层的输出,这里实际上是输入向量。w[1]为第一层的权重矩阵,b[1]为第一层的线性偏置。z[1]为第一层的输出向量。对于整个网络而言,信息的传导方向从网络输入到输出层,如图11所示。输入经过第一层节点线性加权后经过激励函数后被第二层再次线性加权,随后经过第二层即输出层激励函数作用,最后在输出层计算损失函数。这称为信息流的前馈过程,如图11所示。

图11 信息流前馈过程

中括号中的1和2分别表示当前矩阵参数所在的层数标识。X表示输入,Z表示线性加权结果,A表示经过激励函数后的结果,L表示损失函数。

1.5.3 BP算法流程与网络训练

BP算法(Back Propagation)的提出极大促进了神经网络的发展,使得神经网络的训练变得切实可行,是一种被广泛采用的网络学习方法。本文使用这种方法来更新网络参数形成识别模型。这个学习过程实际是一个优化过程,优化目标是一个损失函数:

L(a,y)=-(ylog(a)+(1-y)log(1-a))

a是实际输出,y是期望的输出(类别标签)。实际计算损失函数时要逐个样本求和。BP算法则本质上是通过对这个函数求解对网络连接权重的梯度然后迭代更新这个权重系数w:

其中:α是学习因子,决定向局部最优点的接近速度,选取太小训练速度很慢,选取过大不易收敛,需要通过实验来逐步调整确定。i表示层数标识,j表示层中的节点标识,每个节点的w向量包含若干个元素,其个数等于与上层的连接数。这个迭代一直持续到输出优化到预定的水平或者迭代次数达到限制为止。因此为迭代得到各个权值系数,需要计算对应的微分量。为了推导表示的方便,下面约定dL/dz这一微分量就用dz简化表达,其他微分量也都这样类比来表达。

输出层采用的激励为Sigmoid函数。结合以上公式以及求导的相关知识可以导出,

dz[2]=a[2]-y

z表示上一层的输出a经过本层线性加权的结果。本层的z经过激励函数将又得到本层输出的a。

由输出层的线性加权关系可以导出,

dw[2]=dz[2]a[1]T

db[2]=dz[2]

由链式法则可知,

式中,dz表示真实的微分而不是上面约定的比值。不难发现上式右边第二项即为第一层激励函数g(双曲正切)的导数,第一项可以由输出层的z与a线性关系式转化成L对z[2]的导数,同时结合矢量微积分可以导出,

dz[1]=w[2]Tdz[2]*g[1]'(z[1])

第一层的dw[1]和db[1]和第二层表达关系形式上是类似的,都是线性加权关系决定的。

计算了以上微分量之后于是可以代入权值迭代公式:

w[i](k+1)=w[i](k)-αdw[i],i=1,2

b[i](k+1)=b[i](k)-αdb[i],i=1,2

实际编码时,为了启动迭代还需要对权值进行随机初始化得到初始权值向量。每得到一次新的权值向量,信息流进行一次前馈过程直到输出层,在输出层计算偏差;信息流到达输出层后又进行一次反向传导计算各权值对应的微分量直到第一层,微分量更新后又计算新的权值向量。整个迭代过程周而复始,信息流的前馈和反向传播交替进行,直到输出层得到的偏差收敛于预设的水平或者迭代达到最大限度。这便是用反向传播算法训练神经网络的基本过程。对于每个训练样本都经历上述迭代过程,最后平均各样本得到的结果即得到整个训练完成后的分类模型。

考虑到数字字母与汉字形态的差异性,使用两个独立的网络分开进行训练。该训练过程为有监督训练,因此需要提供样本数据的类别标签信息。为此引入N*M的训练矩阵,N表示训练样本的数目,M是样本的类别数。比如对于单纯的数字网络,M等于10,即十个待识别的数字类别数。加上车牌24个英文字母(不考虑字母I和O)的个数,对于非汉字网络类别数为34。对于汉字网络类别数为31.如果第i行样本属于第j类那么该矩阵(i,j)位置标记为1。以这种方式来存储各个字符样本的类别标签。系统识别完成后会给出字符属于每个类别的概率从而选取最大的那个完成分类。

训练过程即神经网络的构建过程。通过前处理,将提取的字符特征输入神经网络先进行训练,再利用测试集测试识别性能。

1.5.4 神经网络配置

对于非汉字网络输入神经元120个,汉字网络输入神经元440个。隐层神经元40个。非汉字网络输出节点34个,汉字网络输出节点31个。学习率取0.01。激励函数隐层选取常用的双曲正切tanh函数,输出层激励则选择Sigmoid函数。训练算法为Back Propagation算法。

2 实验效果与评估

系统由VS2013开发平台采用C++编码,并链接了OpenCV库,在CPU主频2.3 GHz,8 G内存的Win10家庭版笔记本电脑平台上开发实现并测试识别效果。采用来源于网络的训练样本100张,拍摄距离2米左右,车牌倾斜较小。SVM使用这些样本在实验时产生的分辨率为136*36的车牌图片作为正样本,使用程序在源图中提取相同大小的非车牌区域块作为负样本,各150张。ANN训练字符样本通过对车牌样本图片执行字符分割算法得到。汉字分辨率均为20*20,数字和字母为10*10。实验结果如表1所示。

定位准确率为所有检测到真实车牌的样本占测试集的比例。识别准确率表示得出正确识别结果的样本占比。拒识率是由于车牌未检测到或者车牌曝光条件等不符合要求等而导致系统未给出识别结果的样本比例。测量时统计每次处理的时间,最后取平均数作为系统运行过程花费的时间。

表1 实验结果

对误识和拒识的样本通过逐个反复测试分析发现:1)个别车牌倾斜程度较大,汉字分割不准从而导致识别偏差;2)对于少数远距离拍摄的样本发生拒识现象,主要原因是此时背景的干扰要素与近距离样本相比明显变多,系统无法检测到车牌。对于近距离且无明显倾斜形变的绝大部分车牌样本,系统表现良好。对于这些样本,由于识别前处理加入超分辨率模块改善了字符的可辨识度,从而保证了较高识别准确率。对于较远距离的复杂场景则需要研究更加灵敏并且鲁棒性好的车牌检测方法。

3 总结与展望

本文讨论了如何结合超分辨率领域的最新成果,对车牌进行预处理进而较准确地完成识别。从至少三个方面增强了一个基本的车牌识别系统:一是引入了超分辨率重建技术来强化车牌识别的前处理流程;二是增加了训练良好的SVM判决器来确认识别前得到的是真实车牌;三是引入并行计算来综合不同的车牌检测策略,增加检测准确率的同时提高效率。未来考虑统一检测和识别过程,建立端到端的识别框架,使得二者共用特征空间并建立统一提取汉字和其他字符的机制。

[1] 吴 昊,丁庆生.一种完整的汽车牌照识别算法[J].计算机测量与控制,2008,16(3): 392-394.

[2] Matas J,Chum O,UrbanM,et al.Robust Wide Baseline Stereo from Maximally Stable Extremal Regions[A].BMVC[C].London,2002:384-393.

[3] William T.Freeman,Egon C. Pasztor.Learning low-level vision[A].ICCV[C].1999,40(1):1182.

[4] Jianchao Yang,Image Super-Resolution via Sparse Representation[J]. IEEE Transactions on Image Processing,2010,19(11):2861-2873.

[5] Timofte R, De V, Gool L V. Anchored Neighborhood Regression for Fast Example-Based Super-Resolution[J].IEEE international Conference on Computer Vision,2013:1920-1927.

猜你喜欢

车牌字符字典
车牌颜色里的秘密
论高级用字阶段汉字系统选择字符的几个原则
字符代表几
一种USB接口字符液晶控制器设计
图片轻松变身ASCⅡ艺术画
字典的由来
大头熊的字典
第一张车牌
一种侧向插装型车牌架
正版字典