Listing 5 Routines for outlining objects

    /*****************************************************

    *   interior_outline(...
    *
    *   This function produces the outline of any "holes"
    *   inside an object. The method is:
    *      output = erosion of input
    *      final output = input - output
    *******************************************************/

interior_outline(in_name, out_name, the_image,
              out_image, il, ie, ll, le, value, mask_type)
   char   in_name[], out_name[];
   int    il, ie, ll, le;
   short  the_image[ROWS][COLS],
         out_image[ROWS][COLS],
         mask_type, value;
{
   int    a, b, count, i, j, k;
   short  mask[3][3], max;
   int    length, width;
   struct tiff_header_struct image_header;

      /**************************************
      *   Copy the 3x3 erosion-dilation mask
      *   specified by the mask type.
      ***************************************/

   switch(mask_type){
      case 1:
         copy_3_x_3(mask, edmask1);
         break;
      case 2:
         copy_3_x_3(mask, edmask2);
         break;
      case 3:
         copy_3_x_3(mask, edmask3);
         break;
      case 4:
         copy_3_x_3(mask, edmask4);
         break;
      default:
         printf("\nInvalid mask type, using mask 4");
         copy_3_x_3(mask, edmask4);
         break;
   }

   if(does_not_exist(out_name)){
      printf("\n\n output file does not exist %s", out_name);
      read_tiff_header(in_name, &image_header);
      round_off_image_size(&image_header, &length, &width);
      image_header.image_length = length*ROWS;
      image_header.image_width = width*COLS;
      create_allocate_tiff_file(out_name, &image_header, out_image);
   }  /* ends if does_not_exist */

   read_tiff_image(in_name, the_image, il, ie, ll, le);

   mask_erosion(in_name, out_name, the_image,
              out_image, il, ie, ll, le, value, mask_type);

   for(i=0; i<ROWS; i++)
      for(j=0; j<COLS; j++)
         the_image[i][j] =
            the_image[i][j] - out_image[i][j];

   write_array_into_tiff_image(out_name, the_image, il, ie, ll, le);

}  /* ends interior_outline */

    /*****************************************************
    *   exterior_outline(...
    *
    *   This function produces the outline of exterior
    *   of an object. The method is:
    *      output = dilation of input
    *      final output = output - input
    *****************************************************/

exterior_outline(in_name, out_name, the_image, out_image,
         il, ie, ll, le, value, mask_type)
   char   in_name[], out_name[];
   int    il, ie, ll, le;
   short  the_image[ROWS][COLS],
         out_image[ROWS][COLS],
         mask_type, value;
{

   int    a, b, count, i, j, k;
   short  mask[3][3], max;
   int    length, width;
   struct tiff_header_struct image_header;

      /**************************************
      *   Copy the 3x3 erosion-dilation mask
      *   specified by the mask type.
      ***************************************/

   switch(mask_type){
      case 1:
         copy_3_x_3(mask, edmaskl);
         break;
      case 2:
         copy_3_x_3(mask, edmask2);
         break;
      case 3:
         copy_3_x_3(mask, edmask3);
         break;
      case 4:
         copy_3_x_3(mask, edmask4);
         break;
      default:
         printf("\nInvalid mask type, using mask 4");
         copy_3_x_3(mask, edmask4);
         break;
   }

   if(does_not_exist(out_name)){
      printf("\n\n output file does not exist %s", out_name);
      read_tiff_header(in_name, &image_header);
      round_off_image_size(&image_header, &length, &width);
      image_header.image_length = length*ROWS;
      image_header.image_width  = width*COLS;
      create_allocate_tiff_file(out_name, &image_header, out_image);
   }  /* ends if does_not_exist */

   read_tiff_image(in_name, the_image, il, ie, ll, le);

   mask_dilation(in_name, out_name, the_image,
                 out_image, il, ie, ll, le, value, mask_type);

   for(i=0; i<ROWS; i++)
      for(j=0; j<COLS; j++)
         the_image[i][j] =
            out_image[i][j] - the_image[i][j];

   write_array_into_tiff_image(out_name, the_image, il, ie, ll, le);

}  /* ends exterior_outline */

/* End of File */