Page 266 -
P. 266

240   Chapter 6 ■ Thinning


                            *                              *
                           /  Stentiford’s Acute Angle Emphasis /
                           void aae (IMAGE im)
                           {
                               int i, j, again = 0, k;

                               again = 0;
                               for (k=5; k> = 1; k-=2)
                               {
                                 for (i=2; i<im->info->nr-2; i++)
                                   for (j=2; j<im->info->nc-2; j++)
                                     if (im->data[i] [j] == 0)
                                          match_du (im, i, j, k);

                                 for (i = 2; i<im->info->nr-2; i++)
                                   for (j=2; j<im->info->nc-2; j++)
                                     if (im->data[i] [j] = = 2)
                                     {
                                           again = 1;
                                           im->data[i] [j] = 1;
                                     }
                                 if (again = = 0) break;
                               }
                           }

                            *                                     *
                           /  Template matches for acute angle emphasis /
                           void match_du (IMAGE im, int r, int c, int k)
                           {
                            *  *
                           / D1  /
                               if (im->data[r-2] [c-2] == 0 && im->data[r-2] [c-1] == 0 &&
                                   im->data[r-2] [c] == 1 && im->data[r-2] [c+1] == 0 &&
                                   im->data[r-2] [c+2] == 0 &&
                                   im->data[r-1] [c-2] == 0 && im->data[r-1] [c-1] == 0 &&
                                   im->data[r-1] [c] == 1 && im->data[r-1] [c+1] == 0 &&
                                   im->data[r-1] [c+2] == 0 &&
                                   im->data[r] [c-2] == 0 && im->data[r] [c-1] == 0 &&
                                   im->data[r] [c] == 0 && im->data[r] [c+1] == 0 &&
                                   im->data[r] [c+2] == 0 &&
                                   im->data[r+1] [c-2] == 0 && im->data[r+1] [c-1] == 0 &&
                                   im->data[r+1] [c] == 0 && im->data[r+1] [c+1] == 0 &&
                                   im->data[r+1] [c+2] == 0 &&
                                   im->data[r+2] [c-1] == 0 &&
                                   im->data[r+2][c] == 0 && im->data[r+2] [c+1] == 0)
                               {
                                     im->data[r] [c] = 2;
                                     return;
                               }
                               *
                           / *  D2 /
                               if (k >= 2)
                               if (im->data[r-2] [c-2] == 0 && im->data[r-2] [c-1] == 1 &&
                                   im->data[r-2] [c] == 1 && im->data[r-2] [c+1] == 0 &&
   261   262   263   264   265   266   267   268   269   270   271