diff options
author | Christian C <cc@localhost> | 2025-03-23 15:34:48 -0700 |
---|---|---|
committer | Christian C <cc@localhost> | 2025-03-23 15:34:48 -0700 |
commit | 22c32ae8649e8540198942b33d4bab72c4ea7238 (patch) | |
tree | 946e173c4ab362ec88f21854e8613a21c330a6e1 /lib/seg | |
parent | 981e8bfd12f79cb469bb54a915230eda6dafab41 (diff) |
Userspace types
Diffstat (limited to 'lib/seg')
-rw-r--r-- | lib/seg/mask_data.c | 82 | ||||
-rw-r--r-- | lib/seg/util.c | 12 |
2 files changed, 47 insertions, 47 deletions
diff --git a/lib/seg/mask_data.c b/lib/seg/mask_data.c index dc3a811..52a3ac4 100644 --- a/lib/seg/mask_data.c +++ b/lib/seg/mask_data.c @@ -4,9 +4,9 @@ #include <stdio.h> // Allocate Mask Data for Label -struct MaskData* create_mask_data(ImageMaskData_t label) +MaskData* create_mask_data(ImageMaskData_t label) { - struct MaskData *data = (struct MaskData*)malloc(sizeof(struct MaskData)); + MaskData *data = (MaskData*)malloc(sizeof(MaskData)); data->label = label; data->area = 0; data->perimeter = 0; @@ -14,15 +14,15 @@ struct MaskData* create_mask_data(ImageMaskData_t label) } // Compare mask data labels -bool_t compare_labels(struct MaskData* left, struct MaskData* right) +bool_t compare_labels(MaskData* left, MaskData* right) { return left->label < right->label; } // Create AVL Mask node -struct AVLNode* create_avl_mask_node(struct MaskData* data) +AVLNode* create_avl_mask_node(MaskData* data) { - struct AVLNode* node = (struct AVLNode*)malloc(sizeof(struct AVLNode)); + AVLNode* node = (AVLNode*)malloc(sizeof(AVLNode)); if (node == NULL) { return NULL; } @@ -35,31 +35,31 @@ struct AVLNode* create_avl_mask_node(struct MaskData* data) } // Insert MaskData into the AVL Tree -struct Result insert_mask(struct AVLNode* node, struct MaskData* data) +Result insert_mask(AVLNode* node, MaskData* data) { - struct Result result; + Result result; // 1. Standard BST insertion if (node == NULL) { - return (struct Result) {create_avl_mask_node(data), TRUE}; + return (Result) {create_avl_mask_node(data), TRUE}; } - struct MaskData *node_data = (struct MaskData*)node->data; + MaskData *node_data = (MaskData*)node->data; if (node->compare(data, node_data)) { result = insert_mask(node->left, data); if (!result.success) { fprintf(stderr, "Failed to insert!"); return result; } - node->left = (struct AVLNode*)result.data; + node->left = (AVLNode*)result.data; } else if (node->compare(node->data, data)) { result = insert_mask(node->right, data); if (!result.success) { fprintf(stderr, "Failed to insert!"); return result; } - node->right = (struct AVLNode*)result.data; + node->right = (AVLNode*)result.data; } else { - return (struct Result) {node, FALSE}; + return (Result) {node, FALSE}; } // 2. Update height of the ancestor node @@ -71,53 +71,53 @@ struct Result insert_mask(struct AVLNode* node, struct MaskData* data) // LeftLeft if ((balance > 1) && node->compare(data, node->left->data)) { - return (struct Result) {right_rotate(node), TRUE}; + return (Result) {right_rotate(node), TRUE}; } // RightRight if ((balance < -1) && node->compare(node->right->data, data)) { - return (struct Result) {left_rotate(node), TRUE}; + return (Result) {left_rotate(node), TRUE}; } // LeftRight if ((balance > 1) && node->compare(node->left->data, data)) { - return (struct Result) {right_rotate(node), TRUE}; + return (Result) {right_rotate(node), TRUE}; } // RightLeft if ((balance < -1) && node->compare(data,node->right->data)) { - return (struct Result) {left_rotate(node), TRUE}; + return (Result) {left_rotate(node), TRUE}; } - return (struct Result) {node, TRUE}; + return (Result) {node, TRUE}; } // Allocate a label's Mask data in a tree // If it already exists, skip the allocation -struct AVLNode* insert_mask_alloc(struct AVLNode* node, ImageMaskData_t label) +AVLNode* insert_mask_alloc(AVLNode* node, ImageMaskData_t label) { - struct MaskData* data = create_mask_data(label); - struct Result result = insert_mask(node, data); + MaskData* data = create_mask_data(label); + Result result = insert_mask(node, data); if (!result.success) { free(data); } - return (struct AVLNode*)result.data; + return (AVLNode*)result.data; } // Print AVL Node Mask Data Label -void print_label(struct AVLNode* root) +void print_label(AVLNode* root) { if (root != NULL) { print_label(root->left); - struct MaskData* data = root->data; + MaskData* data = root->data; printf("%d: (%zu, %zu) ", data->label, data->area, data->perimeter); print_label(root->right); } } // Increase the label's area -bool_t increase_label_area(struct AVLNode* root, ImageMaskData_t label) +bool_t increase_label_area(AVLNode* root, ImageMaskData_t label) { if (root == NULL) { return FALSE; } - struct MaskData* data = (struct MaskData*)root->data; + MaskData* data = (MaskData*)root->data; if (data->label == label) { data->area++; } @@ -131,12 +131,12 @@ bool_t increase_label_area(struct AVLNode* root, ImageMaskData_t label) } // Increase the label's perimeter -bool_t increase_label_perimeter(struct AVLNode* root, ImageMaskData_t label) +bool_t increase_label_perimeter(AVLNode* root, ImageMaskData_t label) { if (root == NULL) { return FALSE; } - struct MaskData* data = (struct MaskData*)root->data; + MaskData* data = (MaskData*)root->data; if (data->label == label) { data->perimeter++; } @@ -151,9 +151,9 @@ bool_t increase_label_perimeter(struct AVLNode* root, ImageMaskData_t label) // Increase the label's area // Create an AVL node if it doesn't exist -struct AVLNode* increase_label_area_alloc(struct AVLNode* root, ImageMaskData_t label) +AVLNode* increase_label_area_alloc(AVLNode* root, ImageMaskData_t label) { - struct AVLNode* new_root = root; + AVLNode* new_root = root; bool_t success = increase_label_area(new_root, label); if (success == FALSE) { new_root = insert_mask_alloc(new_root, label); @@ -164,9 +164,9 @@ struct AVLNode* increase_label_area_alloc(struct AVLNode* root, ImageMaskData_t // Increase the label's perimeter // Create an AVL node if it doesn't exist -struct AVLNode* increase_label_perimeter_alloc(struct AVLNode* root, ImageMaskData_t label) +AVLNode* increase_label_perimeter_alloc(AVLNode* root, ImageMaskData_t label) { - struct AVLNode* new_root = root; + AVLNode* new_root = root; bool_t success = increase_label_perimeter(new_root, label); if (success == FALSE) { new_root = insert_mask_alloc(new_root, label); @@ -182,7 +182,7 @@ bool_t compare_image_mask_data_t(ImageMaskData_t* s1, ImageMaskData_t* s2) } // In-order traversal print pointer -void print_in_order_image_mask_data_t(struct AVLNode* root) +void print_in_order_image_mask_data_t(AVLNode* root) { if (root != NULL) { print_in_order_image_mask_data_t(root->left); @@ -192,7 +192,7 @@ void print_in_order_image_mask_data_t(struct AVLNode* root) } // Check if ImageMaskData_t in AVLTree with ImageMaskData_t* data -bool_t in_image_mask_data_t_tree(struct AVLNode* root, ImageMaskData_t value) +bool_t in_image_mask_data_t_tree(AVLNode* root, ImageMaskData_t value) { if (root == NULL) { return FALSE; @@ -208,15 +208,15 @@ bool_t in_image_mask_data_t_tree(struct AVLNode* root, ImageMaskData_t value) // Filter out small masks // Assumption: Contiguous labeling -struct AVLNode* get_small_labels(struct AVLNode* removal_tree, struct AVLNode* label_tree, size_t min_area, size_t min_perimeter) +AVLNode* get_small_labels(AVLNode* removal_tree, AVLNode* label_tree, size_t min_area, size_t min_perimeter) { - struct AVLNode* return_tree = removal_tree; + AVLNode* return_tree = removal_tree; if (label_tree != NULL) { return_tree = get_small_labels(return_tree, label_tree->left, min_area, min_perimeter); - struct MaskData* node_data = (struct MaskData*)label_tree->data; + MaskData* node_data = (MaskData*)label_tree->data; if ((node_data->area < min_area) || (node_data->perimeter < min_perimeter)) { // Insert - struct Result result = avl_insert(return_tree, &node_data->label, (bool_t (*)(void*,void*))compare_image_mask_data_t); + Result result = avl_insert(return_tree, &node_data->label, (bool_t (*)(void*,void*))compare_image_mask_data_t); if (result.success) { return_tree = result.data; } @@ -227,9 +227,9 @@ struct AVLNode* get_small_labels(struct AVLNode* removal_tree, struct AVLNode* l } // Get mask label data -struct AVLNode* get_mask_data(ImageMaskData_t* masks, uint32_t width, uint32_t height) +AVLNode* get_mask_data(ImageMaskData_t* masks, uint32_t width, uint32_t height) { - struct AVLNode* root = NULL; + AVLNode* root = NULL; for (size_t y = 0; y < height; y++) { for (size_t x = 0; x < width; x++) { size_t coord = x + y*width; @@ -247,8 +247,8 @@ struct AVLNode* get_mask_data(ImageMaskData_t* masks, uint32_t width, uint32_t h // Filter out small masks in mask void filter_small_masks(ImageMaskData_t* masks, uint32_t width, uint32_t height, size_t min_area, size_t min_perimeter) { - struct AVLNode* root = get_mask_data(masks, width, height); - struct AVLNode* small_label_tree = NULL; + AVLNode* root = get_mask_data(masks, width, height); + AVLNode* small_label_tree = NULL; small_label_tree = get_small_labels(NULL, root, min_area, min_perimeter); for (size_t y = 0; y < height; y++) { for (size_t x = 0; x < width; x++) { diff --git a/lib/seg/util.c b/lib/seg/util.c index 2952952..6eee1a2 100644 --- a/lib/seg/util.c +++ b/lib/seg/util.c @@ -202,7 +202,7 @@ void closeup(ImageMaskData_t** mask, uint32_t width, uint32_t height, size_t num // Combine Label Masks // For all empty spaces in the destination, put the extra label if it exists // Allocates an array if destination is unallocated -struct ImageMask* combine_masks(struct ImageMask *destination, struct ImageMask *extra_labels) +ImageMask* combine_masks(ImageMask *destination, ImageMask *extra_labels) { if (destination == NULL) { destination = create_image_mask(extra_labels->width, extra_labels->height); @@ -220,7 +220,7 @@ struct ImageMask* combine_masks(struct ImageMask *destination, struct ImageMask // Process Tif File to Labels // width, height will be overwritten with image dimensions // starting_label_p will be incremented for each label found in the image -struct ImageMask* tif_to_labels(char* tif_file_name, uint32_t *width, uint32_t *height, ImageMaskData_t *starting_label_p) +ImageMask* tif_to_labels(char* tif_file_name, uint32_t *width, uint32_t *height, ImageMaskData_t *starting_label_p) { TIFFSetWarningHandler(TiffDummyHandler); //-TIFF-IMAGE-OPEN------------------------------- @@ -268,7 +268,7 @@ struct ImageMask* tif_to_labels(char* tif_file_name, uint32_t *width, uint32_t * //-FLOOD-FILL-SEGMENTATION----------------------- //-CONTIGUOUS-REGION-FINDING--------------------- - struct ImageMask *im_data = create_image_mask((size_t)*width, (size_t)*height); + ImageMask *im_data = create_image_mask((size_t)*width, (size_t)*height); if (im_data == NULL) { fprintf(stderr, "Memory allocation error\n"); free(image_data); @@ -316,13 +316,13 @@ struct ImageMask* tif_to_labels(char* tif_file_name, uint32_t *width, uint32_t * } // Convert mask to bitmap -struct bitmap_t* image_mask_data_to_bitmap(ImageMaskData_t* buffer, uint32_t width, uint32_t height) +Bitmap* image_mask_data_to_bitmap(ImageMaskData_t* buffer, uint32_t width, uint32_t height) { - struct pixel_t* out_buffer = (struct pixel_t*)calloc(width*height, sizeof(struct pixel_t)); + Pixel* out_buffer = (Pixel*)calloc(width*height, sizeof(Pixel)); if (out_buffer == NULL) { return NULL; } - struct bitmap_t* bitmap = (struct bitmap_t*)malloc(sizeof(struct bitmap_t)); + Bitmap* bitmap = (Bitmap*)malloc(sizeof(Bitmap)); if (bitmap == NULL) { free(out_buffer); return NULL; |