Mercurial > repos > imgteam > binary2labelimage
changeset 5:7f8102bdbfa1 draft default tip
planemo upload for repository https://github.com/BMCV/galaxy-image-analysis/tree/master/tools/binary2labelimage/ commit 48df7d9c58fb88e472caeb4d4a1e14170d79b643
author | imgteam |
---|---|
date | Mon, 12 May 2025 08:15:44 +0000 |
parents | 984358e43242 |
children | |
files | 2d_split_binaryimage_by_watershed.py binary2label.py binary2label.xml creators.xml test-data/galaxyIcon_noText.tif test-data/galaxyIcon_noText.tiff test-data/in.tif test-data/in.tiff test-data/label.tif test-data/label.tiff test-data/out.tif test-data/out.tiff test-data/uint8_z12_x11_y10-output.tiff test-data/uint8_z12_x11_y10.tiff |
diffstat | 14 files changed, 85 insertions(+), 30 deletions(-) [+] |
line wrap: on
line diff
--- a/2d_split_binaryimage_by_watershed.py Tue Nov 14 08:27:27 2023 +0000 +++ b/2d_split_binaryimage_by_watershed.py Mon May 12 08:15:44 2025 +0000 @@ -1,11 +1,12 @@ 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.morphology import watershed +from skimage.segmentation import watershed if __name__ == "__main__": @@ -17,11 +18,15 @@ img_in = skimage.io.imread(args.input_file.name) distance = ndi.distance_transform_edt(img_in) - local_maxi = peak_local_max(distance, - indices=False, - min_distance=args.min_distance, - labels=img_in) - markers = ndi.label(local_maxi)[0] + + 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)
--- a/binary2label.py Tue Nov 14 08:27:27 2023 +0000 +++ b/binary2label.py Mon May 12 08:15:44 2025 +0000 @@ -1,19 +1,27 @@ import argparse -import sys + +import giatools +import scipy.ndimage as ndi +import tifffile -import skimage.io -import skimage.util -from PIL import Image -from skimage.measure import label +# 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))
--- a/binary2label.xml Tue Nov 14 08:27:27 2023 +0000 +++ b/binary2label.xml Mon May 12 08:15:44 2025 +0000 @@ -1,9 +1,13 @@ -<tool id="ip_binary_to_labelimage" name="Convert binary image to label map" version="@TOOL_VERSION@+galaxy@VERSION_SUFFIX@"> +<tool id="ip_binary_to_labelimage" name="Convert binary image to label map" version="@TOOL_VERSION@+galaxy@VERSION_SUFFIX@"> <description></description> <macros> - <token name="@TOOL_VERSION@">0.5</token> + <import>creators.xml</import> + <token name="@TOOL_VERSION@">0.6</token> <token name="@VERSION_SUFFIX@">0</token> </macros> + <creator> + <expand macro="creators/bmcv"/> + </creator> <edam_operations> <edam_operation>operation_3443</edam_operation> </edam_operations> @@ -11,11 +15,8 @@ <xref type="bio.tools">galaxy_image_analysis</xref> </xrefs> <requirements> - <requirement type="package" version="0.14.2">scikit-image</requirement> - <requirement type="package" version="0.15.1">tifffile</requirement> - <requirement type="package" version="1.15.4">numpy</requirement> - <requirement type="package" version="5.3.0">pillow</requirement> - <requirement type="package" version="1.2.1">scipy</requirement> + <requirement type="package" version="0.4.0">giatools</requirement> + <requirement type="package" version="1.12.0">scipy</requirement> </requirements> <command detect_errors="aggressive"> <![CDATA[ @@ -30,7 +31,7 @@ <param name="input" type="data" format="tiff,png,jpg,bmp" label="Binary image"/> <conditional name="mode"> <param name="mode_selector" type="select" label="Mode"> - <option value="cca">Connected component analysis</option> + <option value="cca" selected="true">Connected component analysis</option> <option value="watershed">Watershed transform</option> </param> <when value="cca"> @@ -45,19 +46,32 @@ </outputs> <tests> <test> - <param name="input" value="galaxyIcon_noText.tif" /> + <param name="input" value="galaxyIcon_noText.tiff" /> <conditional name="mode"> <param name="mode_selector" value="cca" /> </conditional> - <output name="output" value="label.tif" ftype="tiff" compare="sim_size"/> + <output name="output" value="label.tiff" ftype="tiff" compare="image_diff"/> </test> <test> - <param name="input" value="in.tif"/> + <param name="input" value="in.tiff"/> <conditional name="mode"> <param name="mode_selector" value="watershed" /> <param name="min_distance" value="10" /> </conditional> - <output name="output" value="out.tif" ftype="tiff" compare="sim_size"/> + <output name="output" value="out.tiff" ftype="tiff" compare="image_diff"/> + </test> + <test> + <param name="input" value="uint8_z12_x11_y10.tiff"/> + <conditional name="mode"> + <param name="mode_selector" value="cca" /> + </conditional> + <output name="output" value="uint8_z12_x11_y10-output.tiff" ftype="tiff" compare="image_diff"> + <assert_contents> + <has_image_width width="11"/> + <has_image_height height="10"/> + <has_image_depth depth="12"/> + </assert_contents> + </output> </test> </tests> <help>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/creators.xml Mon May 12 08:15:44 2025 +0000 @@ -0,0 +1,28 @@ +<macros> + + <xml name="creators/bmcv"> + <organization name="Biomedical Computer Vision Group, Heidelberg Universtiy" alternateName="BMCV" url="http://www.bioquant.uni-heidelberg.de/research/groups/biomedical_computer_vision.html" /> + <yield /> + </xml> + + <xml name="creators/rmassei"> + <person givenName="Riccardo" familyName="Massei"/> + <yield/> + </xml> + + <xml name="creators/alliecreason"> + <person givenName="Allison" familyName="Creason"/> + <yield/> + </xml> + + <xml name="creators/bugraoezdemir"> + <person givenName="Bugra" familyName="Oezdemir"/> + <yield/> + </xml> + + <xml name="creators/thawn"> + <person givenName="Till" familyName="Korten"/> + <yield/> + </xml> + +</macros>