1,105,534 Community Members

Gabor filter implementation

Member Avatar
metal_man
Newbie Poster
1 post since Jun 2011
Reputation Points: 0 [?]
Q&As Helped to Solve: 0 [?]
Skill Endorsements: 0 [?]
 
0
 

Hi to all. It's my first post here. I want to ask about 2D Gabor filter implementation. I have some code but it is not working. So let me present my work first:

signed int sumX, sumY;
    long int SUM = 0;
    int I = 0, J = 0;
    double theta = 0;

    unsigned char *pixels;
    unsigned char *myEdgeDetectedImage;
    float *thetaArray;
    float *gaborArray;
    signed char *imageAfterGabor;

    // Memory allocation
    pixels = malloc(width * height);
    myEdgeDetectedImage = malloc(width * height);
    thetaArray = malloc(sizeof(float *) * width * height);
    gaborArray = malloc(sizeof(float *) * width * height);
    imageAfterGabor = malloc(width * height);

    /*
    
    (...) some code
    
    */


    /*-----------------------------------
            Sobel Mask Algorithm
    -----------------------------------*/
    for(row=1; row<height-1; row++) {
        for(col=1; col<width-1; col++) {
            sumX = 0;
            sumY = 0;
            SUM = 0;
            
            for(I=-1; I<=1; I++) {
                for(J=-1; J<=1; J++) {
                    // Couting gradients
                    sumX = sumX + pixels[(row+I)*width + (col+J)]*Gx[I+1][J+1];
                    sumY = sumY + pixels[(row+I)*width + (col+J)]*Gy[I+1][J+1];
                }
            }

            theta=0;
            theta = atan2((double)sumY, (double)sumX);
            
            // Making an array of counted arrays
            // that i will use later
            thetaArray[row*width + col] = theta;
        }
    }
    
    /*-----------------------------------
                Gabor Filter
     -----------------------------------*/
    for(row=0; row<height; row++) {
        for(col=0; col<width; col++) {
            x_theta = row*sin(thetaArray[row*width + col]) + col*cos(thetaArray[row*width + col]);
            y_theta = col*sin(thetaArray[row*width + col]) - row*cos(thetaArray[row*width + col]);
            
            exp_temp = -0.5*(((x_theta*x_theta)/((double)sigmaX*(double)sigmaX)) + ((y_theta*y_theta)/((double)sigmaY*(double)sigmaY)));
            
            gaborArray[row*width + col] = exp(exp_temp) * cos(2.0*M_PI*(1/ridgeFrequency)*x_theta);
        }
    }
    
    /*-----------------------------------
                Convolution
     -----------------------------------*/
    for(row=2; row<height-2; row++) {
        for(col=2; col<width-2; col++) {
            gaborTemp = 0;
            for (I=-2; I<=2; I++) {
                for (J=-2; J<=2; J++) {
                    gaborTemp += pixels[(row+I) + (col+J)*width] * gaborArray[(row+I) + (col+J)*width];
                }
            }
            imageAfterGabor[row*width + col] = gaborTemp;
        }
    }

So i have this code but it doesn't work. Some strange values are coming after calculations. Values stored in gaborArray looks strange:

gabor=0.882496902584595455110161310586
gabor=0.754839601989007347171423134569
gabor=0.606530659712633424263117376540
gabor=0.457833361771614266721996955312
gabor=0.324652467358349738901779346634
gabor=0.216265166829887306443325201144
gabor=0.135335283236612702317813727859
gabor=0.079559508718227686663304609738
gabor=0.043936933623407420368423004220
gabor=0.022794180883612343707644853907

This values are only samples. As you can see all values are decreasing, but what is worst - the are goning to 0. This numbers should be point values of gray-scale image. I don't know where is error so please someone to help. Any hint is appreciated :)

Member Avatar
pyTony
pyMod
6,104 posts since Apr 2010
Reputation Points: 818 [?]
Q&As Helped to Solve: 1,056 [?]
Skill Endorsements: 42 [?]
Moderator
Featured
 
0
 

Leave the code which you have tested to be working and restart from there testing additions to program properly. Refactor code to functions.

You
This article has been dead for over three months: Start a new discussion instead
Post:
Start New Discussion
View similar articles that have also been tagged: