Mercurial > repos > imgteam > image_math
changeset 3:8229f7f69d08 draft default tip
planemo upload for repository https://github.com/BMCV/galaxy-image-analysis/tree/master/tools/image_math commit cddd14dcfe71bb7a7e77aaf09bd2c5535e1dd643
| author | imgteam |
|---|---|
| date | Fri, 06 Mar 2026 17:31:58 +0000 |
| parents | 48fa3ac55df2 |
| children | |
| files | creators.xml image_math.py image_math.xml test-data/input1_times_2_uint8.tiff |
| diffstat | 4 files changed, 121 insertions(+), 11 deletions(-) [+] |
line wrap: on
line diff
--- a/creators.xml Wed Apr 24 08:12:29 2024 +0000 +++ b/creators.xml Fri Mar 06 17:31:58 2026 +0000 @@ -5,6 +5,16 @@ <yield /> </xml> + <xml name="creators/kostrykin"> + <person givenName="Leonid" familyName="Kostrykin"/> + <yield/> + </xml> + + <xml name="creators/rmassei"> + <person givenName="Riccardo" familyName="Massei"/> + <yield/> + </xml> + <xml name="creators/alliecreason"> <person givenName="Allison" familyName="Creason"/> <yield/> @@ -19,5 +29,15 @@ <person givenName="Till" familyName="Korten"/> <yield/> </xml> - + + <xml name="creators/pavanvidem"> + <person givenName="Pavan" familyName="Videm"/> + <yield/> + </xml> + + <xml name="creators/tuncK"> + <person givenName="Tunc" familyName="Kayikcioglu"/> + <yield/> + </xml> + </macros>
--- a/image_math.py Wed Apr 24 08:12:29 2024 +0000 +++ b/image_math.py Fri Mar 06 17:31:58 2026 +0000 @@ -2,9 +2,8 @@ import ast import operator -import giatools.io +import giatools import numpy as np -import skimage.io supported_operators = { @@ -70,6 +69,7 @@ parser = argparse.ArgumentParser() parser.add_argument('--expression', type=str, required=True) + parser.add_argument('--dtype', type=str, default=None) parser.add_argument('--output', type=str, required=True) parser.add_argument('--input', default=list(), action='append', required=True) args = parser.parse_args() @@ -78,9 +78,9 @@ im_shape = None for input in args.input: name, filepath = input.split(':') - im = giatools.io.imread(filepath) + im = giatools.Image.read(filepath) assert name not in inputs, 'Input name "{name}" is ambiguous.' - inputs[name] = im + inputs[name] = im.data if im_shape is None: im_shape = im.shape else: @@ -88,4 +88,16 @@ result = eval_expression(args.expression, inputs) - skimage.io.imsave(args.output, result) + # Perform explicit `dtype` conversion + if args.dtype: + if args.dtype.startswith('uint'): + result = result.clip(0, np.inf) + result = result.astype(args.dtype) + + # Write result image (preserve metadata from last input image) + im.data = result + im.normalize_axes_like( + im.original_axes, + ).write( + args.output, + )
--- a/image_math.xml Wed Apr 24 08:12:29 2024 +0000 +++ b/image_math.xml Fri Mar 06 17:31:58 2026 +0000 @@ -3,26 +3,32 @@ <macros> <import>creators.xml</import> <import>tests.xml</import> - <token name="@TOOL_VERSION@">1.26.4</token> - <token name="@VERSION_SUFFIX@">2</token> + <token name="@TOOL_VERSION@">2.3.5</token> + <token name="@VERSION_SUFFIX@">0</token> </macros> <creator> <expand macro="creators/bmcv"/> + <expand macro="creators/kostrykin"/> </creator> <edam_operations> <edam_operation>operation_3443</edam_operation> </edam_operations> <requirements> <requirement type="package" version="@TOOL_VERSION@">numpy</requirement> - <requirement type="package" version="0.22.0">scikit-image</requirement> - <requirement type="package" version="0.1">giatools</requirement> + <requirement type="package" version="0.7.3">giatools</requirement> </requirements> + <required_files> + <include type="glob" path="*.py"/> + </required_files> <command><![CDATA[ ## Inputs python '$__tool_directory__/image_math.py' --expression='$expression' + #if '$dtype' != '': + --dtype='$dtype' + #end if #for $item in $inputs: --input='$item.name:$item.image' #end for @@ -35,7 +41,19 @@ </command> <inputs> <param argument="--expression" type="text" label="Expression" optional="false"> - <validator type="regex">^[a-zA-Z0-9-_\*\+ \(\)/]+$</validator> + <validator type="regex">^[a-zA-Z0-9-_\*\+ \(\)/\.]+$</validator> + </param> + <param name="dtype" type="select" label="Data type of the produced TIFF image"> + <option value="" selected="true">Determine automatically</option> + <option value="float16">16-bit floating point</option> + <option value="float32">32-bit floating point</option> + <option value="float64">64-bit floating point</option> + <option value="int8">8-bit signed integer</option> + <option value="int16">16-bit signed integer</option> + <option value="int32">32-bit signed integer</option> + <option value="uint8">8-bit unsigned integer</option> + <option value="uint16">16-bit unsigned integer</option> + <option value="uint32">32-bit unsigned integer</option> </param> <repeat name="inputs" title="Input images" min="1"> <param name="image" type="data" format="png,tiff" label="Image" /> @@ -50,6 +68,14 @@ <tests> <!-- Multiplication with a scalar --> <test> + <!-- + GIA204: :relax_indent: + python '$__tool_directory__/image_math.py' + ––expression='input1 * 2' + ––dtype='' + ––input='input1:input1.tiff' + ––output='./result.tiff' + --> <param name="expression" value="input1 * 2" /> <repeat name="inputs"> <param name="image" value="input1.tiff" /> @@ -59,6 +85,14 @@ </test> <!-- Unary negation operator --> <test> + <!-- + GIA204: :relax_indent: + python '$__tool_directory__/image_math.py' + ––expression='-input1' + ––dtype='' + ––input='input1:input1.tiff' + ––output='./result.tiff' + --> <param name="expression" value="-input1" /> <repeat name="inputs"> <param name="image" value="input1.tiff" /> @@ -68,6 +102,15 @@ </test> <!-- Binary addition, neutral element, addition with scalar --> <test> + <!-- + GIA204: :relax_indent: + python '$__tool_directory__/image_math.py' + ––expression='input1 + input2 + 1' + ––dtype='' + ––input='input1:input1.tiff' + ––input='input2:minus_input1.tiff' + ––output='./result.tiff' + --> <param name="expression" value="input1 + input2 + 1" /> <repeat name="inputs"> <param name="image" value="input1.tiff" /> @@ -81,6 +124,15 @@ </test> <!-- Parentheses --> <test> + <!-- + GIA204: :relax_indent: + python '$__tool_directory__/image_math.py' + ––expression='(input1 + input2) / 2' + ––dtype='' + ––input='input1:input1.tiff' + ––input='input2:ones.tiff' + ––output='./result.tiff' + --> <param name="expression" value="(input1 + input2) / 2" /> <repeat name="inputs"> <param name="image" value="input1.tiff" /> @@ -94,6 +146,14 @@ </test> <!-- Abs --> <test> + <!-- + GIA204: :relax_indent: + python '$__tool_directory__/image_math.py' + ––expression='abs(input)' + ––dtype='' + ––input='input:input1.tiff' + ––output='./result.tiff' + --> <param name="expression" value="abs(input)" /> <repeat name="inputs"> <param name="image" value="input1.tiff" /> @@ -101,6 +161,24 @@ </repeat> <expand macro="tests/intensity_image_diff" name="result" value="input1_abs.tiff" ftype="tiff"/> </test> + <!-- Decimal, conversion to explicit `dtype` --> + <test> + <!-- + GIA204: :relax_indent: + python '$__tool_directory__/image_math.py' + ––expression='input1 / 0.5' + ––dtype='uint8' + ––input='input1:input1.tiff' + ––output='./result.tiff' + --> + <param name="expression" value="input1 / 0.5" /> + <param name="dtype" value="uint8" /> + <repeat name="inputs"> + <param name="image" value="input1.tiff" /> + <param name="name" value="input1" /> + </repeat> + <expand macro="tests/intensity_image_diff" name="result" value="input1_times_2_uint8.tiff" ftype="tiff"/> + </test> </tests> <help>
