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);
                                 }
   98   99   100   101   102   103   104   105   106   107   108