1.Gabor变换简介
该部分主要摘自:Gabor滤波进行目标图像纹理特征的提取。
说起Gabor变换就得先从Fourier变换说起。傅里叶变换是线性系统分析的有力工具,提供了一种把时域信号转换到频域进行分析的途径,时域和频域之间是一对一的映射关系。图像的频率是表征图像中灰度变化剧烈程度的指标,是灰度在平面空间上的梯度。如:大面积的沙漠在图像中是一片灰度变化缓慢的区域,对应的频率值很低;而对 于地表属性变换剧烈的边缘区域在图像中是一片灰度变化剧烈的区域,对应的频率值较高。
傅立叶变换在实际中有非常明显的物理意义,设f是一个能量有限的模拟信号,则其傅立叶变换就表示f的 谱。从纯粹的数学意义上看,傅立叶变换是将一个函数转换为一系列周期函数来处理的。从物理效果看,傅立叶变换是将图像从空间域转换到频率域,其逆变换是将 图像从频率域转换到空间域。换句话说,傅立叶变换的物理意义是将图像的灰度分布函数变换为图像的频率分布函数,傅立叶逆变换是将图像的频率分布函数变换为 灰度分布函数。
Gabor变换是D.Gabor1946年提出的。为了由信号的Fourier变换提取局部信息,引入了时间局部化的窗函数,得到了窗口Fourier变换。由于窗口Fourier变换只依赖于部分时间的信号,所以,现在窗口Fourier变换又称为短时Fourier变换,这个变换又称为Gabor变换。
Gabor小波与人类视觉系统中简单细胞的视觉刺激响应非常相似。它在提取目标的局部空间和频率域信息方面具有良好的特性。虽然Gabor小波本身并不能构成正交基,但在特定参数下可构成紧框架。Gabor小波对于图像的边缘敏感,能够提供良好的方向选择和尺度选择特性,而且对于光照变化不敏感,能够提供对光照变化良好的适应性。上述特点使Gabor小波被广泛应用于视觉信息理解。
Gabor滤波器和脊椎动物视觉皮层感受野响应的比较:第一行代表脊椎动物的视觉皮层感受野,第二行是Gabor滤波器,第三行是两者的残差。可见两者相差极小。Gabor滤波器的这一性质,使得其在视觉领域中经常被用来作图像的预处理。
关于Gabor变换的定义和Gabor核函数请参考:Gabor特征总结。
2. Gabor特征提取
该部分主要摘自:人脸识别---Gabor特征(mean pooling和max pooling)。
通常我们使用的Gabor滤波器有8个方向,5个尺度,这些参数都可以调节。Gabor滤波器分为实数部分和虚数部分,如图1所。图1a为实数部分,图1b为虚数部分。
图1a Gabor滤波器实数部分
图1b Gabor滤波器虚数部分
从图1a和图1b可以清楚看出,每一列为尺度变化,一共有5个尺度。每一行为方向变化,一共有五个方向。
把人脸图像分别用对应的实部虚部滤波器进行滤波,再进行平方相加开根号。就可以得到人脸的Gabor特征了,如图2待提取的人脸图像。图3为Gabor的特征图。
图3为Gabor特征的特征图,图像大小为100*70,假设不损失边缘进行滤波,那么将得到100*70*40=28w特征,这个特征太大!(1)不适合存储。(2)有很多不需要的特征,导致维数灾难。
下面我介绍一种特征降维的方法,称为pooling,在Deep learning有用到过。对特征图可以进行max pooling或者mean pooling。如图4所示
图4 人脸特征图像分块方式
每一个小块,我们可以取平均或者这个小块的最大值,取平均叫mean pooling,取最大值为max pooling。假设每一个小块为10*10,那么一张feature map大小为7*10。对于40张feature map,总特征维度为7*10*40=2800。这样的特征便于存储。
当然还有其他特征处理的方式
- 关键点采样(SIFT,SURF关键点都可以)
- 定点采样,坏处在于不知道采的特征是否具体代表性。
- Adaboost等方法特征选择方法选择特征。
3.Opencv实现
目前Opencv3.2中仅仅集成了计算gabor核的API:getGaborKernel()。如果想获得像上面提到的5个尺度,8个方向的gabor核,可以参考Gabor滤波器的生成。关于利用gabor变换来进行人脸识别,可以参考 基于Gabor的人脸检测的Opencv代码。