diff options
author | Christian C <cc@localhost> | 2025-04-01 17:38:32 -0700 |
---|---|---|
committer | Christian C <cc@localhost> | 2025-04-01 17:38:32 -0700 |
commit | a18cea2fef7aa1545c9a984b60919541b26a6f84 (patch) | |
tree | d1ab991e28b701bdfdc9035704389ad6c57391c9 /lib/seg/mask_data.c | |
parent | 2bc54ac42b831a7dfcba26c2d12ba002f80a5e40 (diff) |
Clang Format
Diffstat (limited to 'lib/seg/mask_data.c')
-rw-r--r-- | lib/seg/mask_data.c | 122 |
1 files changed, 54 insertions, 68 deletions
diff --git a/lib/seg/mask_data.c b/lib/seg/mask_data.c index d1713e2..144c7ca 100644 --- a/lib/seg/mask_data.c +++ b/lib/seg/mask_data.c @@ -4,9 +4,8 @@ #include <stdio.h> // Allocate Mask Data for Label -MaskData* create_mask_data(MaskData_t label) -{ - MaskData *data = (MaskData*)malloc(sizeof(MaskData)); +MaskData *create_mask_data(MaskData_t label) { + MaskData *data = (MaskData *)malloc(sizeof(MaskData)); data->label = label; data->area = 0; data->perimeter = 0; @@ -14,79 +13,68 @@ MaskData* create_mask_data(MaskData_t label) } // Compare mask data labels -bool_t compare_labels(MaskData* left, MaskData* right) -{ +bool_t compare_labels(MaskData *left, MaskData *right) { return left->label < right->label; } // Create AVL Mask node -AVLNode* create_avl_mask_node(MaskData* data) -{ - return create_avl_node((void*)data, (AvlComparator)compare_labels); +AVLNode *create_avl_mask_node(MaskData *data) { + return create_avl_node((void *)data, (AvlComparator)compare_labels); } // Insert MaskData into the AVL Tree -Result insert_mask(AVLNode* node, MaskData* data) -{ - return avl_insert(node, (void*)data, (AvlComparator)compare_labels); +Result insert_mask(AVLNode *node, MaskData *data) { + return avl_insert(node, (void *)data, (AvlComparator)compare_labels); } // Allocate a label's Mask data in a tree // If it already exists, skip the allocation -AVLNode* insert_mask_alloc(AVLNode* node, MaskData_t label) -{ - MaskData* data = create_mask_data(label); +AVLNode *insert_mask_alloc(AVLNode *node, MaskData_t label) { + MaskData *data = create_mask_data(label); Result result = insert_mask(node, data); if (!result.success) { free(data); } - return (AVLNode*)result.data; + return (AVLNode *)result.data; } // Print AVL Node Mask Data Label -void print_label(AVLNode* root) -{ +void print_label(AVLNode *root) { if (root != NULL) { print_label(root->left); - 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(AVLNode* root, MaskData_t label) -{ +bool_t increase_label_area(AVLNode *root, MaskData_t label) { if (root == NULL) { return FALSE; } - MaskData* data = (MaskData*)root->data; + MaskData *data = (MaskData *)root->data; if (data->label == label) { data->area++; - } - else if (data->label > label) { + } else if (data->label > label) { return increase_label_area(root->left, label); - } - else if (data->label < label) { + } else if (data->label < label) { return increase_label_area(root->right, label); } return TRUE; } // Increase the label's perimeter -bool_t increase_label_perimeter(AVLNode* root, MaskData_t label) -{ +bool_t increase_label_perimeter(AVLNode *root, MaskData_t label) { if (root == NULL) { return FALSE; } - MaskData* data = (MaskData*)root->data; + MaskData *data = (MaskData *)root->data; if (data->label == label) { data->perimeter++; - } - else if (data->label > label) { + } else if (data->label > label) { return increase_label_perimeter(root->left, label); - } - else if (data->label < label) { + } else if (data->label < label) { return increase_label_perimeter(root->right, label); } return TRUE; @@ -94,9 +82,8 @@ bool_t increase_label_perimeter(AVLNode* root, MaskData_t label) // Increase the label's area // Create an AVL node if it doesn't exist -AVLNode* increase_label_area_alloc(AVLNode* root, MaskData_t label) -{ - AVLNode* new_root = root; +AVLNode *increase_label_area_alloc(AVLNode *root, MaskData_t label) { + AVLNode *new_root = root; bool_t success = increase_label_area(new_root, label); if (success == FALSE) { new_root = insert_mask_alloc(new_root, label); @@ -107,9 +94,8 @@ AVLNode* increase_label_area_alloc(AVLNode* root, MaskData_t label) // Increase the label's perimeter // Create an AVL node if it doesn't exist -AVLNode* increase_label_perimeter_alloc(AVLNode* root, MaskData_t label) -{ - AVLNode* new_root = root; +AVLNode *increase_label_perimeter_alloc(AVLNode *root, MaskData_t label) { + AVLNode *new_root = root; bool_t success = increase_label_perimeter(new_root, label); if (success == FALSE) { new_root = insert_mask_alloc(new_root, label); @@ -119,30 +105,27 @@ AVLNode* increase_label_perimeter_alloc(AVLNode* root, MaskData_t label) } // Comparison of MaskData_ts -bool_t compare_image_mask_data_t(MaskData_t* s1, MaskData_t* s2) -{ +bool_t compare_image_mask_data_t(MaskData_t *s1, MaskData_t *s2) { return *s1 < *s2; } // In-order traversal print pointer -void print_in_order_image_mask_data_t(AVLNode* root) -{ +void print_in_order_image_mask_data_t(AVLNode *root) { if (root != NULL) { print_in_order_image_mask_data_t(root->left); - printf("%d ", *((MaskData_t*)root->data)); + printf("%d ", *((MaskData_t *)root->data)); print_in_order_image_mask_data_t(root->right); } } // Check if MaskData_t in AVLTree with MaskData_t* data -bool_t in_image_mask_data_t_tree(AVLNode* root, MaskData_t value) -{ +bool_t in_image_mask_data_t_tree(AVLNode *root, MaskData_t value) { if (root == NULL) { return FALSE; } - if (*((MaskData_t*)root->data) == value) { + if (*((MaskData_t *)root->data) == value) { return TRUE; - } else if (value < *((MaskData_t*)root->data)) { + } else if (value < *((MaskData_t *)root->data)) { return in_image_mask_data_t_tree(root->left, value); } else { return in_image_mask_data_t_tree(root->right, value); @@ -151,37 +134,41 @@ bool_t in_image_mask_data_t_tree(AVLNode* root, MaskData_t value) // Filter out small masks // Assumption: Contiguous labeling -AVLNode* get_small_labels(AVLNode* removal_tree, AVLNode* label_tree, size_t min_area, size_t min_perimeter) -{ - AVLNode* return_tree = removal_tree; +AVLNode *get_small_labels(AVLNode *removal_tree, AVLNode *label_tree, + size_t min_area, size_t min_perimeter) { + AVLNode *return_tree = removal_tree; if (label_tree != NULL) { - return_tree = get_small_labels(return_tree, label_tree->left, min_area, min_perimeter); - MaskData* node_data = (MaskData*)label_tree->data; - if ((node_data->area < min_area) || (node_data->perimeter < min_perimeter)) { + return_tree = get_small_labels(return_tree, label_tree->left, min_area, + min_perimeter); + MaskData *node_data = (MaskData *)label_tree->data; + if ((node_data->area < min_area) || + (node_data->perimeter < min_perimeter)) { // Insert - 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; + return_tree = result.data; } } - return_tree = get_small_labels(return_tree, label_tree->right, min_area, min_perimeter); + return_tree = get_small_labels(return_tree, label_tree->right, min_area, + min_perimeter); } return return_tree; } // Get mask label data -AVLNode *get_mask_data(Mask *mask) -{ +AVLNode *get_mask_data(Mask *mask) { uint32_t width = mask->width; uint32_t height = mask->height; - AVLNode* root = NULL; + AVLNode *root = NULL; for (size_t y = 0; y < height; y++) { for (size_t x = 0; x < width; x++) { if (mask->image[y][x] != 0) { - root = increase_label_area_alloc(root, mask->image[y][x]); - if (is_on_mask_boundary(mask, x, y)) { - increase_label_perimeter(root, mask->image[y][x]); - } + root = increase_label_area_alloc(root, mask->image[y][x]); + if (is_on_mask_boundary(mask, x, y)) { + increase_label_perimeter(root, mask->image[y][x]); + } } } } @@ -189,17 +176,16 @@ AVLNode *get_mask_data(Mask *mask) } // Filter out small masks in mask -void filter_small_masks(Mask *mask, size_t min_area, size_t min_perimeter) -{ +void filter_small_masks(Mask *mask, size_t min_area, size_t min_perimeter) { uint32_t width = mask->width; uint32_t height = mask->height; - AVLNode* root = get_mask_data(mask); - AVLNode* small_label_tree = NULL; + AVLNode *root = get_mask_data(mask); + 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++) { if (in_image_mask_data_t_tree(small_label_tree, mask->image[y][x])) { - mask->image[y][x] = 0; + mask->image[y][x] = 0; } } } |