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>
Binary file test-data/galaxyIcon_noText.tif has changed
Binary file test-data/galaxyIcon_noText.tiff has changed
Binary file test-data/in.tif has changed
Binary file test-data/in.tiff has changed
Binary file test-data/label.tif has changed
Binary file test-data/label.tiff has changed
Binary file test-data/out.tif has changed
Binary file test-data/out.tiff has changed
Binary file test-data/uint8_z12_x11_y10-output.tiff has changed
Binary file test-data/uint8_z12_x11_y10.tiff has changed