【问题标题】:Gabor filter convolution matrix in CC中的Gabor滤波器卷积矩阵
【发布时间】:2023-03-16 10:31:01
【问题描述】:

我正在尝试用 C 语言编写一个算法,计算要应用于图像的 gabor 滤波器的卷积矩阵。现在,我只需要卷积矩阵。

所以,我正在使用这个等式: http://i.stack.imgur.com/APMC7.png

我将它映射到这段代码:

#include <stdio.h>
#include <math.h>
#define PI 3.14159265

int main(){
    int kernelSize = 5;
    float kernel[kernelSize][kernelSize];
    int x, y;
    //gamma = aspect ratio
    //lambda = wavelength
    //theta = orientation
    float xz, yz, theta, sigma, gamma, lambda;
    theta = 0;
    sigma = 1;
    lambda = 1;
    gamma = 1;

    for(x = 0; x < kernelSize; x++){
        for(y = 0; y < kernelSize; y++){
            xz = x * cos(theta) + y * sin(theta);
            yz = -x * sin(theta) + y * cos(theta);
            kernel[x][y] = exp(-(xz*xz + gamma*gamma*yz*yz)/(2*sigma*sigma)) * cos(2*PI*xz/lambda);
        }
    }
    for(x = 0; x < kernelSize; x++){
        for(y = 0; y < kernelSize; y++){
            printf("%.2f ", kernel[x][y]);
        }
        printf("\n)");
    }
    return(0);

}

带有这些参数的输出是:

1.00 0.61 0.14 0.01 0.00
0.61 0.37 0.08 0.01 0.00 
0.14 0.08 0.02 0.00 0.00 
0.01 0.01 0.00 0.00 0.00 
0.00 0.00 0.00 0.00 0.00

我的问题是: 1 - 它是 gabor 滤波器的有效卷积矩阵吗?如果我将它与图像进行卷积,它会应用 gabor 过滤器吗? 2 - 我应该对所有矩阵值求和并对其进行归一化吗? 3 - 有什么我应该修复的吗?

提前致谢!

【问题讨论】:

    标签: c image matrix filter convolution


    【解决方案1】:

    我不懂 C,所以无法评论您的代码,但是:

    1. 根据定义,gabor 滤波器应具有实部和虚部 - 即复值。
    2. 您的内核看起来一点也不像 gabor 内核。它应该看起来像一个正弦曲线乘以一个高斯曲线——你的看起来像一个以左上角为中心的高斯曲线。无需对其进行规范化。

    我还会调整您的参数,使它们不是单一的。绘制您的过滤器,看看它是否与您在 Google 上搜索“Gabor wavelet”时得到的相同。

    【讨论】:

    • 是的,你是对的!自从我很久以前问过这个问题以来,我已经纠正了我的(许多)错误。谢谢!
    猜你喜欢
    • 1970-01-01
    • 2019-08-30
    • 1970-01-01
    • 2016-12-06
    • 1970-01-01
    • 1970-01-01
    • 2019-11-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多