Gabor滤波器及其在OpenCV中的使用

因为最近毕设要用到 Gabor 特征提取,所以来总结一下对 Gabor 滤波器的理解,以及在 OpenCV 中的应用。

1 对 Gabor 滤波器的理解

Fourier 变换是一种信号处理中的有力工具,可以将图像从空域转换到频域,并提取到空域上不易提取的特征。但是 Fourier 变换缺乏时间和位置的局部信息。

Gabor 变换是一种加窗短时 Fourier 变换(简单理解起来就是在特定时间窗内做 Fourier 变换),是短时 Fourier 变换中当窗函数取为高斯函数时的一种特殊情况。因此,Gabor 滤波器可以在频域不同尺度、不同方向上提取相关的特征。另外 Gabor 函数与人眼的生物作用相仿,所以经常用作纹理识别上,并取得了较好的效果。

在二维空间中,使用一个三角函数(如正弦函数)与一个高斯函数叠加,我们就得到了一个 Gabor 滤波器。如下图所示:

感觉这个图画的好生动啊!一下子就看懂了

2 Gabor 函数以及参数含义

二维 Gabor 函数的数学表达如下(OpenCV 里好像只用到了实数部分):

复数表达

实数部分

虚数部分

其中


下面介绍公式中各个参数的含义:

波长 (λ):表示 Gabor 核函数中余弦函数的波长参数。它的值以像素为单位指定,通常大于等于2,但不能大于输入图像尺寸的五分之一。

方向 (θ):表示 Gabor 滤波核中平行条带的方向。有效值为从0到360度的实数。

相位偏移 (φ):表示 Gabor 核函数中余弦函数的相位参数。它的取值范围为-180度到180度。其中,0度和180度对应的方程与原点对称,-90度和90度的方程分别于原点成中心对称。

长宽比 (γ):空间纵横比,决定了 Gabor 函数形状的椭圆率。当 γ=1 时,形状是圆的;当 γ<1 时,形状随着平行条纹方向而拉长。通常该值为0.5。

带宽 (b):Gabor 滤波器的半响应空间频率带宽 b 和 σ/ λ 的比率有关,其中 σ 表示 Gabor 函数的高斯因子的标准差。三者的关系如下:

σ 的值不能直接设置,它仅随着带宽 b 变化。带宽值必须是正实数,通常为1,此时,标准差和波长的关系为 σ=0.56λ。带宽越小,标准差越大,Gabor 形状越大,可见平行条纹数量越多。

3 在 OpenCV 中使用 Gabor 滤波

我在网上看到好多 OpenCV 的代码实现的 Gabor 函数,但是其实可以利用 OpenCV 的库函数,实现起来非常简单,只要几行代码。

主要的函数有以下两个:

CV_EXPORTS_W Mat getGaborKernel( Size ksize, double sigma, double theta, 
    double lambd, double gamma, double psi = CV_PI*0.5, int ktype = CV_64F );

CV_EXPORTS_W void filter2D( InputArray src, OutputArray dst, int ddepth,
    InputArray kernel, Point anchor = Point(-1,-1), double delta = 0, 
    int borderType = BORDER_DEFAULT );

(哈哈哈,学会插入代码了!爱上了 Markdown 编辑器)

getGaborKernel 函数生成了一个 Gabor 滤波的核,也就是相当于一个模板。参数参见上面的说明。

filter2D 函数实现卷积运算。其中参数 ddepth 表示目标图像深度,ddepth=-1 表示生成与原图像深度相同的图像。

4 效果展示

我用了一张视频截图来做的滤波,识别文字的效果还是蛮好的。

原图

滤波后的图片

撒老师的表情非常适合做滤波,2333


参考:
https://blog.csdn.net/jolly12191/article/details/46428107
https://blog.csdn.net/xue_wenyuan/article/details/51533953
https://blog.csdn.net/jinshengtao/article/details/17797641
https://www.cnblogs.com/sdlypyzq/p/4378309.html

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Gabor函数是一个用于边缘提取的线性滤波器,十分适合纹理表达和分离,其频率和方向表达同人类视觉系统类似。另外从生...
    sunsimple阅读 8,347评论 0 0
  • 一、傅立叶变换的由来 关于傅立叶变换,无论是书本还是在网上可以很容易找到关于傅立叶变换的描述,但是大都是些故弄玄虚...
    constant007阅读 10,013评论 1 10
  • 这些年计算机视觉识别和搜索这个领域非常热闹,后期出现了很多的创业公司,大公司也在这方面也花了很多力气在做。做视觉搜...
    方弟阅读 11,609评论 6 24
  • 通常,大家在刚刚接触水晶的时候,会用水晶的品种来定义水晶的作用。 依据颜色来划分,有白水晶、粉水晶、紫水晶等;依据...
    盖亚的礼物阅读 11,362评论 1 8

友情链接更多精彩内容