# HG changeset patch # User imgteam # Date 1747037732 0 # Node ID a041e4e9d4496ce1740675efaa756ba117b3e0f5 # Parent 938e2358eb80f47be329334e1daae93615237fa4 planemo upload for repository https://github.com/BMCV/galaxy-image-analysis/tree/master/tools/binary2labelimage/ commit 48df7d9c58fb88e472caeb4d4a1e14170d79b643 diff -r 938e2358eb80 -r a041e4e9d449 2d_split_binaryimage_by_watershed.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/2d_split_binaryimage_by_watershed.py Mon May 12 08:15:32 2025 +0000 @@ -0,0 +1,33 @@ +import argparse +import sys + +import numpy as np +import skimage.io +import skimage.util +from scipy import ndimage as ndi +from skimage.feature import peak_local_max +from skimage.segmentation import watershed + + +if __name__ == "__main__": + parser = argparse.ArgumentParser(description='Split binaryimage by watershed') + parser.add_argument('input_file', type=argparse.FileType('r'), default=sys.stdin, help='input file') + parser.add_argument('out_file', type=argparse.FileType('w'), default=sys.stdin, help='out file (TIFF)') + parser.add_argument('min_distance', type=int, default=100, help='Minimum distance to next object') + args = parser.parse_args() + + img_in = skimage.io.imread(args.input_file.name) + distance = ndi.distance_transform_edt(img_in) + + local_max_indices = peak_local_max( + distance, + min_distance=args.min_distance, + labels=img_in, + ) + local_max_mask = np.zeros(img_in.shape, dtype=bool) + local_max_mask[tuple(local_max_indices.T)] = True + markers = ndi.label(local_max_mask)[0] + res = watershed(-distance, markers, mask=img_in) + + res = skimage.util.img_as_uint(res) + skimage.io.imsave(args.out_file.name, res, plugin="tifffile") diff -r 938e2358eb80 -r a041e4e9d449 binary2label.py --- a/binary2label.py Wed Dec 18 09:56:41 2019 +0000 +++ b/binary2label.py Mon May 12 08:15:32 2025 +0000 @@ -1,20 +1,27 @@ import argparse -import sys -import skimage.io -from skimage.measure import label -import numpy as np -import warnings -from PIL import Image -import skimage.util +import giatools +import scipy.ndimage as ndi +import tifffile + + +# Parse CLI parameters parser = argparse.ArgumentParser() -parser.add_argument('input_file', type=argparse.FileType('r'), default=sys.stdin, help='input file') -parser.add_argument('out_file', type=argparse.FileType('w'), default=sys.stdin, help='out file (TIFF)') +parser.add_argument('input', type=str, help='input file') +parser.add_argument('output', type=str, help='output file (TIFF)') args = parser.parse_args() - -img_in = skimage.io.imread(args.input_file.name) > 0 -res = label(img_in) -res = skimage.util.img_as_uint(res) + +# Read the input image with the original axes +img = giatools.Image.read(args.input) +img = img.normalize_axes_like( + img.original_axes, +) -res = Image.fromarray(res) -res.save(args.out_file.name, "tiff") +# Make sure the image is truly binary +img_arr_bin = (img.data > 0) + +# Perform the labeling +img.data = ndi.label(img_arr_bin)[0] + +# Write the result image (same axes as input image) +tifffile.imwrite(args.output, img.data, metadata=dict(axes=img.axes)) diff -r 938e2358eb80 -r a041e4e9d449 binary2label.xml --- a/binary2label.xml Wed Dec 18 09:56:41 2019 +0000 +++ b/binary2label.xml Mon May 12 08:15:32 2025 +0000 @@ -1,30 +1,83 @@ - - Converts Binary to Label Image + + + + creators.xml + 0.6 + 0 + + + + + + operation_3443 + + + galaxy_image_analysis + - scikit-image - tifffile + giatools + scipy - + + + + + + + + + + + + - - + + + + + + + + + + + + + + + + + + + + + + + + + + - **What it does** + This tool assigns each object a unique label. - This tool assigns every object an own grey value. + Individual objects are determined using connected component analysis, or distance transform and watershed. 10.1016/j.jbiotec.2017.07.019 diff -r 938e2358eb80 -r a041e4e9d449 creators.xml --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/creators.xml Mon May 12 08:15:32 2025 +0000 @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff -r 938e2358eb80 -r a041e4e9d449 test-data/galaxyIcon_noText.tif Binary file test-data/galaxyIcon_noText.tif has changed diff -r 938e2358eb80 -r a041e4e9d449 test-data/galaxyIcon_noText.tiff Binary file test-data/galaxyIcon_noText.tiff has changed diff -r 938e2358eb80 -r a041e4e9d449 test-data/in.tiff Binary file test-data/in.tiff has changed diff -r 938e2358eb80 -r a041e4e9d449 test-data/label.tif Binary file test-data/label.tif has changed diff -r 938e2358eb80 -r a041e4e9d449 test-data/label.tiff Binary file test-data/label.tiff has changed diff -r 938e2358eb80 -r a041e4e9d449 test-data/out.tiff Binary file test-data/out.tiff has changed diff -r 938e2358eb80 -r a041e4e9d449 test-data/uint8_z12_x11_y10-output.tiff Binary file test-data/uint8_z12_x11_y10-output.tiff has changed diff -r 938e2358eb80 -r a041e4e9d449 test-data/uint8_z12_x11_y10.tiff Binary file test-data/uint8_z12_x11_y10.tiff has changed