Page 264 -
P. 264
238 Chapter 6 ■ Thinning
if (again == 0) break;
/ * First sub-iteration * /
for (i=1; i<im->info->nr-1; i++)
for (j=1; j<im->info->nc-1; j++)
{
if (im->data[i] [j] != 1) continue;
k = nays8(im, i, j);
if ((k >= 2 && k <= 6) && Connectivity(im, i, j)==1)
{
*
if (im->data[i-1] [j] im->data[i] [j+1]
*
im->data[i+1] [j]==0 &&
* *
im->data[i] [j+1] im->data[i+1] [j] im->data[i] [j-1] == 0)
{
tmp->data[i] [j] = 1;
again = 1;
}
}
}
Delete (im, tmp);
}
/ * Post_process * /
stair (im, tmp, NORTH);
Delete (im, tmp);
stair (im, tmp, SOUTH);
Delete (im, tmp);
/ * Restore levels * /
for (i=1; i<im->info->nr-1; i++)
for (j=1; j<im->info->nc-1; j++)
if (im->data[i] [j] > 0) im->data[i] [j] = 0;
else im->data[i] [j] = 255;
freeimage (tmp);
}
*
/ * Delete any pixel in IM corresponding to a 1 in TMP /
void Delete (IMAGE im, IMAGE tmp)
{
int i, j;
/ * Delete pixels that are marked * /
for (i=1; i<im->info->nr-1; i++)
for (j=1; j<im->info->nc-1; j++)
if (tmp->data[i] [j])
{
im->data[i] [j] = 0;
tmp->data[i] [j] = 0;
}