Gabor滤波器特征提取原理讲解及c++实现

文章目录

Gabor滤波器

1946年,Dennis Gabor于在”Theory of communication”一文中提出了著名的”窗口”傅里叶变换(也叫短时Fourier变换,STFT),即Gabor变换。
在图像处理邻域,Gabor小波是一种非常有效的纹理表示方法。
在空域,一个2维的Gabor滤波器是一个正弦平面波和高斯核函数的乘积:

Gabor滤波器特征提取原理讲解及c++实现
其中s(x, y)是一个复正弦信号,称为载波,Wr(x, y)是一个二维信号高斯型函数,称为包络线。

; 复正弦载波

复正弦函数的定义如下:

Gabor滤波器特征提取原理讲解及c++实现
式中(u0, v0), P分别定义正弦信号的空间频率和相位。可以把这个正弦函数想象成两个独立的实函数,分别表示为复函数的实部和虚部:
Gabor滤波器特征提取原理讲解及c++实现
可以直观的分别表示为:
Gabor滤波器特征提取原理讲解及c++实现
参数u0和v0定义了直角坐标系中正弦信号的空间频率。这个空间频率也可以用极坐标表示为幅度F0和方向ω0:
Gabor滤波器特征提取原理讲解及c++实现
则:
Gabor滤波器特征提取原理讲解及c++实现
用这种表示法,复正弦函数是:

Gabor滤波器特征提取原理讲解及c++实现

Gabor滤波器特征提取原理讲解及c++实现

一般地,复正弦函数表示为:`

Gabor滤波器特征提取原理讲解及c++实现

高斯滤波

二维高斯函数可以表示为:

Gabor滤波器特征提取原理讲解及c++实现

那么将复正弦函和高斯滤波相乘,gabor滤波器复数形式可表示为:

Gabor滤波器特征提取原理讲解及c++实现
下面更加直观地看一下这两者相乘的效果:
Gabor滤波器特征提取原理讲解及c++实现
(a) 2D正弦面,(b)高斯核,©相应的Gabor滤波器。

; 参数解释

以上公式中各个参数说明:

波长(λ):像素为单位,通常大于等于2.但不能大于输入图像尺寸的五分之一。

方向(θ):并行条纹的方向,它的取值为0到360度

相位偏移(φ):取值范围为-180度到180度。其中,0he180度分别对应中心对称函数,而-90度和90度对应反对称函数。

长宽比(γ):纵横比,决定了Gabor函数形状。当γ= 1时,形状是圆的。当γ< 1时,形状随着平行条纹方向而拉长。

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

Gabor滤波器特征提取原理讲解及c++实现

下面给出不同参数下,gabor核函数的对比图:大小512*512

Gabor滤波器特征提取原理讲解及c++实现
方向(θ)分别为:0,45,90度
Gabor滤波器特征提取原理讲解及c++实现
相位偏移(φ)分别为0,90,180度
Gabor滤波器特征提取原理讲解及c++实现

长宽比(γ)分别为:0.5,1,2

Gabor滤波器特征提取原理讲解及c++实现

带宽(b)分别为0.5,1,2

Gabor滤波器特征提取原理讲解及c++实现

gabor滤波核实现

cv::Mat getGaborKernel(int ks, double sig, double th, double lm, double ps)
{
    int hks = (ks-1)/2;
    double theta = th*CV_PI/180;
    double psi = ps*CV_PI/180;
    double del = 2.0/(ks-1);
    double lmbd = lm;
    double sigma = sig/ks;
    double x_theta;
    double y_theta;
    cv::Mat kernel(ks,ks, CV_32F);
    for (int y=-hks; yhks; y++)
    {
        for (int x=-hks; xhks; x++)
        {
            x_theta = x*del*cos(theta)+y*del*sin(theta);
            y_theta = -x*del*sin(theta)+y*del*cos(theta);
            kernel.at<float>(hks+y,hks+x) = (float)exp(-0.5*(pow(x_theta,2)+pow(y_theta,2))/pow(sigma,2))* cos(2*CV_PI*x_theta/lmbd + psi);
        }
    }
    return kernel;
}

效果:

Gabor滤波器特征提取原理讲解及c++实现

参考文献:
1、Gabor filter visualization
2、1-Petkov_Gabor_functions2011-Lecture notes
3、Texture features for browsing and retrieval of image data

Original: https://blog.csdn.net/weixin_44901043/article/details/123595172
Author: liu_jie_bin
Title: Gabor滤波器特征提取原理讲解及c++实现

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/641015/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球