Listing 10 New code for the main routine of the C Image Processing System (CIPS)

     case 18: /* edge & gray shade segmentation */
      printf("\nCIPS> Enter input image name\n");
      get_image_name (name);
      printf("\nCIPS> Enter output image name\n");
      get_image_name (name2);
      get_parameters (&i1, &ie, &ll, &le);
      get_edge_region_options (er_method,
         &detect_type, &min_area, &max_area,
         &value, &diff, &percent, &erode);
      if(er_method[0] == 'e' ||
         er_method[0] == 'E')
         edge_region(name, name2, the_image,
                   out_image, il, ie, ll, le,
                   detect_type, min_area,
                   max_area, diff, percent,
                   value, erode);
      if(er_method[0] == 'g' ||
         er_method[0] == 'G')
         gray_shade_region(name, name2, the_image,
                   out_image, il,ie, ll, le,
                   diff, min_area, max_area);
      if(er_method[0] == 'c' ||
         er_method[0] == 'C')
         edge_gray_shade_region(name, name2
                   the_image, out_image,
                   il, ie, ll, le, detect_type,
                   min_area, max_area, diff,
                   percent, value, erode);
      break;

                   
                   
                   
   /*************************************************
   *
   *   show_menu (..
   *
   *   This function displays the CIPS main menu.
   *
   **************************************************/
show_menu()
{

   printf("n\nWelcome to CIPS");
   printf("\nThe C Image Processing System");
   printf("\nThese are you choices:");
   printf("\n\t1. Display image header");
   printf("\n\t2. Show image numbers");
   printf("\n\t3. Print image numbers");
   printf("\n\t4. Display image (VGA & EGA only)");
   printf("\n\t5. Display or print image using "
                "halftoning");
   printf("\n\t6. Print graphics image using "
                "dithering");
   printf("\n\t7. Print or display histogram "
                "numbers");
   printf("\n\t8. Perform edge detection");
   printf("\n\t9. Perform edge enhancement");
   printf("\n\t1O. Perform image filtering");
   printf("\n\t11. Perform image addition and "
                "subtraction");
   printf("\n\t12. Perform image cutting and pasting");
   printf("\n\t13. Perform image rotation and "
                "flipping");
   printf("\n\t14. Perform image scaling");
   printf("\n\t15. Create a blank image");
   printf("\n\t16. Perform image thresholding");
   printf("\n\t17. Perform image segmentation");
   printf("\n\t18. Perform edge & gray shade"
                " image segmentation");
   printf("\n\t20. Exit system");
   printf("\n\nEnter choice_\b"):

}  /* ends show_menu */

                   
                   
   /********************************************
   *
   *  get_edge_region_options(...
   *
   *  This function interacts with the user to
   *  get the options needed to call the
   *  edge and region based segmentation
   *  routines.
   *
   ********************************************/

get_edge_region_options(method, edge_type,
        min_area, max_area, set_value,
        diff, percent, erode)
   char  method[];
   float *percent;
   int   *edge_type;
   short *diff, *erode,
        *min_area, *max_area,
        *set_value;
{
   int not_finished = 1, response;

   while(not finished){
      printf("\n\nEdge Region Segmentation Options:");
      printf("\n\t1.  Method is %s", method);
      printf("\n\t    Recall: Edge, Gray shade, "
                   "Combination");
      printf("\n\t2.  Edge type is %d", *edge_type);
      printf("\n\t    Recall: ");
      printf("\n\t     1=Prewitt     2=Kirsch");
      printf("\n\t     3=Sobel       4=quick");
      printf("\n\t     5=homogeneity 6=difference");
      printf("\n\t     7=contrast    8=gaussian");
      printf("\n\t     10=range      11=variance");
      printf("\n\t3.  Min area is %d", *min_area);
      printf("\n\t4.  Max area is %d", *max_area);
      printf("\n\t5.  Set value is %d", *set_value);
      printf("\n\t6.  Difference value is %d", *diff);
      printf("\n\t7.  Threshold percentage is %f",
                    *percent);
      printf("\n\t8.  Erode is %d", *erode);
      printf("\n\nEnter choice (0 = no change) _\b");

      get_integer(&response);

      if(response == 0){
        not_finished = 0;
      }

      if(response == 1){
         printf("\n\t  Recall: Edge, Gray shade, "
                     "Combination");
         printf("\n\t> ");
         read_string(method);
      }

      if(response == 2){
         printf("\n\t   Recall:");
         printf("\n\t    1=Prewitt     2=Kirsch");
         printf("\n\t    3=Sobel       4=quick");
         printf("\n\t    5=homogeneity 6=difference");
         printf("\n\t    7=contrast    8=gaussian");
         printf("\n\t    10=range      11=variance");
         printf("\n\t__\b");
         get_integer(edge_type);
      }

      if(response == 3){
         printf("\nEnter min area:_b\b");
         get_integer(min_area);
      }

      if(response == 4){
         printf("\nEnter max area:__b\b");
         get_integer(max_area);
      }

      if(response == 5){
         printf("\nEnter set value:__\b\b");
         get_integer(set_value);
      }

      if(response == 6){
         printf("\nEnter difference:_\b\b");
         get_integer(diff);
      }

      if(response == 7){
         printf("\nEnter threshold percentage:_\b\b");
         get_float(percent);
      }

      if(response == 8){
         printf("\nEnter erode:_\b\b");
         get_integer(erode);
      }

   }  /* ends while not_finished */
}  /* ends get_edge_region_options */

/* End of File */