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);