我试图在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 - 我有什么需要解决的吗?
提前致谢!
答案 0 :(得分:0)
我不知道C所以我无法对您的代码发表评论,但是:
我还会调整你的参数,使它们不是单一的。绘制您的过滤器,看看它是否与您在Google上搜索“Gabor wavelet”时的效果相同。