From 7ed69a0373ea170a164bf0557d61096100a7bba0 Mon Sep 17 00:00:00 2001 From: Christian C Date: Fri, 7 Mar 2025 22:07:25 -0800 Subject: Modularize programs --- src/main.c | 219 ------------------------------------------------------------- src/prog.c | 219 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 219 insertions(+), 219 deletions(-) delete mode 100644 src/main.c create mode 100644 src/prog.c (limited to 'src') diff --git a/src/main.c b/src/main.c deleted file mode 100644 index 5350797..0000000 --- a/src/main.c +++ /dev/null @@ -1,219 +0,0 @@ -#include -#include -#include - -#ifdef VISUAL -#include -#endif - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#define OFFSET 16 - -#define MIN_AREA 500 -#define MIN_PERIMETER 0 - -int main(int argc, char** argv) -{ - char opt; - char* directory = NULL; - char* png_file = "../out.png"; - char* bin_file = "../out.bin"; - size_t closeup_pixel_count = 10; - bool_t silent = FALSE; - //----------------------------------------------- - //-GET-COMMAND-LINE-ARGUMENTS-------------------- - //----------------------------------------------- - while ((opt = getopt(argc, argv, "d:b:p:n:s")) != -1) { - switch (opt) { - case 's': - silent = TRUE; - break; - case 'd': - if (!silent) { - printf("Parse Directory: %s\n", optarg); - } - directory = optarg; - break; - case 'b': - if (!silent) { - printf("Bin File: %s\n", optarg); - } - bin_file = optarg; - break; - case 'p': - if (!silent) { - printf("PNG File: %s\n", optarg); - } - png_file = optarg; - break; - case 'n': - if (!silent) { - printf("Closeup Size: %d\n", atoi(optarg)); - } - closeup_pixel_count = atoi(optarg); - break; - case ':': - if (!silent) { - printf("Option requires value\n"); - } - break; - case '?': - if (!silent) { - printf("Unknown option: %c\n", optopt); - } - break; - } - } - if (!silent) { - for (;optind < argc; optind++) { - printf("Extra arguments: %s\n", argv[optind]); - } - } - TIME(ts_g_start); - //----------------------------------------------- - //-PROCESS-FILES-IN-DIRECTORY-------------------- - //----------------------------------------------- - char** file_list = NULL; - uint32_t width, height; - uint16_t starting_label = 1; - uint16_t *masks = NULL; - // Expect a directory to be passed as the first argument - if (directory != NULL) { - // Ensure the directory exists - if (is_directory(directory)) { - // List files in the ddirectory - file_list = list_directory(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------------------------ - //----------------------------------------------- - uint16_t *file_labels = tif_to_labels(fpath, &width, &height, &starting_label); - if (file_labels == NULL) { - free(fpath); - free(file_list[index]); - continue; - } - //----------------------------------------------- - //-COMBINE-LABELS-TO-GLOBAL-MASK----------------- - //----------------------------------------------- - masks = combine_masks(masks, file_labels, width, height); - free(file_labels); - free(fpath); - free(file_list[index]); - } - free(file_list); - } - } - } - if (masks == NULL) { - fprintf(stderr, "No masks found!\n"); - return 1; - } - - //----------------------------------------------- - //-FIND-CONTIGUOUS-REGIONS----------------------- - //----------------------------------------------- - reduce_contiguous_regions(&masks, width, height, &starting_label); - if (!silent) { - 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, width, height, MIN_AREA, MIN_PERIMETER); - TIME(ts_filter_end); - if (!silent) { - printf("Removing small labels took %f ms\n", 1000*diff_time(&ts_filter_end, &ts_filter_start)); - } - //----------------------------------------------- - //-FIND-CONTIGUOUS-REGIONS----------------------- - //----------------------------------------------- - //--to-make-labels-span-1-to-n------------------- - //----------------------------------------------- - reduce_contiguous_regions(&masks, width, height, &starting_label); - if (!silent) { - printf("%u remaining labels found\n", starting_label-1); - printf("Mask dimensions: %u %u\n", width, height); - } -#ifdef AVL_INFO - //----------------------------------------------- - //-OPTIONAL:------------------------------------- - //-GET-MASK-META-INFORMATION--------------------- - //----------------------------------------------- - struct AVLNode* root = NULL; - root = get_mask_data(masks, width, height); - if (!silent) { - printf("Inorder traversal of AVL tree: "); - print_label(root); - printf("\n"); - } - free_avl_tree_nodes(root); -#endif - //----------------------------------------------- - //-CLOSE-UP-SMALL-GAPS-BETWEEN-REGIONS----------- - //----------------------------------------------- - TIME(ts_start); - closeup(&masks, width, height, 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)); - } - //----------------------------------------------- - //-END-OF-PROCESSING----------------------------- - //----------------------------------------------- - -#ifdef VISUAL -#include -#else - //----------------------------------------------- - //-SAVE-MASK-AS-BINARY-AND-PNG------------------- - //----------------------------------------------- - if (masks != NULL) { - struct bitmap_t* bitmap = uint16_to_bitmap(masks, width, height); - if (bitmap != NULL) { - save_png(bitmap, png_file); - free(bitmap); - } - write_array(bin_file, masks, width*height*sizeof(uint16_t)); - free(masks); - } -#endif - TIME(ts_g_end); - if (!silent) { - printf("Finished in %f ms\n", 1000*diff_time(&ts_g_end, &ts_g_start)); - } - return 0; -} diff --git a/src/prog.c b/src/prog.c new file mode 100644 index 0000000..5350797 --- /dev/null +++ b/src/prog.c @@ -0,0 +1,219 @@ +#include +#include +#include + +#ifdef VISUAL +#include +#endif + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#define OFFSET 16 + +#define MIN_AREA 500 +#define MIN_PERIMETER 0 + +int main(int argc, char** argv) +{ + char opt; + char* directory = NULL; + char* png_file = "../out.png"; + char* bin_file = "../out.bin"; + size_t closeup_pixel_count = 10; + bool_t silent = FALSE; + //----------------------------------------------- + //-GET-COMMAND-LINE-ARGUMENTS-------------------- + //----------------------------------------------- + while ((opt = getopt(argc, argv, "d:b:p:n:s")) != -1) { + switch (opt) { + case 's': + silent = TRUE; + break; + case 'd': + if (!silent) { + printf("Parse Directory: %s\n", optarg); + } + directory = optarg; + break; + case 'b': + if (!silent) { + printf("Bin File: %s\n", optarg); + } + bin_file = optarg; + break; + case 'p': + if (!silent) { + printf("PNG File: %s\n", optarg); + } + png_file = optarg; + break; + case 'n': + if (!silent) { + printf("Closeup Size: %d\n", atoi(optarg)); + } + closeup_pixel_count = atoi(optarg); + break; + case ':': + if (!silent) { + printf("Option requires value\n"); + } + break; + case '?': + if (!silent) { + printf("Unknown option: %c\n", optopt); + } + break; + } + } + if (!silent) { + for (;optind < argc; optind++) { + printf("Extra arguments: %s\n", argv[optind]); + } + } + TIME(ts_g_start); + //----------------------------------------------- + //-PROCESS-FILES-IN-DIRECTORY-------------------- + //----------------------------------------------- + char** file_list = NULL; + uint32_t width, height; + uint16_t starting_label = 1; + uint16_t *masks = NULL; + // Expect a directory to be passed as the first argument + if (directory != NULL) { + // Ensure the directory exists + if (is_directory(directory)) { + // List files in the ddirectory + file_list = list_directory(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------------------------ + //----------------------------------------------- + uint16_t *file_labels = tif_to_labels(fpath, &width, &height, &starting_label); + if (file_labels == NULL) { + free(fpath); + free(file_list[index]); + continue; + } + //----------------------------------------------- + //-COMBINE-LABELS-TO-GLOBAL-MASK----------------- + //----------------------------------------------- + masks = combine_masks(masks, file_labels, width, height); + free(file_labels); + free(fpath); + free(file_list[index]); + } + free(file_list); + } + } + } + if (masks == NULL) { + fprintf(stderr, "No masks found!\n"); + return 1; + } + + //----------------------------------------------- + //-FIND-CONTIGUOUS-REGIONS----------------------- + //----------------------------------------------- + reduce_contiguous_regions(&masks, width, height, &starting_label); + if (!silent) { + 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, width, height, MIN_AREA, MIN_PERIMETER); + TIME(ts_filter_end); + if (!silent) { + printf("Removing small labels took %f ms\n", 1000*diff_time(&ts_filter_end, &ts_filter_start)); + } + //----------------------------------------------- + //-FIND-CONTIGUOUS-REGIONS----------------------- + //----------------------------------------------- + //--to-make-labels-span-1-to-n------------------- + //----------------------------------------------- + reduce_contiguous_regions(&masks, width, height, &starting_label); + if (!silent) { + printf("%u remaining labels found\n", starting_label-1); + printf("Mask dimensions: %u %u\n", width, height); + } +#ifdef AVL_INFO + //----------------------------------------------- + //-OPTIONAL:------------------------------------- + //-GET-MASK-META-INFORMATION--------------------- + //----------------------------------------------- + struct AVLNode* root = NULL; + root = get_mask_data(masks, width, height); + if (!silent) { + printf("Inorder traversal of AVL tree: "); + print_label(root); + printf("\n"); + } + free_avl_tree_nodes(root); +#endif + //----------------------------------------------- + //-CLOSE-UP-SMALL-GAPS-BETWEEN-REGIONS----------- + //----------------------------------------------- + TIME(ts_start); + closeup(&masks, width, height, 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)); + } + //----------------------------------------------- + //-END-OF-PROCESSING----------------------------- + //----------------------------------------------- + +#ifdef VISUAL +#include +#else + //----------------------------------------------- + //-SAVE-MASK-AS-BINARY-AND-PNG------------------- + //----------------------------------------------- + if (masks != NULL) { + struct bitmap_t* bitmap = uint16_to_bitmap(masks, width, height); + if (bitmap != NULL) { + save_png(bitmap, png_file); + free(bitmap); + } + write_array(bin_file, masks, width*height*sizeof(uint16_t)); + free(masks); + } +#endif + TIME(ts_g_end); + if (!silent) { + printf("Finished in %f ms\n", 1000*diff_time(&ts_g_end, &ts_g_start)); + } + return 0; +} -- cgit v1.2.1