gabor小波滤波器的在纹理提取、图像匹配上的作用
1、作用:Gabor小波可以方便的提取图像在各个尺度和方向上的纹理信息,同时在一定程度上降低了图像中光照变化和噪声的影响。
其对光照不敏感的例子:
注意:其对图像的旋转也具有一定的适应性。其出现特征提取不好的时候:当图像的旋转角度介于两个滤波器的方向之间时,这会导致图像的纹理提取产生不同,下面的例子是图像的旋转角度接近pi*3/4度时的纹理,其是有点失真的,但总体也能提取出滤波器方向上的纹理。
一、什么是Gabor函数(以下内容含部分翻译自维基百科)
在图像处理中,Gabor函数是一个用于边缘提取的线性滤波器。Gabor滤波器的频率和方向表达同人类视觉系统类似。研究发现,Gabor滤波器十分适合纹理表达和分离。在空间域中,一个二维Gabor滤波器是一个由正弦平面波调制的高斯核函数。
还有,生物学实验发现,Gabor滤波器可以很好地近似单细胞的感受野函数(光强刺激下的传递函数),什么视皮层内的超柱,bla...bla,总之是这方面仿生的数学模型。
另外,网上有一种说法,gabor分为实部和虚部,用实部进行滤波后图像会平滑;虚部滤波后用来检测边缘。【来自百度知道某个大神的回答】,我查了文献,发现的确有人用Gabor的奇函数部分做边缘提取(《基于Gabor滤波器的边缘检测算法》 无线电工程 2000年第3卷第30期)。另外,从我的实验结果也有类似的发现。暂且认为这个对的吧。
Gabor滤波器的脉冲响应,可以定义为一个正弦波(对于二维Gabor滤波器是正弦平面波)乘以高斯函数。由于乘法卷积性质,Gabor滤波器的脉冲响应的傅立叶变换是其调和函数的傅立叶变换和高斯函数傅立叶变换的卷积。该滤波器由实部和虚部组成,二者相互正交。一组不同频率不同方向的Gabor函数数组对于图像特征提取非常有用。
二维Gabor滤波器表达式
用Gabor 函数形成的二维Gabor 滤波器具有在空间域和频率域同时取得最优局部化的特性,因此能够很好地描述对应于空间频率(尺度)、空间位置及方向选择性的局部结构信息。Gabor滤波器的频率和方向表示接近人类视觉系统对于频率和方向的表示,并且它们常备用于纹理表示和描述。在图像处理领域,Gabor滤波器是一个用于边缘检测的线性滤波器。,在空域,一个2维的Gabor滤波器是一个正弦平面波和高斯核函数的乘积。Gabor滤波器是自相似的,也就是说,所有Gabor滤波器都可以从一个母小波经过膨胀和旋转产生。实际应用中,Gabor滤波器可以在频域的不同尺度,不同方向上提取相关特征。
另一个二维Gabor函数的数学表达:
复数表达:
实数部分:
虚数部分:
其中:
和
下面介绍公式中各个参数的含义,及参数如何配置问题【都从老外那翻译来的】:
波长(λ):它的值以像素为单位指定,通常大于等于2.但不能大于输入图像尺寸的五分之一。
方向(θ):这个参数指定了Gabor函数并行条纹的方向,它的取值为0到360度
相位偏移(φ):它的取值范围为-180度到180度。其中,0he180度分别对应中心对称的center-on函数和center-off函数,而-90度和90度对应反对称函数,其一般为0。
长宽比(γ):空间纵横比,决定了Gabor函数形状(support,我翻译为形状)的椭圆率(ellipticity)。当γ= 1时,形状是圆的,即想、y
高斯函数的标准差相当。当γ< 1时,形状随着平行条纹方向而拉长。通常该值为0.5,其相当于x、跟y的标准差不是相同的σ,而是σ1、σ2。
带宽(b):Gabor滤波器的半响应空间频率带宽b和σ/ λ的比率有关,其中σ表示Gabor函数的高斯因子的标准差,如下:
σ的值不能直接设置,它仅随着带宽b变化。带宽值必须是正实数,通常为1,此时,标准差和波长的关系为:σ= 0.56 λ。带宽越小,标准差越大,Gabor形状越大,可见平行兴奋和抑制区条纹数量越多。
下面给出,不同参数配置下的Gabor核函数效果图,大小均100*100:
a.波长对比组【方向为:0,相位偏移量为:0,纵横比率为:0.5,带宽为:1,下图波长分别为5,10,15】
b.方向对比组【波长为:10,相位偏移量为:0,空间纵横比为:0.5,带宽为:1,方向分别为:0,45,90】
c.相位偏移量对比组【波长为:10,方向为:0,空间纵横比:0.5,带宽:1,相位偏移量分别为:0,180,-90,90】
d.空间纵横比对比组【波长:10,相位偏移量:0,方向:0,带宽:1,空间纵横比分别为:0.5,1】
e.带宽对比组【波长:10,方向:0,相位偏移量:0,空间纵横比:0.5,带宽分别为:0.5,1,2】
1) Gabor优点
Gabor小波与人类视觉系统中简单细胞的视觉刺激响应非常相似。它在提取目标的局部空间和频率域信息方面具有良好的特性。虽然Gabor小波本身并不能构成正交基,但在特定参数下可构成紧框架。Gabor小波对于图像的边缘敏感,能够提供良好的方向选择和尺度选择特性,而且对于光照变化不敏感,能够提供对光照变化良好的适应性。上述特点使Gabor小波被广泛应用于视觉信息理解。
Gabor滤波器和脊椎动物视觉皮层感受野响应的比较:第一行代表脊椎动物的视觉皮层感受野,第二行是Gabor滤波器,第三行是两者的残差。可见两者相差极小。Gabor滤波器的这一性质,使得其在视觉领域中经常被用来作图像的预处理。
二、gabor函数实现:
matlab版本,我从pudn上找来的,但他的gabor函数,我没怎么看明白:
gabor函数:
![](https://code.csdn.net/assets/CODE_ico.png)
- function gabor_k = compute(x,y,f0,theta)
- r = 1; g = 1;
- x1 = x*cos(theta) + y*sin(theta);
- y1 = -x*sin(theta) + y*cos(theta);
- gabor_k = f0^2/(pi*r*g)*exp(-(f0^2*x1^2/r^2+f0^2*y1^2/g^2))*exp(i*2*pi*f0*x1);
![](https://code.csdn.net/assets/CODE_ico.png)
- function gabor_k = compute(x,y,f0,theta)
- r = 1; g = 1;
- x1 = x*cos(theta) + y*sin(theta);
- y1 = -x*sin(theta) + y*cos(theta);
- gabor_k = f0^2/(pi*r*g)*exp(-(f0^2*x1^2/r^2+f0^2*y1^2/g^2))*exp(i*2*pi*f0*x1);
![](https://code.csdn.net/assets/CODE_ico.png)
- %绘制一个Gabor滤波器的空域和频域函数图
- clear;
- x = 0;
- theta = 0;
- f0 = 0.2;
- for i = linspace(-15,15,50)
- x = x + 1;
- y = 0;
- for j = linspace(-15,15,50)
- y = y + 1;
- z(y,x)=compute(i,j,f0,theta);
- end
- end
- x = linspace(-15,15,50);
- y = linspace(-15,15,50);
- surf(x,y,real(z))
- title('Gabor filter:real component');
- xlabel('x');
- ylabel('y');
- zlabel('z');
- figure(2);
- surf(x,y,imag(z))
- title('Gabor filter:imaginary component');
- xlabel('x');
- ylabel('y');
- zlabel('z');
- Z = fft2(z);
- u = linspace(-0.5,0.5,50);
- v = linspace(-0.5,0.5,50);
- figure(3);
- surf(u,v,abs(fftshift(Z)))
- title('Gabor filter:frequency component');
- xlabel('u');
- ylabel('v');
- zlabel('Z');
![](https://code.csdn.net/assets/CODE_ico.png)
- %绘制一个Gabor滤波器的空域和频域函数图
- clear;
- x = 0;
- theta = 0;
- f0 = 0.2;
- for i = linspace(-15,15,50)
- x = x + 1;
- y = 0;
- for j = linspace(-15,15,50)
- y = y + 1;
- z(y,x)=compute(i,j,f0,theta);
- end
- end
- x = linspace(-15,15,50);
- y = linspace(-15,15,50);
- surf(x,y,real(z))
- title('Gabor filter:real component');
- xlabel('x');
- ylabel('y');
- zlabel('z');
- figure(2);
- surf(x,y,imag(z))
- title('Gabor filter:imaginary component');
- xlabel('x');
- ylabel('y');
- zlabel('z');
- Z = fft2(z);
- u = linspace(-0.5,0.5,50);
- v = linspace(-0.5,0.5,50);
- figure(3);
- surf(u,v,abs(fftshift(Z)))
- title('Gabor filter:frequency component');
- xlabel('u');
- ylabel('v');
- zlabel('Z');
运行结果:
![](https://code.csdn.net/assets/CODE_ico.png)
- %4个方向的Gabo滤波器通过图像显示
- clear;
- x = 0;
- theta = pi*3/4;%用弧度0,pi/4,pi/2,pi*3/4
- f0 = 0.2;
- for i = linspace(-15,15,50)
- x = x + 1;
- y = 0;
- for j = linspace(-15,15,50)
- y = y + 1;
- z(y,x)=compute(i,j,f0,theta);
- end
- end
- z_real = real(z);
- m = min(z_real(:));
- z_real = z_real+abs(m);
- M = max(z_real(:));
- imshow(1/M*z_real);
- figure(2)
- z_imag = imag(z);
- m = min(z_imag(:));
- z_imag = z_imag+abs(m);
- M = max(z_imag(:));
- imshow(1/M*z_imag);
![](https://code.csdn.net/assets/CODE_ico.png)
- %4个方向的Gabo滤波器通过图像显示
- clear;
- x = 0;
- theta = pi*3/4;%用弧度0,pi/4,pi/2,pi*3/4
- f0 = 0.2;
- for i = linspace(-15,15,50)
- x = x + 1;
- y = 0;
- for j = linspace(-15,15,50)
- y = y + 1;
- z(y,x)=compute(i,j,f0,theta);
- end
- end
- z_real = real(z);
- m = min(z_real(:));
- z_real = z_real+abs(m);
- M = max(z_real(:));
- imshow(1/M*z_real);
- figure(2)
- z_imag = imag(z);
- m = min(z_imag(:));
- z_imag = z_imag+abs(m);
- M = max(z_imag(:));
- imshow(1/M*z_imag);
运行效果:
实数部分:
虚数部分:
![](https://code.csdn.net/assets/CODE_ico.png)
- %4个方向的Gabor滤波器对lena进行滤波
- clear;
- I = imread('.\pic\lena.bmp');
- f0 = 0.2;
- count = 0;
- for theta = [0,pi/4,pi/2,pi*3/4];%用弧度0,pi/4,pi/2,pi*3/4
- count = count + 1;
- x = 0;
- for i = linspace(-8,8,11)
- x = x + 1;
- y = 0;
- for j = linspace(-8,8,11)
- y = y + 1;
- z(y,x)=compute(i,j,f0,theta);
- end
- end
- figure(count);
- filtered = filter2(z,I,'valid');
- f = abs(filtered);
- imshow(f/max(f(:)))
- end
![](https://code.csdn.net/assets/CODE_ico.png)
- %4个方向的Gabor滤波器对lena进行滤波
- clear;
- I = imread('.\pic\lena.bmp');
- f0 = 0.2;
- count = 0;
- for theta = [0,pi/4,pi/2,pi*3/4];%用弧度0,pi/4,pi/2,pi*3/4
- count = count + 1;
- x = 0;
- for i = linspace(-8,8,11)
- x = x + 1;
- y = 0;
- for j = linspace(-8,8,11)
- y = y + 1;
- z(y,x)=compute(i,j,f0,theta);
- end
- end
- figure(count);
- filtered = filter2(z,I,'valid');
- f = abs(filtered);
- imshow(f/max(f(:)))
- end
运行效果:
下面是自己修改的程序:
%4个方向的Gabo滤波器通过图像显示
close all;
clear;
x = 0;
theta =0;%用弧度0,pi/4,pi/2,pi*3/4
f0 = 0.2;
count=1;
I=imread('555.jpg');
imshow(I);
figure(1);
I1=rgb2gray(I);
for theta=[0,pi/4,pi/2,pi*3/4]count=count+1;x=0;
for i = linspace(-15,15,50) x = x + 1; y = 0; for j = linspace(-15,15,50) y = y + 1; z(y,x)=Gabor_compter(i,j,f0,theta); end
end
figure(count);
tic
filtered=filter2(z,I1,'valid'); %滤波器的左上角与数据的左上角重合,2*2的滤波器则是以左上角得数为代替数
toc
f=abs(filtered);
imshow(f/max(f(:)));
end
count=count+1;
figure(count)
z_real = real(z);
m = min(z_real(:));
z_real = z_real+abs(m);
M = max(z_real(:));
imshow(1/M*z_real);
count=count+1;
figure(count)
z_imag = imag(z);
m = min(z_imag(:));
z_imag = z_imag+abs(m); %这里是为了去掉负值很小的数e-5,、10几的小数。
M = max(z_imag(:));
imshow(1/M*z_imag);
% mi=min(z_imag(:));
% ma=max(z_imag(:));
% img2=1/(ma-mi)*z_imag;
% imshow(z_imag);
其中Gabor_compter.m里的函数Gabor_compter程序如下:
function gabor_k = Gabor_compter(x,y,f0,theta)
r =1; g =1; %其反映的就是长宽比,空间纵横比
x1 = x*cos(theta) + y*sin(theta);
y1 = -x*sin(theta) + y*cos(theta);
gabor_k = f0^2/(pi*r*g)*exp(-(f0^2*x1^2/r^2+f0^2*y1^2/g^2))*exp(i*2*pi*f0*x1); %f0就相当于波长的倒数,其反映波长λ。
2、图像匹配上的作用
其在匹配上的方法步骤一般为:想进行Gabor滤波器进行纹理特征提取;利用DCT变换进行降维处理;选取DCT变换后的图像左上角的信息,进行Z字形取数,可以有效的提取表征图像的较大系数信息;然后把得到的特征向量与库里的特征向量进行计算:|e-Xi|/|X|,若相似度小于阈值,则说明匹配成功。
gabor小波滤波器的在纹理提取、图像匹配上的作用相关推荐
- gabor小波matlab,用matlab实现gabor小波对图片的纹理特征提取【转】
用matlab实现gabor小波对图片的纹理特征提取[转] (2009-04-27 14:35:41) 过程如下: (1)在matlab中,用gaborfilter.m程序实现对三种农作物(小麦.棉花 ...
- python 计量做hp滤波_R语言提取时间序列的周期性成分应用EMD,小波滤波器,Baxter过滤器等...
原文链接:http://tecdat.cn/?p=5399 介绍 对商业周期的分析需要提取时间序列的周期性成分,该时间序列通常也受到诸如潜在趋势或噪声等其他因素的影响.本文介绍了一些在最近的文献中用于 ...
- 傅里叶变换 和 Gabor小波
1.傅里叶变换 1) 简介 数字图像处理的方法主要分成两大部分:空域分析法和频域分析法.空域分析法就是对图像矩阵进行处理:频域分析法是通过图像变换将图像从空域变换到频域,从另外一个角度来分析图像的特征 ...
- gabor与gabor小波
先总结一句:瞎搞不如看文献. 前沿:最近在做图像分割,需要用到gabor来增强图像,然而这个gabor我看了很久,在网上看了很多关于gabor的知识,也在不断的调试参数,可总达不到我想要的结果,也具体 ...
- 表情识别(三)--基于几何与Gabor小波的多层感知
转自:https://zhuanlan.zhihu.com/p/24483573 (我真的是信了里面几个重要信息点,红色标注,张友正大神...) 人脸表情识别(FER)作为智能化人机交互技术中的一个重 ...
- matlab中daubechie小波,[转载]小波滤波器
滤波器组完美重构与小波快速算法. 前面的分析可以知道Vj相当于在j分辨率的逼近,Vj-1相当于j-1分辨率的逼近,这样Wj-1相当于两个分辨率逼近的差.在高分辨率下,我们可以用f在(2^j*t)的采样 ...
- wfilters小波滤波器
wfilters 小波滤波器 语法 [Lo_D,Hi_D,Lo_R,Hi_R] = wfilters('wname') [F1,F2] = wfilters('wname','type') 描述 [L ...
- matlab 小波滤波器系数导出函数,小波基函数和滤波系数.ppt
小波基函数和滤波系数 小波分析及其应用 Wavelet Analysis andIt's Applications同济大学 计算机系宣国荣 2003年 6月10日 研究生讲座(2009年11月10日 ...
- 小波滤波器与其他滤波器的区别_小波变换(六):小波变换在机器学习中的应用(上)...
本文讲解一篇关于小波变换在机器学习中的应用的博客:<A guide for using the Wavelet Transform in Machine Learning>,极力推荐!!目 ...
最新文章
- CascadePSP 测试笔记
- 数据库中char与varchar类型的区别
- cogs 1456. [UVa 10881,Piotr's Ants]蚂蚁
- [Hadoop] - 自定义Mapreduce InputFormatOutputFormat
- 八中计算机是学啥的,北京八中:居然有这么好玩的课
- oracle数据库如何写翻页_oracle数据库如何写翻页
- 剑指Offer - 面试题36. 二叉搜索树与双向链表(中序循环/递归)
- 04-numpy-笔记-transpose
- 轨迹系列2——一种基于中值滤波的轨迹纠偏方法和几点思考
- 五月数据库技术通讯丨Oracle 12c因新特性引发异常Library Cache Lock等待
- 浅谈如何管理测试团队
- 动态调用Webservice 支持Soapheader身份验证(转)
- Javascript各种运算符第五课(小一节)
- 【卫朋】硬件创业:营销与开发同行
- Linux下oracle数据库备份导出
- wavread被删之后的替代audioread
- CTF线下赛AWD攻防准备
- 19.通证的分类(各种分类一览表)
- Android冷启动和热启动
- 【Aegisub相关】VSCode插件:Aegisub Helper的安装、功能介绍及使用方法