diff options
| -rw-r--r-- | src/prog.c | 188 | 
1 files changed, 95 insertions, 93 deletions
| @@ -2,136 +2,134 @@  #include <stdlib.h>  #include <unistd.h> -#include <lib/lib.h> -#include <lib/png.h> +#include <lib/algo/avl_tree.h> +#include <lib/algo/flood_fill.h>  #include <lib/bool.h> -#include <lib/monad.h> +#include <lib/color.h>  #include <lib/dir.h>  #include <lib/file.h> -#include <lib/time.h> -#include <lib/color.h> -#include <lib/algo/flood_fill.h> -#include <lib/algo/avl_tree.h> -#include <lib/seg/util.h> +#include <lib/lib.h> +#include <lib/monad.h> +#include <lib/png.h>  #include <lib/seg/mask_data.h> +#include <lib/seg/util.h> +#include <lib/time.h> -int main(int argc, char** argv) -{ -  char opt; -  char* directory = NULL; -  char* png_file = "../out.png"; -  char* bin_file = "../out.bin"; +int main(int arg_count, char **arg_value) { +  char cli_option; +  char *process_directory = NULL; +  char *png_output_file_fullpath = "../out.png"; +  char *bin_output_file_fullpath = "../out.bin";    size_t closeup_pixel_count = 10; -  size_t min_area = 500; -  size_t min_perimeter = 0; -  bool_t silent = FALSE; +  size_t minimum_mask_area_threshold = 500; +  size_t minimum_mask_perimeter_threshold = 0; +  bool_t suppress_outputs_b = FALSE;    //-----------------------------------------------    //-GET-COMMAND-LINE-ARGUMENTS--------------------    //----------------------------------------------- -  while ((opt = getopt(argc, argv, "d:b:p:n:sA:P:")) != -1) { -    switch (opt) { +  while ((cli_option = getopt(arg_count, arg_value, "d:b:p:n:sA:P:")) != -1) { +    switch (cli_option) {      case 's': -      silent = TRUE; +      suppress_outputs_b = TRUE;        break;      case 'A': -      min_area = atoi(optarg); +      minimum_mask_area_threshold = atoi(optarg);        break;      case 'P': -      min_perimeter = atoi(optarg); +      minimum_mask_perimeter_threshold = atoi(optarg);        break;      case 'd': -      if (!silent) { +      if (!suppress_outputs_b) {          printf("Parse Directory: %s\n", optarg);        } -      directory = optarg; +      process_directory = optarg;        break;      case 'b': -      if (!silent) { -	printf("Bin File: %s\n", optarg); +      if (!suppress_outputs_b) { +        printf("Bin File: %s\n", optarg);        } -      bin_file = optarg; +      bin_output_file_fullpath = optarg;        break;      case 'p': -      if (!silent) { -	printf("PNG File: %s\n", optarg); +      if (!suppress_outputs_b) { +        printf("PNG File: %s\n", optarg);        } -      png_file = optarg; +      png_output_file_fullpath = optarg;        break;      case 'n': -      if (!silent) { -	printf("Closeup Size: %d\n", atoi(optarg)); +      if (!suppress_outputs_b) { +        printf("Closeup Size: %d\n", atoi(optarg));        }        closeup_pixel_count = atoi(optarg);        break;      case ':': -      if (!silent) { -	printf("Option requires value\n"); +      if (!suppress_outputs_b) { +        printf("Option requires value\n");        }        break;      case '?': -      if (!silent) { -	printf("Unknown option: %c\n", optopt); +      if (!suppress_outputs_b) { +        printf("Unknown option: %c\n", optopt);        }        break;      }    } -  for (;optind < argc; optind++) { -    if (!silent) { -      printf("Extra arguments: %s\n", argv[optind]); +  for (; optind < arg_count; optind++) { +    if (!suppress_outputs_b) { +      printf("Extra arguments: %s\n", arg_value[optind]);      }    }    TIME(ts_g_start);    //-----------------------------------------------    //-PROCESS-FILES-IN-DIRECTORY--------------------    //----------------------------------------------- -  char** file_list = NULL; +  char **file_list = NULL;    MaskData_t starting_label = 1;    Mask *masks_im = NULL;    // Expect a directory to be passed as the first argument -  if (directory != NULL) { +  if (process_directory != NULL) {      // Ensure the directory exists -    if (is_directory(directory)) { +    if (is_directory(process_directory)) {        // List files in the ddirectory -      file_list = list_directory(directory); +      file_list = list_directory(process_directory);        if (file_list != NULL) { -	for (size_t index = 0; file_list[index] != NULL; index++) { -	  char* fname = file_list[index]; -	  if (is_tif_ext(fname) == FALSE) { -	    free(file_list[index]); -	    continue; -	  } -	  // If we have a tiff file -	  //  1. Convert to labels -	  //  2. Find contiguous regions -	  //  3. Combine with current total mask -	  //  4. Free up allocations made in this process -	  char* fpath = full_path(directory, fname); -	  if (fpath == NULL) { -	    free(file_list[index]); -	    continue; -	  } -	  if (!silent) { -	    printf("Loading %s...\n", fpath); -	  } -	  //----------------------------------------------- -	  //-PROCESS-TIFF-TO-LABELS------------------------ -	  //----------------------------------------------- -          Mask *file_im = -              tif_to_labels(fpath, &starting_label); +        for (size_t index = 0; file_list[index] != NULL; index++) { +          char *fname = file_list[index]; +          if (is_tif_ext(fname) == FALSE) { +            free(file_list[index]); +            continue; +          } +          // If we have a tiff file +          //  1. Convert to labels +          //  2. Find contiguous regions +          //  3. Combine with current total mask +          //  4. Free up allocations made in this process +          char *fpath = full_path(process_directory, fname); +          if (fpath == NULL) { +            free(file_list[index]); +            continue; +          } +          if (!suppress_outputs_b) { +            printf("Loading %s...\n", fpath); +          } +          //----------------------------------------------- +          //-PROCESS-TIFF-TO-LABELS------------------------ +          //----------------------------------------------- +          Mask *file_im = tif_to_labels(fpath, &starting_label);            if (file_im == NULL) {              free(fpath);              free(file_list[index]); -	    continue; +            continue;            } -	  //----------------------------------------------- -	  //-COMBINE-LABELS-TO-GLOBAL-MASK----------------- -	  //----------------------------------------------- -	  masks_im = combine_masks(masks_im, file_im); -	  free_image_mask(file_im); -	  free(fpath); -	  free(file_list[index]); -	} -	free(file_list); +          //----------------------------------------------- +          //-COMBINE-LABELS-TO-GLOBAL-MASK----------------- +          //----------------------------------------------- +          masks_im = combine_masks(masks_im, file_im); +          free_image_mask(file_im); +          free(fpath); +          free(file_list[index]); +        } +        free(file_list);        }      }    } @@ -147,18 +145,20 @@ int main(int argc, char** argv)    //-FIND-CONTIGUOUS-REGIONS-----------------------    //-----------------------------------------------    reduce_contiguous_regions(masks_im, &starting_label); -  if (!silent) { -    printf("%u labels found\n", starting_label-1); +  if (!suppress_outputs_b) { +    printf("%u labels found\n", starting_label - 1);      printf("Mask dimensions: %u %u\n", width, height);    }    //-----------------------------------------------    //-FILTER-SMALL-REGIONS-OUT----------------------    //-----------------------------------------------    TIME(ts_filter_start); -  filter_small_masks(masks_im, min_area, min_perimeter); +  filter_small_masks(masks_im, minimum_mask_area_threshold, +                     minimum_mask_perimeter_threshold);    TIME(ts_filter_end); -  if (!silent) { -    printf("Removing small labels took %f ms\n", 1000*diff_time(&ts_filter_end, &ts_filter_start)); +  if (!suppress_outputs_b) { +    printf("Removing small labels took %f ms\n", +           1000 * diff_time(&ts_filter_end, &ts_filter_start));    }    //-----------------------------------------------    //-FIND-CONTIGUOUS-REGIONS----------------------- @@ -166,8 +166,8 @@ int main(int argc, char** argv)    //--to-make-labels-span-1-to-n-------------------    //-----------------------------------------------    reduce_contiguous_regions(masks_im, &starting_label); -  if (!silent) { -    printf("%u remaining labels found\n", starting_label-1); +  if (!suppress_outputs_b) { +    printf("%u remaining labels found\n", starting_label - 1);      printf("Mask dimensions: %u %u\n", width, height);    }  #ifdef AVL_INFO @@ -175,7 +175,7 @@ int main(int argc, char** argv)    //-OPTIONAL:-------------------------------------    //-GET-MASK-META-INFORMATION---------------------    //----------------------------------------------- -  AVLNode* root = NULL; +  AVLNode *root = NULL;    root = get_mask_data(masks_im);    if (!silent) {      printf("Inorder traversal of AVL tree: "); @@ -188,10 +188,11 @@ int main(int argc, char** argv)    //-CLOSE-UP-SMALL-GAPS-BETWEEN-REGIONS-----------    //-----------------------------------------------    TIME(ts_start); -  closeup(masks_im,closeup_pixel_count); +  closeup(masks_im, closeup_pixel_count);    TIME(ts_end); -  if (!silent) { -    printf("Closing (%lu) up took %f ms\n", closeup_pixel_count, 1000*diff_time(&ts_end, &ts_start)); +  if (!suppress_outputs_b) { +    printf("Closing (%lu) up took %f ms\n", closeup_pixel_count, +           1000 * diff_time(&ts_end, &ts_start));    }    //-----------------------------------------------    //-END-OF-PROCESSING----------------------------- @@ -201,17 +202,18 @@ int main(int argc, char** argv)    //-SAVE-MASK-AS-BINARY-AND-PNG-------------------    //-----------------------------------------------    if (masks_im != NULL) { -    Bitmap* bitmap = image_mask_data_to_bitmap(masks_im); +    Bitmap *bitmap = image_mask_data_to_bitmap(masks_im);      if (bitmap != NULL) { -      save_png(bitmap, png_file); +      save_png(bitmap, png_output_file_fullpath);        free(bitmap);      } -    write_array(bin_file, masks_im->image[0], width*height*sizeof(MaskData_t)); +    write_array(bin_output_file_fullpath, masks_im->image[0], +                width * height * sizeof(MaskData_t));      free_image_mask(masks_im);    }    TIME(ts_g_end); -  if (!silent) { -    printf("Finished in %f ms\n", 1000*diff_time(&ts_g_end, &ts_g_start)); +  if (!suppress_outputs_b) { +    printf("Finished in %f ms\n", 1000 * diff_time(&ts_g_end, &ts_g_start));    }    return 0;  } | 
