Page 103 -
P. 103
Chapter 2 ■ Edge-Detection Techniques 77
{
if (orig[row+1][col] - orig[row-1][col] < 0) return 1;
else return 0;
}
else if (buff->data[row][col] == 1 && buff->data[row][col-1] == 0 )
/* negative z-c */
{
if (orig[row][col+1] - orig[row][col-1] < 0) return 1;
else return 0;
}
else /* not a z-c */
return 0;
}
float compute_adaptive_gradient (IMAGE BLI_buffer, float **orig_buffer,
int row, int col)
{
register int i, j;
float sum_on, sum_off;
float avg_on, avg_off;
int num_on, num_off;
sum_on = sum_off = 0.0;
num_on = num_off = 0;
for (i= (-window_size/2); i<=(window_size/2); i++)
{
for (j=(-window_size/2); j<=(window_size/2); j++)
{
if (BLI_buffer->data[row+i][col+j])
{
sum_on += orig_buffer[row+i][col+j];
num_on++;
}
else
{
sum_off += orig_buffer[row+i][col+j];
num_off++;
}
}
}
if (sum_off) avg_off = sum_off / num_off;
else avg_off = 0;
if (sum_on) avg_on = sum_on / num_on;
else avg_on = 0;
return (avg_off - avg_on);
}