Rules | Recent posts | topic RSS | Search | Register  | Log in

code for Gabor filter

 
Post new topic  Reply to topic    EDAboard.com Forum Index -> Digital Signal Processing
Author Message
Truclam



Joined: 11 Nov 2005
Posts: 16


Post20 Nov 2005 12:04   code for Gabor filter

Hi all,
I implement Gabor filter in my c++ function (put it in Visual c++) . when I compiled it there was no error but when I clicked on a button for excution this function there was a failure report. I can't find out the mistake so I hope someone help me.

Here's my code :
// "image" is in Intel image format (I used Opencv)
// image is gray image
void Tien_xu_ly::Gabor(IplImage *image)
{
#define R 300 // number of row
#define C 256 // number of colum
double imag[R][C];
double gabor[R][C];
double gx[R][C],gy[R][C];
double Vx[R][C],Vy[R][C];
double thetaQ[R][C];
int r,c,u,v,x,y,i,j;
int stdev=4;
double temple,x_theta,y_theta;
double treten;

/* CONVERT IMAGE TO ARRAY*/
for(i=0; i<image->height; i++)
{
for(j=0;j<image->width;j++)
{
imag[i][j]=(unsigned char)(image->imageData + image->
widthStep * i) [j] ;
}
}

/* LOCAL ORIENTATION ESTIMATION */
for(r=0;r<R;r++)
{
for(c=0;c<C;c++)
{
// gradients gx and gy (sobel)
gx[r][c]=(imag[r-1][c-1]*1)+(imag[r-1][c]*0)+(imag[r-1][c+1]*-1)+(imag[r][c-1]*2)+(imag[r][c]*0)+(imag[r][c+1]*-2)+(imag[r+1][c-1]*1)+(imag[r+1][c]*0)+(imag[r+1][c+1]*-1);

gy[r][c]=(imag[r-1][c-1]*1)+(imag[r-1][c]*2)+(imag[r-1][c+1]*1)+(imag[r][c-1]*0)+(imag[r][c]*0)+(imag[r][c+1]*0)+(imag[r+1][c-1]*-1)+(imag[r+1][c]*-2)+(imag[r+1][c+1]*-1);


Vx[r][c]=0;
Vy[r][c]=0;
for(u=r-5;u<=r+5;u++) //10x10 window
{
for(v=c-5;v<=c+5;v++)
{

Vx[r][c]=Vx[r][c]+(2*(gx[u][v])*(gy[u][v]));

Vy[r][c]=Vy[r][c]+((gx[u][v]*gx[u][v])*(gy[u][v]*gy[u][v]));
}
}


if(Vx[r][c]==0)
{
thetaQ[r][c]=90;
}
else
{
thetaQ[r][c]=(0.5*(atan(Vy[r][c])/(Vx[r][c])));
}
}
}

/* RIDGE FREQUENCY ESTIMATION */
//assume the average inter ridge distance to be 3, so 1/3 = 0.33 = f

/* 2D GABOR FILTERING IN SPATIAL SPACE */
for(x=0;x<R;x++)
{
for(y=0;y<C;y++)
{
x_theta=(x*cos(thetaQ[x][y]))+(y*sin(thetaQ[x][y]));
y_theta=-(x*sin(thetaQ[x][y]))+(y*cos(thetaQ[x][y]));

//stdev=4
temple=(-1.0/2.0)*(((x_theta*x_theta)/(16))+((y_theta*y_theta)/(16)));

//Gabor in the spatial domain
gabor[x][y]=exp(temple)*cos(2*3.14*0.33*x_theta);
}
}

//spatially convolve image with the filter to get the enhanced image

for(x=0;x<R;x++)
{
for(y=0;y<C;y++)
{
treten=0;
for(i=x-5;i<x+6;i++)
{
for(j=y-5;j<y+6;j++)
{

treten+=(gabor[i][j]*imag[i][j]);

}
}

(image->imageData + image->widthStep * y) [x]=treten;


}
}
}
Back to top
jackyhung12345



Joined: 10 May 2008
Posts: 1


Post10 May 2008 11:05   code for Gabor filter

In those code below, I find one error : out range of the array image in the sobel loop. That is the loop
for(r=0;r<R;r++)
{
for(c=0;c<C;c++)
{
// gradients gx and gy (sobel)
gx[r][c]=(imag[r-1][c-1]*1)+(imag[r-1][c]*0)+(imag[r-1][c+1]*-1)+(imag[r][c-1]*2)+(imag[r][c]*0)+(imag[r][c+1]*-2)+(imag[r+1][c-1]*1)+(imag[r+1][c]*0)+(imag[r+1][c+1]*-1);

gy[r][c]=(imag[r-1][c-1]*1)+(imag[r-1][c]*2)+(imag[r-1][c+1]*1)+(imag[r][c-1]*0)+(imag[r][c]*0)+(imag[r][c+1]*0)+(imag[r+1][c-1]*-1)+(imag[r+1][c]*-2)+(imag[r+1][c+1]*-1);

when r = 0 then image[-1][] not valid.
or when c = 0 then image [][-1] not valid;

did you finish your project ?
I am doing a project which is involved in gabor filter. And i use OpenCV to code.
Can you send me this completed codes ?
My mail : jackyhung12345(at)yahoo.com.
Waiting for your mail.
thanks very much.
Back to top
Post new topic  Reply to topic    EDAboard.com Forum Index -> Digital Signal Processing
Page 1 of 1 All times are GMT + 2 Hours


Abuse
Administrator
Moderators
topic RSS 
sitemap