Listing 8 main routine for the C Image Processing System revised to include histogram image segmentation

        case 16: /* image thresholding */
           printf("\nCIPS> Enter input image name\n");
           get_image_name(name);
           printf("\nCIPS> Enter output image name\n");
           get_image_name(name2);
           get_parameters(&il, &ie, &ll, &le);
           get_threshold_options(ts_method, &hi, &low, &value);
           if (ts_method[0] == 'm' || ts_method[0] == 'M')
              manual_threshold_segmentation(name,
                     name2, the_image, out_image,
                     il, ie, ll, le,
                     hi, low, value, 0);
           if(ts_method[0] == 'p' || ts_method[0] == 'P')
              peak_threshold_segmentation(name,
                     name2, the_image, out_image,
                     il, ie, ll, le, value, 0);
           if(ts_method[0] == 'v' || ts_method[0] == 'V')
              valley_threshold_segmentation(name,
                     name2, the_image, out_image,
                     il, ie, ll, le, value, 0);
           if(ts_method[0] == 'a' || ts_method[0] == 'a')
              adaptive_threshold_segmentation(name,
                     name2, the_image, out_image,
                     il, ie, ll, le, value, 0);
        break;
        
        case 17: /* image 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(&il, &ie, &ll, &le);
           get_segmentation_options(ts_method, &hi,
                                    &low, &value);
           if(ts_method[0] == 'm' || (ts_method[0] == 'M')
              manual_threshold_segmentation(name,
                     name2, the_image, out_image,
                     il, ie, ll, le,
                     hi, low, value, 1);
           if(ts_method[0] == 'p' || ts_method[0] == 'P')
              peak_threshold_segmentation(name,
                     name2, the_image, out_image,
                     il, ie, ll, le, value, 1);
           if(ts_method[0] == 'v' || ts_method[0] == 'V')
              valley_threshold_segmentation(name,
                     name2, the_image, out_image,
                     il, ie, ll, le, value, 1);
           if(ts_method[0] == 'a' || ts_method[0] == 'a')
              adaptive_threshold_segmentation(name,
                     name2, the_image. out_image,
                     il, ie, ll, le, value, 1);
        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\t10. 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\t20. Exit system");
        printf("\n\nEnter choice _\b");

}     /* ends show_menu */
                          .
                          .
                          .

   /******************************************
   *   get_segmentation_options(...
   *   This function interacts with the user
   *   to obtain the options for image
   *   segmentation.
   *******************************************/

get_segmentation_options(method, hi, low, value)
   char   method[];
   short  *hi, *low, *value;
{
   int   i, not_finished = 1, response;
   
   while(not_finished){
      printf("\n\nThe image segmentation options are:\n");
      printf("\n\t1. Method is %s", method);
      printf("\n\t   (options are manual peaks");
      printf(         " valleys adapative)");
      printf("\n\t2. Value is %d", *value);
      printf("\n\t3. Hi    is %d", *hi);
      printf("\n\t4. Low   is %d", *low);
      printf("\n\t   Hi and Low needed only for");
      printf(         "manual method");
      printf("\n\nEnter choice (0 = no change):_\b");
      
      get_integer(&response);
      
      if(response == 0)
         not_finished == 0;
      
      if(response == 1){
         printf("\nEnter method (options are:");
         printf(" manual peaks valleys adaptive)\n\t");
         read_string(method);
      }
      
      if(response == 2){
         printf("\nEnter value: __\b\b\b");
         get_short(value);
      }
      
      if(response == 3){
         printf("\nEnter hi: __\b\b\b");
         get_short(hi);
      }
      if(response == 4){
         printf("\nEnter low: __\b\b\b");
         get_short(low);
      }
   
   }  /* ends while not_finished */
}  /* ends get_segmentation_options */

   /*********************************************
   *   get_threshold_options{...
   *   This function interacts with the user
   *   to obtain the options for image
   *   threshold.
   **********************************************/

get_threshold_options(method, hi, low, value)
   char   method[];
   short  *hi, *low, *value;
{
   int   i, not_finished = 1, response;
   while(not_finished){
      printf("\n\nThe image threshold options are:\n");
      printf("\n\tl. Method is %s", method);
      printf("\n\t   (options are manual peaks");
      printf(         "valleys adapative)");
      printf("\n\t2. Value is %d", *value);
      printf("\n\t3. Hi    is %d", *hi);
      printf("\n\t4. Low   is %d", *low);
      printf("\n\t   Hi and Low needed only for");
      printf(         " manual method");
      printf("\n\nEnter choice (0 = no change):_\b");
      
      get_integer(&response);
      
      if(response == 0)
         not_finished = 0;
      
      if(response == 1){
         printf("\nEnter method (options are:");
         printf(" manual peaks valleys adaptive)\n\t");
         read_string(method);
      }
      
      if(response == 2){
         printf("\nEnter value: __\b\b\b");
         get_short(value);
      }
      
      if(response == 3){
         printf("\nEnter hi: __\b\b\b");
         get_short(hi);
      }
      if(response == 4){
         printf("\nEnter low: __\b\b\b");
         get_short(low);
      }

   }  /* ends while not_finished */
}  /* ends get_threshold_options */
/* End of File */