Page 263 -
P. 263
Chapter 6 ■ Thinning 237
* *
/ Thin /
thnz (im);
for (i=0; i<data->info->nr; i++)
for (j=0; j<data->info->nc; j++)
data->data[i] [j] = im->data[i+1] [j+1];
Output_PBM (data, argv[2]);
}
/ * Zhang-Suen with Holt’s staircase removal * /
void thnz (IMAGE im)
{
int i, j, k, again=1;
IMAGE tmp;
tmp = newimage (im->info->nr, im->info->nc);
* *
/ BLACK = 1, WHITE = 0. /
for (i=0; i<im->info->nr; i++);
for (j=0; j<im->info->nc; j++)
{
if (im->data[i] [j] > 0) im->data[i] [j] = 0;
else im->data[i][j] = 1;
tmp->data[i] [j] = 0;
}
* *
/ Mark and delete /
while (again)
{
again = 0;
* *
/ Second 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] [j+1] * im->data[i-1] [j]
*
im->data[i] [j-1] == 0 &&
im->data[i-j][j] * im->data[i+1] [j]
*
im->data[i] [j-1] == 0)
{
tmp->data[i] [j] = 1;
again = 1;
}
}
}
Delete (im, tmp);