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

相关文章

C++统计函数执行时间的最佳实践

《C++统计函数执行时间的最佳实践》在软件开发过程中,性能分析是优化程序的重要环节,了解函数的执行时间分布对于识别性能瓶颈至关重要,本文将分享一个C++函数执行时间统计工具,希望对大家有所帮助... 目录前言工具特性核心设计1. 数据结构设计2. 单例模式管理器3. RAII自动计时使用方法基本用法高级用法

GO语言中函数命名返回值的使用

《GO语言中函数命名返回值的使用》在Go语言中,函数可以为其返回值指定名称,这被称为命名返回值或命名返回参数,这种特性可以使代码更清晰,特别是在返回多个值时,感兴趣的可以了解一下... 目录基本语法函数命名返回特点代码示例命名特点基本语法func functionName(parameters) (nam

Python Counter 函数使用案例

《PythonCounter函数使用案例》Counter是collections模块中的一个类,专门用于对可迭代对象中的元素进行计数,接下来通过本文给大家介绍PythonCounter函数使用案例... 目录一、Counter函数概述二、基本使用案例(一)列表元素计数(二)字符串字符计数(三)元组计数三、C

Unity新手入门学习殿堂级知识详细讲解(图文)

《Unity新手入门学习殿堂级知识详细讲解(图文)》Unity是一款跨平台游戏引擎,支持2D/3D及VR/AR开发,核心功能模块包括图形、音频、物理等,通过可视化编辑器与脚本扩展实现开发,项目结构含A... 目录入门概述什么是 UnityUnity引擎基础认知编辑器核心操作Unity 编辑器项目模式分类工程

Python中的filter() 函数的工作原理及应用技巧

《Python中的filter()函数的工作原理及应用技巧》Python的filter()函数用于筛选序列元素,返回迭代器,适合函数式编程,相比列表推导式,内存更优,尤其适用于大数据集,结合lamb... 目录前言一、基本概念基本语法二、使用方式1. 使用 lambda 函数2. 使用普通函数3. 使用 N

MySQL中REPLACE函数与语句举例详解

《MySQL中REPLACE函数与语句举例详解》在MySQL中REPLACE函数是一个用于处理字符串的强大工具,它的主要功能是替换字符串中的某些子字符串,:本文主要介绍MySQL中REPLACE函... 目录一、REPLACE()函数语法:参数说明:功能说明:示例:二、REPLACE INTO语句语法:参数

python中update()函数的用法和一些例子

《python中update()函数的用法和一些例子》update()方法是字典对象的方法,用于将一个字典中的键值对更新到另一个字典中,:本文主要介绍python中update()函数的用法和一些... 目录前言用法注意事项示例示例 1: 使用另一个字典来更新示例 2: 使用可迭代对象来更新示例 3: 使用

Python学习笔记之getattr和hasattr用法示例详解

《Python学习笔记之getattr和hasattr用法示例详解》在Python中,hasattr()、getattr()和setattr()是一组内置函数,用于对对象的属性进行操作和查询,这篇文章... 目录1.getattr用法详解1.1 基本作用1.2 示例1.3 原理2.hasattr用法详解2.

Python lambda函数(匿名函数)、参数类型与递归全解析

《Pythonlambda函数(匿名函数)、参数类型与递归全解析》本文详解Python中lambda匿名函数、灵活参数类型和递归函数三大进阶特性,分别介绍其定义、应用场景及注意事项,助力编写简洁高效... 目录一、lambda 匿名函数:简洁的单行函数1. lambda 的定义与基本用法2. lambda

Python 函数详解:从基础语法到高级使用技巧

《Python函数详解:从基础语法到高级使用技巧》本文基于实例代码,全面讲解Python函数的定义、参数传递、变量作用域及类型标注等知识点,帮助初学者快速掌握函数的使用技巧,感兴趣的朋友跟随小编一起... 目录一、函数的基本概念与作用二、函数的定义与调用1. 无参函数2. 带参函数3. 带返回值的函数4.