Page 265 -
P. 265

Chapter 6 ■ Thinning   239


                                                             *
                               / *  Number of neighboring 1 pixels /
                               int nays8 (IMAGE im, int r, int c)
                               {
                                    int i, j, k=0;

                                  for (i=r-1; i<=r+1; i++)
                                    for (j=c-1; j<=c+1; j++)
                                     if (i !=r || c !=j)
                                      if (im->data[i] [j] >= 1) k++;
                                  return k;
                               }
                                                             *
                               / *  Number of neighboring 0 pixels /
                               int snays (IMAGE im, int r, int c)
                               {
                                    int i, j, k=0;
                                  for (i=r-1; i<=r+1; i++)
                                    for (j=c-1; j<=c+1; j++)
                                     if (i !=r || c !=j)
                                      if (im->data[i] [j] == 0) k++;
                                  return k;
                               }

                               / *  Connectivity by counting black-white transitions on the boundary  * /
                                     int Connectivity (IMAGE im, int r, int c)
                               {
                                    int i, N=0;
                                    if (im->data[r] [c+1] >= 1 && im->data[r-1] [c+1] == 0) N++;
                                    if (im->data[r-1] [c+1] >= 1 && im->data[r-1] [c] == 0) N++;
                                    if (im->data[r-1] [c] >= 1 && im->data[r-1] [c-1] == 0) N++;
                                    if (im->data[r-1] [c-1] >= 1 && im->data[r] [c-1] == 0) N++;
                                    if (im->data[r] [c-1] >= 1 && im->data[r+1] [c-1] == 0) N++;
                                    if (im->data[r+1] [c-1] >= 1 && im->data[r+1] [c] == 0) N++;
                                    if (im->data[r+1] [c] >= 1 && im->data[r+1] [c+1] == 0) N++;
                                    if (im->data[r+1] [c+1] >= 1 && im->data[r] [c+1] == 0) N++;

                                    return N;
                               }

                                                                    *
                               / *  Stentiford’s boundary smoothing method /
                               void pre_smooth (IMAGE im)
                               {
                                    int, i, j;
                                    for (i=0; i<im->info->nr; i++)
                                     for (j=0; j<im->info->nc; j++)
                                       if (im->data[i] [j] = = 0)
                                        if (snays (im, i, j) <= 2 && Yokoi (im, i, j)<2)
                                          im->data[i] [j] = 2;

                                    for (i=0; i<im->info->nr; i++)
                                     for (j=0; j<im->info->nc; j++)
                                       if (im->data[i] [j] = = 2) im->data[i] [j] = 1;
                               }
   260   261   262   263   264   265   266   267   268   269   270