由于Gabor特征对光照、姿态具有一定的鲁棒性,Gabor特征具有良好的空间局部性和方向选择性,可以很好的描述图像的纹理信息,因此许多算法都采用Gabor特征作为识别特征。

该算法仅对图像中部分关键特征点进行Gabor变换,并将这些特征点位置为顶点、以其Gabor变换系数为顶点属性、以其关键点位置关系为边属性的属性图,从而将问题转化为图匹配问题。通过合理的选择特征点的位置,弹性图可以很好地同时对关键局部特征及其它们之间的关系进行建模,从而既利用了图像亮度分布特征,又利用了结构信息。GWN方法从最佳描述的角度,通过一个优化过程完全自动地确定特征位置及其相应的小波参数,并最终用这些参数作为描述来进行人脸识别。但GWN是一种基于参数优化的建模方法,计算复杂度很高。GFC算法的基本思想是在粗略对齐图像的前提下,逐像素计算每个像素点的多方向、多尺度Gabor变换特征,形成Gabor特征的表示,然后进一步用Fisher判别分析法提取特征,为了解决逐像素Gabor特征维数过高的问题,Liu采用了简单的下采样处理方法。AdaGabor算法采用AdaBoost算法对高维Gabor特征进行选择的降维,该方法采用机器学习的方法更加客观地利用Gabor特征,从而能在有效降维的同时提高识别性能。

Gabor小波与人类视觉系统中简单细胞的视觉刺激响应非常相似。它在提取目标的局部空间和频率域信息方面具有良好的特性。虽然Gabor小波本身并不能构成正交基,但在特定参数下可构成紧框架。Gabor小波对于图像的边缘敏感,能够提供良好的方向选择和尺度选择特性,而且对于光照变化不敏感,能够提供对光照变化良好的适应性。上述特点使Gabor小波被广泛应用于视觉信息理解。二维Gabor小波变换[15]是在时频域进行信号分析处理的重要工具,其变换系数有着良好的视觉特性和生物学背景,因此被广泛应用于图像处理、模式识别等领域。与传统的傅立叶变换相比,Gabor小波变换具有良好的时频局部化特性。即非常容易地调整Gabor滤波器的方向、基频带宽及中心频率从而能够最好的兼顾信号在时空域和频域中的分辨能力;Gabor小波变换具有多分辨率特性即变焦能力。即采用多通道滤波技术,将一组具有不同时频域特性的Gabor小波应用于图像变换,每个通道都能够得到输入图像的某种局部特性,这样可以根据需要在不同粗细粒度上分析图像。此外,在特征提取方面,Gabor小波变换与其它方法相比:一方面其处理的数据量较少,能满足系统的实时性要求;另一方面,小波变换对光照变化不敏感,且能容忍一定程度的图像旋转和变形,当采用基于欧氏距离进行识别时,特征模式与待测特征不需要严格的对应,故能提高系统的鲁棒性[16,17]

无论从生物学的角度还是技术的角度,Gabor特征都有很大的优越性。Jones和Palmer的研究表明,在基本视觉皮层里的简单细胞的感受野局限在很小的空域范围内,并且高度结构化。Gabor变换所采用的核(Kernels)与哺乳动物视觉皮层简单细胞2D感受野剖面(Profile)非常相似,具有优良的空间局部性和方向选择性,能够抓住图像局部区域内多个方向的空间频率(尺度)和局部性结构特征。这样,Gabor分解可以看作一个对方向和尺度敏感的有方向性的显微镜。同时,二维Gabor函数也类似于增强边缘以及峰、谷、脊轮廓等底层图像特征,这相当于增强了被认为是面部关键部件的眼睛、鼻子、嘴巴等信息,同时也增强了诸于黑痣、酒窝、伤疤等局部特征,从而使得在保留总体人脸信息的同时增强局部特性成为可能[18]

从图像处理的角度来看,Gabor特征有如下好处:

(1)Gabor核函数由于去掉了直流分量,因此对局部光照的变化不敏感,常常被用在要求对光照有适应性的场合;

(2)Gabor滤波结果可以反映图像不同尺度、不同方向上的灰度分布信息。一般说来,大尺度滤波可以反映全局性较强的信息,同时可以掩盖图像中噪声的影响;小尺度可以反映比较精细的局部结构,但容易受到噪声影响。

小波核函数在空域和频域上都有一定的局域性,这使得其对平移、拉伸、旋转和尺度变换都具有一定的鲁棒性。虽然平移变换对复向量的相位有一定影响,但在人脸识别这个问题中,平移对结果的影响是要考虑的,Gabor特征仍然具有很好的刻画特性。

正是由于Gabor特征的这些特性,使得其在识别中得到了非常广泛的应用。




clear all; I=imread('CLOCK.bmp');  I=rgb2gray(I); %if isa(I,'double')~=1  %I=double(I); %end figure; imshow(I); [height width ]=size(I); J=zeros(height,width);  %u=4; v=0; for u=0:7   %orientations 0-7      sigma = pi/3;%pi*sqrt(2^(-v/2-1));%pi*2; sigma_2 = sigma^2;  kv = pi*2^(-v/2-1); phiu = u*pi/8;  sigma_rule = 3*sigma/kv;    %3 sigma rule  kjx = kv*cos(phiu); kjy = kv*sin(phiu);  for x = -sigma_rule:sigma_rule     for y = -sigma_rule:sigma_rule         gaussian_kernal = kv^2/sigma_2*exp(-kv^2*(x^2+y^2)/(2*sigma_2)); %gaussian kernal function                  if (abs(x)<=sigma_rule & abs(y)<=sigma_rule)             gabor_real(x+sigma_rule+1,y+sigma_rule+1) = gaussian_kernal * (cos(kjx*x+kjy*y)-exp(-sigma_2/2));             gabor_imag(x+sigma_rule+1,y+sigma_rule+1) = gaussian_kernal * sin(kjx*x+kjy*y);         else             gabor_real(x+sigma_rule+1,y+sigma_rule+1) = 0;             gabor_imag(x+sigma_rule+1,y+sigma_rule+1) = 0;         end      end end  Imgabout1 = conv2(I,double(gabor_imag),'same'); Regabout1 = conv2(I,double(gabor_real),'same'); gabout1 = Regabout1; %gabout1 = Imgabout1; %for i=2:height-1     %for j=2:width-1         %J(i,j)=J(i,j)+gabout1(i,j);         %end         %end         J=J+gabout1;     end %k=255/[max(max(J))-min(min(J))];  %G=[J-min(min(J))]/k; J=J/8; for i=1:height     for j=1:width         if (J(i,j)<-5)             J(i,j)=0;         else J(i,j)=1;         end     end end G=[J-min(min(J))]*255/[max(max(J))-min(min(J))]; G=uint8(G); figure,imshow(G);  %J=medfilt2(J); %figure,imshow(J);