Page 91 -
P. 91
Chapter 2 ■ Edge-Detection Techniques 65
/* TRACE - recursively trace edge pixels that have a
threshold > the low edge threshold, continuing
from the pixel at (i,j). */
int trace (int i, int j, int low, IMAGE im,IMAGE mag, IMAGE ori)
{
int n,m;
char flag = 0;
if (im->data[i][j] == 0)
{
im->data[i][j] = 255;
flag=0;
for (n= -1; n<=1; n++)
{
for(m= -1; m<=1; m++)
{
if (i==0 && m==0) continue;
if (range(mag, i+n, j+m) && mag->data[i+n][j+m] >= low)
if (trace(i+n, j+m, low, im, mag, ori))
{
flag=1;
break;
}
}
if (flag) break;
}
return(1);
}
return(0);
}
void seperable_convolution (IMAGE im, float *gau, int width,
float **smx, float **smy)
{
int i,j,k, I1, I2, nr, nc;
float x, y;
nr = im->info->nr;
nc = im->info->nc;
for (i=0; i<nr; i++)
for (j=0; j<nc; j++)
{
x = gau[0] * im->data[i][j]; y = gau[0] * im->data[i][j];
for (k=1; k<width; k++)
{
I1 = (i+k)%nr; I2 = (i-k+nr)%nr;
y += gau[k]*im->data[I1][j] + gau[k]*im->data[I2][j];
I1 = (j+k)%nc; I2 = (j-k+nc)%nc;