I'm trying to write an algorithm in C that computes a convolution matrix of a gabor filter to be applied to an image. Right now, I just need the convolution matrix.
So, I'm using this equation:
http://i.stack.imgur.com/APMC7.png
I mapped it to this little piece of code:
#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);
}
The output with these parameters are:
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
My questions are:
1 - is it a valid convolution matrix for a gabor filter? If I convolute it with an image, will it apply the gabor filter?
2 - Should I sum all matrix values and normalize it?
3 - Is there anything I should fix in it?
Thanks in advance!