aboutsummaryrefslogtreecommitdiff
path: root/lib/seg
diff options
context:
space:
mode:
authorChristian C <cc@localhost>2025-03-23 15:34:48 -0700
committerChristian C <cc@localhost>2025-03-23 15:34:48 -0700
commit22c32ae8649e8540198942b33d4bab72c4ea7238 (patch)
tree946e173c4ab362ec88f21854e8613a21c330a6e1 /lib/seg
parent981e8bfd12f79cb469bb54a915230eda6dafab41 (diff)
Userspace types
Diffstat (limited to 'lib/seg')
-rw-r--r--lib/seg/mask_data.c82
-rw-r--r--lib/seg/util.c12
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;