本发明属于计算机视觉和人工智能技术领域,涉及一种人脸识别方法,具体涉及一种大姿态人脸识别方法。
背景技术:
人脸识别技术是当代人工智能、模式识别、计算机视觉领域中的热门研究课题之一。在实际生活以及科学应用中对人脸识别检测得出,大角度姿态的因素是影响人脸识别结果的主要因素。当输入的人脸图像是一张偏转角度较大的侧脸图像时,很多常规人脸识别算法性能都大幅度的下降,导致识别率会明显大幅下降。实验已经证明,即使是对同一个人的两幅图像,不同的姿态反映在图像上也会有很大的差异,这种差异可能会比相同姿态不同身份的人差异还要大。在目前所有的算法中,姿态的矫正归一化已经被证明是一个有效的算法。
目前针对大角度人脸姿态,主流研究方法主要集中在三维人脸模板和二维平面技术。在三维模板方面,需要由单幅图像构造出三维模板来进行,但是三维人脸重建运算较复杂,计算量较大,难以实现实时性的要求,并且模板的构建需要精确标定一些特征点;在二维方面,lucas-kanade算法是一个非常有效的图像对齐算法,但是传统基于lk算法的人脸姿态恢复,在单个图片上进行过程容易陷入局部最小值从而得不到全局最优参数,致使人脸的图片恢复比较模糊。
故,需要一个新的技术方案来解决这个问题。
技术实现要素:
发明目的:为了克服现有技术中存在的大姿态人脸识别率低的问题,提供一种基于加权lk算法的最大gabor相似度大姿态人脸识别方法,其通过gabor特征找到每块人脸的最优仿射变换参数,从而得到矫正后的清晰正脸图片,有效的提高了识别率。
技术方案:为实现上述目的,本发明提供一种基于加权lk算法的最大gabor相似度大姿态人脸识别方法,包括如下步骤:
1)对训练集中的每个侧面人脸和其对应的正面人脸区域进行对应分块划分;
2)使用加权的lk算法得到训练集中每个人脸上划分的每块区域的仿射变换参数,并且将训练集中所有的对应人脸区域的仿射变换参数作为候选集;
3)依据训练集中每一块矫正的人脸块和其对应正脸块gabor相似度最大的准则,找到划分的每块人脸区域对应的最优仿射变换参数;
4)利用每块区域的最优仿射变换参数求出在此参数之下这一块人脸区域的平均gabor相似度;
5)对待识别的人脸图片进行角度测定和侧脸区域分块划分;
6)根据步骤3找到步骤5中侧脸区域的所有分块区域的最优仿射变换参数,合成正面人脸;
7)采用加权的局部gabor二值模式直方图序列方法对步骤6中合成的正面人脸进行识别,其中每块人脸区域的识别权重值为这一块人脸区域的平均gabor相似度。
所述步骤1中侧面人脸指某一角度范围内的人脸,用于矫正的侧脸及正脸分块并不需要精确的点对点对应,而是大致地局部区域对应即可,其具体的划分为:先划分若干某一角度人脸和正面人脸的图片,每一块都大致实现侧脸和正脸图片分区域的对应,一共划分成n块区域。
进一步地,所述步骤2中用p表示仿射变换参数,用i来表示侧脸的图像,用t来表示对应的正脸图像,下标r表示块的编号,得到以下函数:
e=||[g1*ir(w(x,p)),……,gm*ir(w(x,p))]-[g1*tr(x),……,gm*tr(x)]||2
式中gi表示第i个gabor变换,m表示选择的gabor变换总数,利用加权的lk算法来求解上述函数,其具体步骤为:
2.1)变换到傅里叶频域并用parseval定理,可以得到如下:
其中
2.2)用包含傅里叶基向量的矩阵f来代替傅里叶变换:
e=[ir(w(x,p))-tr(x)]tftsf[ir(w(x,p))-tr(x)]
q=ftsf即为加权的矩阵;
2.3)对上式进行一级泰勒展开,并且令关于δp的偏导数等于0,得:
其中
2.4)p参数从零向量开始迭代p=p+δp,直到达到收敛,最后将收敛值看作这一块的仿射变换参数p。
进一步地,所述步骤3中最优仿射变换参数的确定包括步骤如下:
3.1)训练集中所有的对应人脸区域的仿射变换参数作为候选集p,库中第k个侧面人脸中的第i块区域在参数pi下的gabor特征,得到一个特征向量bk,i
bk,i(pi)=[g1*ik,i(w(x,pi));……;gm*ik,i(w(x,pi))]
3.2)库中对应第k个正面人脸图片第i块的gabor特征ak,i
ak,i=[g1*tk,i(x);……;gm*tk,i(x)]
3.3)对于第i块区域的每一个参数pi,计算其gabor相似度gabor_s(pi)
3.4)第i块区域全局最优参数
进一步地,所述步骤7中具体的人脸识别过程如下:
4.1)按照每块人脸的划分来进行分块加权识别,假设灰度区间为[0,l-1],hμ,ν,i表示第i块人脸在gabor变换gμ,ν下得到的直方图
hμ,ν,i=(hμ,ν,i,0,hμ,ν,i,1,……,hμ,ν,i,l-1)
其中hμ,ν,i,r=∑i{gμ,ν(z)=r}r表示灰度等级,并且
最终每个人脸的直方图为:
4.2)衡量两个人脸相似度的加权lgbphs为
其中:
4.3)设定第i块的权重值为通过此人脸块的最优仿射变换参数
4.4)最后,找到使
本发明中首先对训练数据集中的侧脸图片和对应正脸图片进行分块操作,利用加权的lk(lucas-kanade)算法得到相应侧脸块和正脸块的仿射变换参数候选集;然后,对于候选集中的每一个参数,找到其中的最优参数,使得训练集中每一块矫正人脸块和对应正脸块的gabor相似度最大;对每一侧脸块用其对应的最优仿射变换参数即可矫正为这一块人脸的正脸,所有的块拼接起来即是矫正后的正面人脸形式;最后采用加权的局部gabor二值模式直方图序列算法,以每一人脸块最优参数得到的平均gabor相似度作为这一块人脸的识别权重来进行认证识别。
有益效果:本发明与现有技术相比,具备如下优点:
1、训练集中的图片不需要做特征点的标定,需要的准备工作少,并且训练集中矫正的侧脸及正脸分块并不需要精确对应,只要大致地局部区域对应即可。
2、训练的过程所需要的数据集少,训练时间短,同时在人脸合成识别阶段所用的时间也少。
3、本发明能够高效并且精确的获得全局最优仿射变换参数,使得对于侧脸的识别率得到了大幅提高,并且对姿态和光照都具有一定的鲁棒性。
附图说明
图1为本发明的整体流程图;
图2为侧脸和正脸分块图;
图3为求得的全局最优参数的gabor相似度表现示意图;
图4为每块人脸区域经过gabor最优参数矫正后的人脸图像;
图5为lbp算法的示意图。
具体实施方式
下面结合附图和具体实施例,进一步阐明本发明。
如图1所示,本发明提供一种基于加权lk算法的最大gabor相似度大姿态人脸识别方法,其具体包括如下步骤:
一)首先是训练图片,其具体为对训练集中的侧脸以及正脸图片进行对应分块划分,分块后的示意图如图2所示,具体的分块步骤如下:
1.1)正脸分块:正脸每一块用矩形划定即可,一共划分了n=27块,从上到下依次划分为5+5+5+5+4+3块区域,矩形的长宽都设定为12(人脸图片的大小为80*80),因为长宽确定,所以每个区域用一个数组pt记录下来左上角的坐标即可;
1.2)侧脸分块:找到侧脸分块时候对应矩形的顶点在侧脸上的位置,在进行手工划分,每个区域用一个矩阵记录下来四个顶点的位置。
二)对训练集中的每个侧脸及其对应的正脸用加权lk算法求得每块人脸区域的仿射变换参数,并且以训练集中每个侧脸区域的参数作为候选集,具体步骤如下:
2.1)准备5个尺度,8个方向的gabor变换,将其存储在一个二维数组gaborarray{i,j}中,其中i表示尺度,j表示方向;
2.2)定义一个lk的类,用来处理和lk算法相关的步骤,其具体如下:
2.2.1)在此类中定义如下变量:
img1表示正脸图像;
fx表示sobel滤波器在x方向的核函数;
fy表示sobel滤波器在y方向的核函数;
x表示x方向上的坐标;
y表示y方向上的坐标;
t_0表示正脸区域;
dsize表示正脸的尺寸。
2.2.2)在此类中定义初始化方法,包含以下内容:
初始化fx,fy为fx=[-1,1],fy=fx'。将t_0初始化为正脸区域,初始化的过程可以通过imcrop函数来完成,即:
t_0=imcrop(img1,[pt(1),pt(2),11,11])
其中imcrop是matlab工具箱中提供的函数,用来截取图像的指定区域,pt指定左上角的坐标,11用来设定截取的像素长度;
初始化x和y,首先:
[x1,y1]=meshgrid(0:size(t_0,2)-1,0:size(t_0,1)-1)
其中meshgrid为matlab工具箱中提供的函数,将x1,y1全部向量化来初始化x和y,x=x1(:),y=y1(:);dsize的初始化为:dsize=size(t_0),得到和t_0同样大小的矩阵维度。
2.2.3)侧脸到正脸的拟合方法fit方法,通过此方法可以实现侧脸块到正脸块的仿射变换参数求取,用bimg表示侧脸图像的区域,ix,iy表示侧脸的x,y方向上的梯度图像,仿射变换参数的具体求取方法如下:
2.2.3.1)首先求取ix,iy,ix=imfilter(bimg,fx),iy=imfilter(bimg,fy),其中imfilter为matlab中提供的对图像进行滤波的函数,第一个参数指定需要进行滤波的图像,第二个参数指定滤波过程中的核函数。
2.2.3.2)用p代表初始化的仿射变换参数,从0开始进行迭代,迭代次数为num_iter,p是一个包含6个参数的矩阵,这六个参数控制着x和y方向的旋转、缩放和平移,表示如下:
用patch表示侧脸区域经过仿射变换参数p之后得到的图像信息,并且用dsize指定大小。
通过tform=maketform('affine',p)得到仿射变换的结构体,其中makeform是matlab中自带的函数,可以创建tform结构体,配合imtransform函数来实现图像变换。patch=imtransform(img,tform,'bilinear','xdata',[0,dsize(2)-1],'ydata',[0,dsize(1)-1]),imtransform是matlab中自带的函数,第一个参数指定要转化的图像,第二个参数tform指定要使用变换的结构体,第三个参数指定要使用的插值方式,'bilinear'表示双线性三次插值,xdata和ydata表示指定输出图像在二维输出空间x,y中的位置。同样的对梯度图像ix,iy用上述的仿射变换参数p进行上述的变换,得到ix_p,iy_p。
2.2.3.3)用当前的p构建一个雅克比矩阵。构建一个和x同尺度的全1和全0数组v1,v0,即v1=ones(size(x)),v0=zeros(size(x)),构建仿射变换参数的微分dwx=[-x,y,v1,v0,v0,v0]以及dwy=[v0,v0,v0,x,-y,v1]。
通过将x,y方向的梯度图像ix_p,iy_p向量化,分别与dwx,dwy进行点乘(每个元素对应相乘)即可得到雅可比矩阵j,即:
j=dwx.*repmat(ix_p(:),[1,6])+dwy.*repmat(iy_p(:),[1,6])
repmat为matlab自带的函数,可以将第一个参数代表的元素进行复制,复制的维度由第二个参数指定。
2.2.3.4)用泰勒一级展开来求取dp,首先对侧脸区域patch进行gabor滤波变换:p_feature=imfilter(patch,gaborarray{i,j}),对正脸区域t_0进行gabor变换:t_feature=imfilter(t_0,gaborarray{i,j}),用雅可比矩阵j来实现侧脸图像区域patch与正脸图像区域t_0的最优线性逼近,以此来求取dp,即:
dp=j\(t_feature(:)-p_feature(:))
\表示矩阵的左除,用t_0(:)-patch(:)左除j即可得到dp。
2.2.3.5)用求出来的dp对仿射变换参数p进行更新,即
p=p+dp
2.2.3.6)迭代次数加1,如果迭代次数小于指定的迭代次数,继续回到步骤2.2.3.2进行执行,如果迭代次数超出了指定的迭代次数,退出循环,求得的p即为这一块侧脸区域的最优仿射变换参数。本次试验中选取的迭代次数为30次,一般迭代次数在20次左右就会收敛。
2.3)对训练集中的所有侧脸图片进行上述训练,本实施例中选用了b=60张侧脸图片以及对应的正脸图片,对每一个侧脸图片通过步骤2.2,得到侧脸每一块的所有(60个)仿射变换参数,对应人脸区域求得的参数存储在对应候选集合p中。
三)对候选集合中的参数按照使得所有训练集中这一块矫正的人脸块与对应正脸块gabor相似度最大的准则来选择这一块的最优仿射变换参数,其具体步骤如下:
3.1)测量正脸区域t_0的gabor特征,对正脸区域t_0用gaborarray中的每个gabor变换进行滤波,即:
gabor_front_feature=imfilter(t_0,gaborarray{i,j})
将得到的特征信息向量化,通过所有gabor变换得到的特征组合起来得到gabor_front,即:
gabor_front=[gabor_front;gabor_front_feature(:)]
3.2)类似与步骤2.2.3.2得到合成的正脸区域finalpatch,测量合成的正脸区域finalpatch的gabor特征,对合成的正脸区域finalpatch用gaborarray中的每个gabor变换进行滤波,即
gabor_pose_feature=imfilter(finalpatch,gaborarray{i,j})
将得到的特征信息向量化,通过所有gabor变换得到的特征组合起来得到gabor_pose,即
gabor_pose=[gabor_pose;gabor_pose_feature(:)]
3.3)通过余弦变换即可衡量这一个仿射参数在此人脸区域的拟合程度cos_similar,即
cos_similar=(1-pdist2(gabor_front',gabor_pose','cosine'))
其中pdist2是matlab自带的函数,第一,二个参数指定样本,第三个参数可以用来指定要求哪种距离,将所有训练集(本实施例中选取的是60个人)中的这一块人脸区域在仿射变换参数p变换之后得到的余弦相似度加起来,得到参数p总的相似度,即:
在参数候选集合p当中找到使gabor_s(p)最大的参数
本实施例中,如图3所示,列出了第1、7、9、15块的同一角度下(40°)60个人的侧脸经过最优参数矫正后的侧脸块与正脸块gabor余弦相似度,图中每一个人脸区域中的水平虚线即为用这一块最优参数求得的平均gabor余弦相似度。
本实施例中,如图4所示,对人脸库中标定为40°的侧脸(包含不同光照条件下的情况)进行矫正。可以看出在光照不均匀的条件下,根据gabor特征得到的最优变换参数依然能够适应,所以证明了得到的全局最优参数对光照有一定的鲁棒性。
四)人脸的识别:首先对待识别的侧脸图片进行角度测定和侧脸区域分块划分,根据所有分块区域的最优仿射变换参数,合成正面人脸图片,即可运用合成的正脸图片进行身份的判定。由于本方法基于局部分块,而每个局部块在识别整个人脸中所起的作用大小不一,此外,根据最优矫正参数拟合的局部块也有相对的优劣之分,所以对每一块人脸区域设定一个识别权重ω,具体步骤如下:
4.1)由于姿态的矫正过程中,采用的是基于人脸分区域以及分区域的gabor特征矫正方法,所以运用加权lgbphs算法进行识别;
4.2)对人脸库中每个正脸区域t_0进行gabor变换得到gabor_front_feature,即
gabor_front_feature=imfilter(t_0,gaborarray{i,j})
对gabor_front_feature进行lbp算法,lbp算法大致简介如下:首先用3*3的模板对图像每个像素进行处理,比较当前像素和周围像素的大小,将大于当前像素的置1,小于的置0;其次对这周围八个像素进行编码,这八个0和1正好是可以组成一个byte数,然后按一定的规则组成这个无符号数;最后把这个数赋值给当前像素。算法的示意图如图5所示,整个算法过程用lbp来表示,即:
lbp_front_feature=lbp(gabor_front_feature)
得到的图像结果lbp_front_feature通过imhist函数得到灰度直方图,即
[counts_front,~]=imhist(lbp_front_feature)
其中imhist函数是matlab自带的函数,用于统计正脸图像区域中各个灰度值出现的频率并且记录在counts_front数组中,将各个人脸区域用所有gabor变换以及imhist函数处理之后,即可得到每个正脸的直方图表示
4.3)对测试集中的侧脸区域用相应的全局最优参数矫正之后,对其进行gabor变换,即:
gabor_pose_feature=imfilter(finalpatch,gaborarray{i,j})
对gabor_pose_feature进行lbp算法,得到lbp_front_feature,即:
lbp_front_feature=lbp(gabor_pose_feature)
得到的图像结果lbp_front_feature通过imhist函数得到灰度直方图:
[counts_pose,~]=imhist(gabor_pose_feature)
统计正脸图像区域中各个灰度值出现的频率并且记录在counts_pose数组中,将测试集的各个人脸区域用所有gabor变换以及imhist函数处理之后,即可得到侧脸直方图表示
4.4)衡量侧脸直方图
本实施例中将120张侧脸图片(角度包含±30°、±45°、±60°)分别通过上述本发明方法和其他人脸识别方法进行识别比较。
其他人脸识别方法分别为基于侧脸块到正脸块线性变换的llr(locallinearregression)方法和基于像素差值最小的姿态矫正方法,其最终的平均识别率分别为68.62%和75.75%;本发明方法的平均识别率为98.15%。由此可见,本发明方法能够有效的提高侧脸图片识别率。