C中的Gabor滤波器卷积矩阵

时间:2014-03-28 14:27:51

标签: c image matrix filter convolution

我试图在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 - 我有什么需要解决的吗?

提前致谢!

1 个答案:

答案 0 :(得分:0)

我不知道C所以我无法对您的代码发表评论,但是:

  1. 根据定义,gabor滤波器应具有实部和虚部 - 即复数值。
  2. 你的内核看起来不像gabor内核。它应该看起来像一个正弦曲线乘以高斯 - 你的看起来像一个高斯中心在左上角。无需规范化。
  3. 我还会调整你的参数,使它们不是单一的。绘制您的过滤器,看看它是否与您在Google上搜索“Gabor wavelet”时的效果相同。