NAME

     morpho - higher level function performing iterative  morpho-
     logical modification based on morphIterMod_Image

SYNOPSIS

      #include "CVIPimage.h"
      #include "CVIPmorph.h"

     Image * morpho(const  Image   *binImage,
        const char * surround_str, CVIP_BOOLEAN rotate,
        int boolFUNC, int connectedness,
        unsigned no_of_iter, int fields)

      <binImage> - pointer to Image structure (binary image)
      <surround_str> - pointer to a string  holding  the  set  of
     surrounds, such as "1, 7, 8".
      <rotate> - rotate or not (CVIP_YES, CVIP_NO)
      <boolFUNC> - integer number for the  Boolean  function  (1-
     6):
          1: 0
          2: !a
          3: ab
          4: a+b
          5: a^b
          6: (!a)b
      <connectedness>  -  the  connectivity  scheme  being   used
     (FOUR,EIGHT,SIX_NWSE,SIX_NESW)
      <no_of_iter> - number of iterations to perform
      <fields> - number of subfields into which the image  tesse-
     lation will be divided

PATH

     $CVIPHOME/MORPHOLOGICAL/morph.c

DESCRIPTION

     This is a wrapper function for morphIterMod_Image, for  more
     information, see morphIterMod_Image.

TYPES AND CONSTANTS

     none

RETURN VALUES

     A pointer to the modified image

EXAMPLE

      #include "CVIPtoolkit.h"
      #include "CVIPdef.h"
      #include "CVIPimage.h"
      #include "CVIPmorph.h"

      main () {
         Image *cvipImage, *out_img;
         IMAGE_FORMAT  format;
         char *inputfile,
           *surround_str = (char *) malloc(sizeof(char) * 80),
            temp;
         CVIP_BOOLEAN rotate;
         int boolFUNC,
            connectedness,
            fields;
            unsigned no_of_iter;

         print_CVIP("\n\t\tEnter the Input File Name:  ");
         inputfile = getString_CVIP();

         /* read in the input image */
         cvipImage = (Image *) read_Image(inputfile, 1);
         if(cvipImage == NULL) {
            error_CVIP("init_Image",
               "could not read image file");
            free(inputfile);
            exit(1);
          } else view_Image(cvipImage,inputfile);

         print_CVIP("Please input the surrounds:");
         fgets(surround_str, 80, stdin);

         print_CVIP("Rotate? (y/n)");
         scanf("%1s", &temp);
         rotate = (temp == 'y') ? CVIP_YES : CVIP_NO;

         print_CVIP("The boolean funciton number (1-6):");
         scanf("%d", &boolFUNC);
            if (boolFUNC < 0 || boolFUNC > 6) {
               error_CVIP("main",
                "The boolean funciton number should be 1 to 6");
            exit(1);
         }

         print_CVIP("Connectedness  (1-FOUR;2-EIGHT;3-SIX_NWSE;4-
     SIX_NESW):");
         scanf("%1s", &temp);
         switch (temp) {
            case '1': connectedness = FOUR; break;
            case '2': connectedness = EIGHT; break;
            case '3': connectedness = SIX_NWSE; break;
            case '4': connectedness = SIX_NESW; break;
            default:
               error_CVIP("main",
                 "The connectedness  number should be 1 to 4");
               exit(1);
         }
         print_CVIP("Number of iterations (0 for infinity):");
         scanf("%d", &no_of_iter);

         print_CVIP("Number of subfields (1-3):");
         scanf("%d", &fields);

         if (fields < 1 || fields > 3) {
            error_CVIP("main",
             "The number of subfields should be 1 to 3");
            exit(1);
         }

         if ( (out_img = morpho(cvipImage, surround_str,
               rotate, boolFUNC, connectedness, no_of_iter,
               fields)) == (Image *)NULL) {
            error_CVIP("main", "Iterative modification  error");
            exit(1);
         } else {
            view_Image(out_img,"Iterative modification");
         }

      }
      /*
      ** end of function main
      */

HISTORY

     History information recorded: None

SEE ALSO

     libmorph, morphIterMod_Image

AUTHOR

     Copyright (C) 1996 SIUE - by Scott E. Umbaugh  and  Yansheng
     Wei.