aboutsummaryrefslogtreecommitdiff
path: root/lib/seg/util.c
diff options
context:
space:
mode:
authorChristian C <cc@localhost>2025-03-22 23:03:04 -0700
committerChristian C <cc@localhost>2025-03-22 23:03:04 -0700
commitb12c8440da356cbf4deb91f9598d84852e9d8dce (patch)
tree8bb8abe01244d5ef2afefc7485c1157acd14c277 /lib/seg/util.c
parentca1d8c3194f679d1901ea83ff954c82114d5559b (diff)
Partial Conversion #1
Diffstat (limited to 'lib/seg/util.c')
-rw-r--r--lib/seg/util.c43
1 files changed, 33 insertions, 10 deletions
diff --git a/lib/seg/util.c b/lib/seg/util.c
index 4290d46..2952952 100644
--- a/lib/seg/util.c
+++ b/lib/seg/util.c
@@ -202,16 +202,15 @@ 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
-ImageMaskData_t* combine_masks(ImageMaskData_t *destination, ImageMaskData_t *extra_labels, uint32_t width, uint32_t height)
+struct ImageMask* combine_masks(struct ImageMask *destination, struct ImageMask *extra_labels)
{
if (destination == NULL) {
- destination = (ImageMaskData_t*)calloc(width*height, sizeof(ImageMaskData_t));
+ destination = create_image_mask(extra_labels->width, extra_labels->height);
}
- for (size_t y = 0; y < height; y++) {
- for (size_t x = 0; x < width; x++) {
- size_t coord = x + y*width;
- if (destination[coord] == 0) {
- destination[coord] = extra_labels[coord];
+ for (size_t y = 0; y < destination->height; y++) {
+ for (size_t x = 0; x < destination->width; x++) {
+ if (destination->mask[y][x] == 0) {
+ destination->mask[y][x] = extra_labels->mask[y][x];
}
}
}
@@ -221,7 +220,7 @@ ImageMaskData_t* combine_masks(ImageMaskData_t *destination, ImageMaskData_t *ex
// 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
-ImageMaskData_t* tif_to_labels(char* tif_file_name, uint32_t *width, uint32_t *height, ImageMaskData_t *starting_label_p)
+struct ImageMask* tif_to_labels(char* tif_file_name, uint32_t *width, uint32_t *height, ImageMaskData_t *starting_label_p)
{
TIFFSetWarningHandler(TiffDummyHandler);
//-TIFF-IMAGE-OPEN-------------------------------
@@ -269,7 +268,29 @@ ImageMaskData_t* tif_to_labels(char* tif_file_name, uint32_t *width, uint32_t *h
//-FLOOD-FILL-SEGMENTATION-----------------------
//-CONTIGUOUS-REGION-FINDING---------------------
- ImageMaskData_t *labels = NULL;
+ struct 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);
+ TIFFClose(tif);
+ return NULL;
+ }
+ if (im_data->mask == NULL) {
+ fprintf(stderr, "Memory allocation error\n");
+ free_image_mask(im_data);
+ free(image_data);
+ TIFFClose(tif);
+ return NULL;
+ }
+ if (im_data->mask[0] == NULL) {
+ fprintf(stderr, "Memory allocation error\n");
+ free_image_mask(im_data);
+ free(image_data);
+ TIFFClose(tif);
+ return NULL;
+ }
+ ImageMaskData_t *labels = im_data->mask[0];
+ /*
labels = (ImageMaskData_t*)calloc((*width)*(*height),sizeof(ImageMaskData_t));
if (labels == NULL) {
fprintf(stderr, "Memory allocation error\n");
@@ -277,6 +298,7 @@ ImageMaskData_t* tif_to_labels(char* tif_file_name, uint32_t *width, uint32_t *h
TIFFClose(tif);
return NULL;
}
+ */
// Flood fill on each pixel
// Increase label for each success
for (size_t y = 0; y < *height; y++) {
@@ -289,7 +311,8 @@ ImageMaskData_t* tif_to_labels(char* tif_file_name, uint32_t *width, uint32_t *h
}
free(image_data);
TIFFClose(tif);
- return labels;
+ return im_data;
+ //return labels;
}
// Convert mask to bitmap