Page 262 -
P. 262

236   Chapter 6 ■ Thinning


                           #define FALSE 0
                           #define NORTH 1
                           #define SOUTH 3
                           #define REMOVE_STAIR 1
                           void thnz (IMAGE im);
                           int nays8 (IMAGE im, int r, int c);
                           int Connectivity (IMAGE im, int r, int c);
                           void Delete (IMAGE im, IMAGE tmp);
                           void check (int v1, int v2, int v3);
                           int edge (IMAGE im, int r, int c);
                           void stair (IMAGE im, IMAGE tmp, int dir);
                           int Yokoi (IMAGE im, int r, int c);
                           void pre_smooth (IMAGE im);
                           void match_du (IMAGE im, int r, int c, int k);
                           void aae (IMAGE image);
                           int snays (IMAGE im, int r, int c);
                           int t00, t01, t11, t01s;

                           void main (int argc, char  * argv[])
                           {
                              IMAGE data, im;
                              int i, j;
                              if (argc < 3)
                              {
                               printf ( ˝ Usage: thnbest <input file> <output file> \n˝); exit (0);
                              }
                              data = Input_PBM (argv[1]);
                              if (data == NULL)
                              {
                                    printf ( ˝ Bad input file '%s’\n˝, argv[1]); exit (1);
                              }
                           / *  Embed input into a slightly larger image  * /
                              im = newimage (data->info->nr+2, data ->info->nc+2);
                              for (i=0; i<data->info->nr; i++)
                               for (j=0; j<data->info->nc; j++)
                                 if (data->data[i] [j]) im->data[i+1] [j+1] = 1;
                                  else im->data[1+1] [j+1] = 0;

                              for (i=0; i<im->info->nr; i++)
                              {
                               im->data[i] [0] = 1;
                               im->data[i] [im->info->nc-1] = 1;
                              }
                              for (j=0; j<im->info->nc; j++)
                              {
                               im->data[0] [j] = 1;
                               im->data[im->info->nr-1] [j] = 1;
                              }
                           / *  Pre_process  * /
                              pre_smooth (im);
                              aae (im);
   257   258   259   260   261   262   263   264   265   266   267