Listing 8 A sample application that allows you to apply the shape operations to entire image files

      /*********************************************
      *   file d:\cips\mainsk.c
      *
      *   Functions: This file contains
      *      main
      *
      *   Purpose:
      *      This file contains the main calling
      *      routine that calls the erosion, dilation,
      *      outline, and skeleton functions.
      *
      *   External Calls:
      *      gin.c - get_image_name
      *      numcvrt.c - get_integer
      *                  int_convert
      *      tiff.c - read_tiff_header
      *      ed.c - erosion
      *             dilation
      *             mask_erosion
      *             mask_dilation
      *             interior_outline
      *             exterior_outline
      *             opening
      *             closing
      *      skeleton.c - thinning
      *                   skeleton
      *                   dilate_not_join
      *                   special_opening
      *                   special_closing
      *                   edm
      *                   mat
      *
      *   Modifications:
      *      7 March 1993 - created
      ***********************************************/

#include "cips.h"

short the_image[ROWS][COLS];
short out_image[ROWS][COLS];

main(argc, argv)
   int argc;
   char *argv[];
{

   char    name[80], name2[80], name3[80], type[80];
   int     count, i, j,
          il, ie, ll, le,
          length, lw, mask_type, number,
          threshold, width;
   short   value;
   struct  tiff_header_struct image_header;

   my_clear_text_screen();

      /*********************************************
      *   Interpret the command line parameters.
      **********************************************/

   if(argc < 5){
    printf(
    "\n\nNot enough parameters:"
     "\n"
     "\n usage: mainsk in-file out-file type value"
     "[threshold-or-mask-type][number]"
     "\n"
     "\n recall type: EROsion DILation Mask-ERosion"
     "\n              Mask_DIlation INTerior-outline"
     "\n              EXTerior-outline THInning"
     "\n              Dilate-Not-Join OPEning"
     "\n              CLOsing SPecial-Opening"
     "\n              SPecial-Closing"
     "\n              Euclidean-Distance-Measure"
     "\n              Medial-Axis-Transform"
     "\n"
     "\n              [number] needed for opening"
     "\n              and closing"
     "\n");
    exit(0);
   }

   strcpy(name,     argv[1]);
   strcpy(name2,    argv[2]);
   strcpy(type,     argv[3]);
   value     = atoi(argv[4]);
   threshold = atoi(argv[5]);
   mask_type = atoi(argv[5]);
   number    = atoi(argv[6]);

   il = 1;
   ie = 1;
   ll = ROWS+1;
   le = COLS+1;

      /*********************************************
      *   Read the input image header and setup
      *   the looping counters.
      *********************************************/

   read_tiff_header(name, &image_header);

   length = (90 + image_header.image_length)/ROWS;
   width  = (90 + image_header.image_width)/COLS;
   count  = 1;
   lw     = length*width;
   printf("\nlength=%d width-%d", length, width);

      /*********************************************
      *   Loop over the input images and
      *   apply the desired function.
      **********************************************/

   for(i=0; i<length; i++){
      for(j=0; j<width; j++){
         printf("\nrunning %d of %d", count, lw);
         count++;

           /* thinning */
         if(strncmp("thi", type, 3) == 0){
            thinning(name, name2, the_image, out_image,
                    il+i*ROWS, ie+j*COLS,
                    ll+i*ROWS, le+j*COLS,
                    value, threshold, 0);
         }  /* ends thinning operation */

           /* dilate-not-join */
         if(strncmp("dnj", type, 3) == 0){
            dilate_not_join(name, name2,
                          the_image, out_image,
                          il+i*ROWS, ie+j*COLS,
                          ll+i*ROWS, le+j*COLS,
                          value, threshold);
         }  /* ends dilate_not_join operation */

           /* erosion */
         if(strncmp("ero", type, 3) == 0){
            erosion(name, name2, the_image, out_image,
                   il+i*ROWS, ie+j*COLS,
                   ll+i*ROWS, le+j*COLS,
                   value, threshold);
         }  /* ends erosion operation */

           /* dilation */
         if(strncmp("dil", type, 3) == 0){
            dilation(name, name2, the_image, out_image,
                    il+i*ROWS, ie+j*COLS,
                    ll+i*ROWS, le+j*COLS,
                    value, threshold);
         }  /* ends dilation operation */

           /* mask_erosion */
         if(strncmp("mer", type, 3) == 0){
            mask_erosion(name, name2, the_image,
                       out_image, il+i*ROWS,
                       ie+j*COLS, ll+i*ROWS,
                       le+j*COLS, value, mask_type);
         }  /* ends mask_erosion operation */

           /* mask_dilation */
         if(strncmp("mdi", type, 3) == 0){
            mask_dilation(name, name2, the_image,
                        out_image, il+i*ROWS,
                        ie+j*COLS, ll+i*ROWS,
                        le+j*COLS, value, mask_type);
         }  /* ends mask_dilation operation */

           /* interior_outline */
         if(strncmp("int", type, 3) == 0){
            interior_outline(name, name2, the_image,
                          out_image, il+i*ROWS,
                          ie+j*COLS, ll+i*ROWS,
                          le+j*COLS, value, mask_type);
         }  /* ends interior_outline operation */

           /* exterior_outline */
         if(strncmp("ext", type, 3) == 0){
            exterior_outline(name, name2, the_image,
                          out_image, il+i*ROWS,
                          ie+j*COLS, ll+i*ROWS,
                          le+j*COLS, value, mask_type);
         }  /* ends exterior_outline operation */

           /* opening */
         if(strncmp("ope", type, 3) == 0){
            opening(name, name2, the_image,
                   out_image, il+i*ROWS,
                   ie+j*COLS, ll+i*ROWS,
                   le+j*COLS, value, mask_type, number);
         }  /* ends opening operation */

           /* closing */
         if(strncmp("clo", type, 3) == 0){
            closing(name, name2, the_image,
                   out_image, il+i*ROWS,
                   ie+j*COLS, ll+i*ROWS,
                   le+j*COLS, value, mask_type, number);
         }  /* ends closing operation */

           /* special opening */
         if(strncmp("spo", type, 3) == 0){
            special_opening(name, name2, the_image,
                          out_image, il+i*ROWS,
                          ie+j*COLS, ll+i*ROWS,
                          le+j*COLS, value,
                          threshold, number);
         }  /* ends special opening operation */

           /* special closing */
         if(strncmp("spc", type, 3) == 0){
            special_closing(name, name2, the_image,
                          out_image, il+i*ROWS,
                          ie+j*COLS, ll+i*ROWS,
                          le+j*COLS, value,
                          mask_type, number);
         }  /* ends special closing operation */

      /* Euclidean Distance Measure */
         if(strncmp("edm", type, 3) == 0){
            edm(name, name2, the_image,
                out_image, il+i*ROWS,
                ie+j*COLS, ll+i*ROWS,
                le+j*COLS, value);
         }  /* ends Euclidean distance mesaure */

           /* medial axis transform */
         if(strncmp("mat", type, 3) == 0){
            mat(name, name2, the_image,
                out_image, il+i*ROWS,
                ie+j*COLS, ll+i*ROWS,
                le+j*COLS, value);
         }  /* ends medial axis transform operation */

      }  /* ends loop over j */
   }  /* ends loop over i */
}  /* ends main */

/* End of File */