gabor函数学习

2023-10-21 20:48
文章标签 函数 学习 gabor

本文主要是介绍gabor函数学习,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

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

 

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

 

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

[转载]Gabor <wbr><wbr>变换(1)

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

[转载]Gabor <wbr><wbr>变换(1)

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

[转载]Gabor <wbr><wbr>变换(1)

2、快速傅立叶变换卷积

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

 

二维Gabor函数可以表示为:


 

[转载]Gabor <wbr><wbr>变换(1)


其中:


 

[转载]Gabor <wbr><wbr>变换(1)


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

[转载]Gabor <wbr><wbr>变换(1)


[转载]Gabor <wbr><wbr>变换(1)[转载]Gabor <wbr><wbr>变换(1)




对于Gabor基函数的描述各不相同。比如在我参考的文献中Gabor基函数的表述是:
                  

Gabor函数的再次理解 - 毽子 - 毽子不会落的博客

 而对于另一种表述,则是出现在我转载的上篇日志当中:gabor函数学习


  这两种表述不同,是因为这两种Gabor基函数都不是一般性的表述,都是经过了一些约束条件处理后的情况进行的表述,

像第二种表述是在其高斯包络为圆对称时的情况,由于圆对称,标准差 σ的值对于x,y来说是相等的;X包络和Y包络合并后,x,y的转向后的坐标x',y'的平方和也可以变成x,y的平方和(因为高斯包络的圆对称),于是便有了第二种表述形式。

而第一种表述形式的演化,大家有兴趣的可以参见文献《Uncertainty relation for resolution in space,spatialfrequency,and orientation optimized by two-dimensional visual cortical ?lters》,和《Biologically motivated computationally intensive approaches to image pattern recognition》。

网上大蛮多的代码是参照第二种表述来的,有需要的朋友,也可以找我要。

由于本人的个人需要,将对第一个Gabor函数作一些分析。。。。。。。

有人把Gabor函数看作加窗的傅立叶变换,有人把Gabor函数看作小波变换的变体,但无论如何,在一维情况中,Gabor变换代表着时频分析的最优方法,二维情况中则是空间频域分析的方法。Gabor变换在二维情况中可用于图像的纹理分析,纹理的特征参量有频率和方向,所以作为此用途的Gabor滤波也应有方向及中心频率的参量,以提取不同的纹理特性。


 


        gabor函数学习


 

   发现最后的平面波调制分量中的不同,第一个表述中是(x')的平方,而上述表述中是x',怀疑是作者的笔误。

下面就以上面这个Gabor函数为题进行其参数的讨论。

   不用多说:由于Gabor滤波器的方向性,x',y'是旋转之后的坐标,而 Θ 角便是Gabor滤波器的方向,
 ξ和η则是滤波器的中心位置,在求Gabor核的时候都会默认为原点位置,即(0,0);1/λ是Gabor的中心频率,
而φ是Gabor的相位,除了上面的之外,表达式中还有σ,γ,这些在后面会论及,下面我们一个一个对Gabor的参数进行解析。1

1)首先是γ,γ是空间方面比(spatial aspect ratio),是Gabor核高斯函数的纵横比,它的范围在0.23~0.92,在本案中取0.5,由第一个Gabor函数表达式对比可以知道,在γ取1/2的时候,σx = σy/2 = σ,这便是γ的意义,由于γ是预定义好的参数,所以,在Gabor函数中并不是变量参数,所以不决定Gabor函数的性质。

2)参数λ,参数λ是COS调制因子的波长,1/λ是Gabor 滤波器的中心频率,而σ/λ则决定了Gabor滤波器的带宽,一般带宽我们取1个倍频左右,索性取1.0,此时可求出σ/λ的值是0.56,(此值的得出可参阅参考文献);

3)参数Θ是“平行亮暗条纹”(指Gabor图像?)的垂直方向,即x'的坐标方向。

4)γ的值和空间频率带宽的值(即σ/λ的值)又决定了Gabor滤波器方向带宽的值;

5)最后,φ是cos调制因子的相位偏移值,φ决定了Gabor函数的对称性,比如在φ=0,π的时候,Gabor函数是中心(对于(ξ,η)来说)对称的,而当 φ=-π/2,π/2的时候,Gabor函数是中心反对称的,并且所有其他情况都是这两种情况的(线性?)组合。

 

如此以来,我们需要确定的参数便是:λ,Θ,另外在约束之下的参数是γ,σ,和Gabor核的大小size(x,y),求Gabor核的时候,我们将中心位置(ξ,η)默认放在原点。

这篇关于gabor函数学习的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/256871

相关文章

Python函数返回多个值的多种方法小结

《Python函数返回多个值的多种方法小结》在Python中,函数通常用于封装一段代码,使其可以重复调用,有时,我们希望一个函数能够返回多个值,Python提供了几种不同的方法来实现这一点,需要的朋友... 目录一、使用元组(Tuple):二、使用列表(list)三、使用字典(Dictionary)四、 使

PyTorch中cdist和sum函数使用示例详解

《PyTorch中cdist和sum函数使用示例详解》torch.cdist是PyTorch中用于计算**两个张量之间的成对距离(pairwisedistance)**的函数,常用于点云处理、图神经网... 目录基本语法输出示例1. 简单的 2D 欧几里得距离2. 批量形式(3D Tensor)3. 使用不

MySQL 字符串截取函数及用法详解

《MySQL字符串截取函数及用法详解》在MySQL中,字符串截取是常见的操作,主要用于从字符串中提取特定部分,MySQL提供了多种函数来实现这一功能,包括LEFT()、RIGHT()、SUBST... 目录mysql 字符串截取函数详解RIGHT(str, length):从右侧截取指定长度的字符SUBST

重新对Java的类加载器的学习方式

《重新对Java的类加载器的学习方式》:本文主要介绍重新对Java的类加载器的学习方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、介绍1.1、简介1.2、符号引用和直接引用1、符号引用2、直接引用3、符号转直接的过程2、加载流程3、类加载的分类3.1、显示

Kotlin运算符重载函数及作用场景

《Kotlin运算符重载函数及作用场景》在Kotlin里,运算符重载函数允许为自定义类型重新定义现有的运算符(如+-…)行为,从而让自定义类型能像内置类型那样使用运算符,本文给大家介绍Kotlin运算... 目录基本语法作用场景类对象数据类型接口注意事项在 Kotlin 里,运算符重载函数允许为自定义类型重

Pandas中统计汇总可视化函数plot()的使用

《Pandas中统计汇总可视化函数plot()的使用》Pandas提供了许多强大的数据处理和分析功能,其中plot()函数就是其可视化功能的一个重要组成部分,本文主要介绍了Pandas中统计汇总可视化... 目录一、plot()函数简介二、plot()函数的基本用法三、plot()函数的参数详解四、使用pl

Java学习手册之Filter和Listener使用方法

《Java学习手册之Filter和Listener使用方法》:本文主要介绍Java学习手册之Filter和Listener使用方法的相关资料,Filter是一种拦截器,可以在请求到达Servl... 目录一、Filter(过滤器)1. Filter 的工作原理2. Filter 的配置与使用二、Listen

Python的time模块一些常用功能(各种与时间相关的函数)

《Python的time模块一些常用功能(各种与时间相关的函数)》Python的time模块提供了各种与时间相关的函数,包括获取当前时间、处理时间间隔、执行时间测量等,:本文主要介绍Python的... 目录1. 获取当前时间2. 时间格式化3. 延时执行4. 时间戳运算5. 计算代码执行时间6. 转换为指

Python正则表达式语法及re模块中的常用函数详解

《Python正则表达式语法及re模块中的常用函数详解》这篇文章主要给大家介绍了关于Python正则表达式语法及re模块中常用函数的相关资料,正则表达式是一种强大的字符串处理工具,可以用于匹配、切分、... 目录概念、作用和步骤语法re模块中的常用函数总结 概念、作用和步骤概念: 本身也是一个字符串,其中

shell编程之函数与数组的使用详解

《shell编程之函数与数组的使用详解》:本文主要介绍shell编程之函数与数组的使用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录shell函数函数的用法俩个数求和系统资源监控并报警函数函数变量的作用范围函数的参数递归函数shell数组获取数组的长度读取某下的