Reputation: 3
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: https://i.sstatic.net/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!
Upvotes: 0
Views: 1303
Reputation: 19496
I don't know C so I'm not able to comment on your code, but:
I would also tweak your parameters so they aren't unitary. Plot your filter and see if it looks like what you get when you search for 'Gabor wavelet' on Google.
Upvotes: 0