Continue to Site

Welcome to EDAboard.com

Welcome to our site! EDAboard.com is an international Electronics Discussion Forum focused on EDA software, circuits, schematics, books, theory, papers, asic, pld, 8051, DSP, Network, RF, Analog Design, PCB, Service Manuals... and a whole lot more! To participate you need to register. Registration is free. Click here to register now.

code for Gabor filter

Status
Not open for further replies.

Truclam

Junior Member level 1
Joined
Nov 11, 2005
Messages
16
Helped
0
Reputation
0
Reaction score
0
Trophy points
1,281
Activity points
1,489
gabor filter code

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[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[v])*(gy[v]));

Vy[r][c]=Vy[r][c]+((gx[v]*gx[v])*(gy[v]*gy[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[j]*imag[j]);

}
}

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


}
}
}
 

gabor filter opencv

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@yahoo.com.
Waiting for your mail.
thanks very much.
 

Status
Not open for further replies.

Similar threads

Part and Inventory Search

Welcome to EDABoard.com

Sponsor

Back
Top