Page 271 -
P. 271

Chapter 6 ■ Thinning   245



                                    return k;
                               }
                                                             *
                               / *  Holt’s staircase removal stuff /
                               void check (int v1, int v2, int v3)
                               {
                                    if (!v2 && (!v1 || (v3)) t00 = TRUE;
                                    if ( v2 && ( v1 || v3)) t11 = TRUE;
                                    if ( (!v1 && v2) || (!v2 && v3) )
                                    {
                                       t01s = t01;
                                       t01 = TRUE;
                                    }
                               }
                               int edge (IMAGE im, int r, int c)
                               {
                                    if (im->data[r] [c] == 0) return 0:
                                    t00 = t01 = t01s = t11 = FALSE;
                                *                   *
                               /  CHECK (vNW, vN, vNE)  /
                                    check (im->data[r-1] [c-1], im->data[r-1] [c], im
                                             ->data[r-1] [c+1]);

                               / *  CHECK (vNE, vE, vSE)  * /
                               check (im->data [r-1][c+1], im->data[r] [c+1],
                                              im->data[r+1] [c+1]);

                               / *  CHECK (vSE, vS, vSW)  * /
                                    check (im->data [r+1] [c+1], im->data [r+1] [c],
                                             im->data [r+1] [c-1]);

                               / *  CHECK (vSW, vW, vNW)  * /
                                    check (im->data [r+1] [c-1], im->data [r] [c-1],
                                             im->data [r-1] [c-1]);
                                    return t00 && t11 && !t01s;
                               }
                               void stair (IMAGE im, IMAGE tmp, int dir)
                               {
                                  int i, j;
                                  int N, S, E, W, NE, NW, SE, SW, C;

                                  if (dir == NORTH)
                                  for (i=1; i<im->info->nr-1; i++)
                                    for (j=1; j<im->info->nc-1; j++)
                                    {
                                    NW = im->data[i-1] [j-1]; N = im->data[i-1] [j]; NE = im->data[i-1] [j+1];
                                    W = im->data[i] [j-1]; c = im->data[i] [j]; E =
                               im->data[i] [j+1];
                                    SW = im->data[i+1][j-1]; S = im->data[i+1] [j]; SE = im->data[i+1] [j+1];
                                    if (dir == NORTH)
   266   267   268   269   270   271   272   273   274   275   276