现在的位置: 首页 > 综合 > 正文

Gabor 变换 Gabor函数

2013年10月16日 ⁄ 综合 ⁄ 共 2517字 ⁄ 字号 评论关闭
文章目录

原文转载于:http://blog.sina.com.cn/s/blog_48a242d601000a3j.html

 

Gabor变换属于加窗傅立叶变换,Gabor函数可以在频域不同尺度、不同方向上提取相关的特征。另外Gabor函数与人眼的生物作用相仿,所以经常用作纹理识别上,并取得了较好的效果。

Gabor变换是短时Fourier变换中当窗函数取为高斯函数时的一种特殊情况.

Gabor变换的本质实际上还是对二维图像求卷积。因此二维卷积运算的效率就直接决定了Gabor变换的效率。在这里我先说说二维卷积运算以及如何通过二维傅立叶变换提高卷积运算效率.关于离散二维叠加和卷积的运算介绍的书籍比较多,我这里推荐William K. Pratt著,邓鲁华 张延恒等译的《数字图像处理(第3版)》,其中第7章介绍的就是这方面的运算.

Gabor <wbr>变换(1)

A可以理解成是待处理的笔迹纹理,B可以理解成Gabor变换的核函数,现在要求A与B的离散二维叠加卷积,我们首先对A的右边界和下边界填充0(zero padding),然后将B进行水平翻转和垂直翻转,如下图:

Gabor <wbr>变换(1)

然后用B中的每个值依次乘以A中相对位置处的值并进行累加,结果填入相应位置处(注意红圈位置)。通常二维卷积的结果比A、B的尺寸要大。如下图所示:

Gabor <wbr>变换(1)

2、快速傅立叶变换卷积

根据傅立叶变换理论,对图像进行二维卷积等价于对图像的二维傅立叶变换以及核函数的二维傅立叶变换在频域求乘法。通过二维傅立叶变换可以有效提高卷积的运算效率。但在进行傅立叶变换时一定要注意“卷绕误差效应”,只有正确对原有图像以及卷积核填补零后,才能得到正确的卷积结果。

二维Gabor函数可以表示为:

 

Gabor <wbr>变换(1)

 

其中:

 

Gabor <wbr>变换(1)

 

v的取值决定了Gabor滤波的波长,u的取值表示Gabor核函数的方向,K表示总的方向数。参数Gabor <wbr>变换(1)决定了高斯窗口的大小,这里取Gabor <wbr>变换(1).
程序中取4个频率(v=0, 1, ..., 3),8个方向(即K=8,u=0, 1, ... ,7),共32个Gabor核函数。不同频率不同方向的Gabor函数可通过下图表示:

Gabor <wbr>变换(1)

 

Gabor <wbr>变换(1)Gabor <wbr>变换(1)

 

 

Gabor <wbr>变换(1)

 

 

 

所谓目标识别,从某种意义上说就是特征识别的问题。而红外图特征提取的角度一般可以从几何形状和上下文的判断中得到,比如说,当你在一幅图像中去搜索桥梁和机场的跑道的时候,我们可以从形状上发现他们都是一组平行线;然后基于上下文去判断,桥梁的长度肯定比跑道短,桥梁的两边一般是水域,而跑道的中间有一些联络道,而这些这些联络道本身也是平行线。

通常用这种仅仅利用图像本身的知识去判断的时候,时常由于经验的限制,识别率总是没有办法做到很好!虽然图像所一些早期的论文里都声称,识别率能够达到90%以上,但是那只是用自己搜集的有利于自己算法的图片得出来的结果而已!

言规正传,由于种种努力,我们发现了频率的概念,频率的本质就是反映变化快慢的物理量。因此当我们把一幅图像f(x,y)通过傅立叶变换变成F(u,v)进入频率域的时候,w=sqrt(u2+v2) 的大小,则直接体现了原图像中灰度值变化速率的大小。于是人们发现了滤波的方法,如通过低通滤波器将图像中的噪声去掉,同时把一些突变的地方变得平滑,而高通滤波器则可以把图像的边缘特征加以锐化。

但是很快大家就发现了傅立叶变换的一个缺陷,傅立叶变换在很大程度上只是一个体现大局观的概念,而无法反映图像局部的特点,因此我们无法通过傅立叶变换来对图像进行细节上更准确的操作。幸运的是,人们之后的研究中,发现了Gabor于1946年发表的论文《the Theory of Communication》,于是在识别的方法上,尤其在纹理识别上达到了一个新的高度。当然小波变换的应用也是差不多这个时间段开始的,由此我们也可以理解数学在图像领域的价值!

Gabor滤波的本质是提取图像的特征分量,通常应用的领域有指纹识别,虹膜识别,人脸识别等。

所谓gabor的价值由来是由于人们对傅立叶频率分析的需求来的,因此,当我们去使用gabor滤波器的时候,就一定要结合对图象频率的分析。这一点表面上简单而直接,实际却被大部分的研究者忽略。关于这部分的研究,可以在各大搜索引擎上检索关键:"fourier
power spectrum"。如果使用matlab,可以使用下面的语句将图象转换到频率域:

function fps(I) g=log(abs(fftshift(fft2(double(I)))));
%通过一定的技巧我们也可以将频率精度扩大

imview(g,[]); % 注意不能用imshow;

传统的gabor滤波器的思想,就是把图象不同的频率范围分别滤出来,然后提取滤波图象的特征分量加以分类。而一些对gabor滤波器的设计正是从这个角度来考虑。至于相邻的滤波器在频率区域的有效部分是相切还是重叠,则一直是争论的话题。甚至有些人因此从gabor小波的角度去设计。

关于gabor滤波器的参数本身有4个(wf:center
frequency theta:angle sigmax,sigmay:extend of
gaussian function),90年代的时候,很多文献将sigmax=sigmay,于是参数变成3个;本世纪的时候,人们由于我在上面一段阐述的道理,将sigma与wf组成反比关系。参数又变成2个。这就是现在通用的关于尺度和角度的设计。

在这里我仍然不想去针对特定的纹理,比如指纹,虹膜,文字之类的具体实现来讲更多的东西;因为那实在是已经成熟的技术。只要你慢慢照着做,就一定能达到一定程度的成功率。我想说的是一些更有趣的东西,这就是频率域本身的矛盾性;即大部分信息包含在低频部分,但低频部分的范围却很小,难以区分,因此我们其实浪费了最大量的信息。关于角度的信息,我们只要侦察到特定的角度就一定可以从相当广的频率范围下找到;但是尺度信息的话,我们只能徘徊在一个很小的区间。并且有趣的是这里很多现象象极了物理上的衍射现象。而我们一旦想深入到低频部分的话,对滤波器的设计简直就是苛刻。滤波器的鲁棒性在这里没有价值,我们需要象狐狸一样敏感。但是我相信,如果能够解决这一问题,那么我们甚至可以摈弃纹理识别的概念,而是可以说对图象识别的成功率将到达一个新的高度。

 

【上篇】
【下篇】

抱歉!评论已关闭.