Page 93 -
P. 93

Chapter 2 ■ Edge-Detection Techniques    67



                                 /* Follow the gradient direction, as indicated by the direction of
                                    the vector (xc, yc); retain pixels that are a local maximum. */

                                            if (fabs(yc) > fabs(xc))
                                            {

                                 /* The Y component is biggest, so gradient direction is
                                              basically UP/DOWN */
                                              xx = fabs(xc)/fabs(yc);
                                              yy = 1.0;

                                              g2 = norm (dx[i-1][j], dy[i-1][j]);
                                              g4 = norm (dx[i+1][j], dy[i+1][j]);
                                              if (xc*yc > 0.0)
                                              {
                                               g3 = norm (dx[i+1][j+1], dy[i+1][j+1]);
                                               g1 = norm (dx[i-1][j-1], dy[i-1][j-1]);
                                              } else
                                              {
                                               g3 = norm (dx[i+1][j-1], dy[i+1][j-1]);
                                               g1 = norm (dx[i-1][j+1], dy[i-1][j+1]);
                                              }

                                            } else
                                            {

                                 /* The X component is biggest, so gradient direction is
                                              basically LEFT/RIGHT */
                                              xx = fabs(yc)/fabs(xc);
                                              yy = 1.0;

                                              g2 = norm (dx[i][j+1], dy[i][j+1]);
                                              g4 = norm (dx[i][j-1], dy[i][j-1]);
                                              if (xc*yc > 0.0)
                                              {
                                               g3 = norm (dx[i-1][j-1], dy[i-1][j-1]);
                                               g1 = norm (dx[i+1][j+1], dy[i+1][j+1]);
                                              }
                                              else
                                              {
                                               g1 = norm (dx[i-1][j+1], dy[i-1][j+1]);
                                               g3 = norm (dx[i+1][j-1], dy[i+1][j-1]);
                                              }
                                            }

                                 /* Compute the interpolated value of the gradient magnitude */
                                            if ( (g > (xx*g1 + (yy-xx)*g2)) &&
                                                (g > (xx*g3 + (yy-xx)*g4)) )
   88   89   90   91   92   93   94   95   96   97   98