# HG changeset patch # User imgteam # Date 1729162034 0 # Node ID ba2b1a6f1b8423342abb1a755a77fa315b66728f # Parent ac497ba6819dfa884ae0c42e2f6875403ff0c0c2 planemo upload for repository https://github.com/BMCV/galaxy-image-analysis/tree/master/tools/scale_image/ commit c55311bbe4c3d7e0039c77785509a150864bb272 diff -r ac497ba6819d -r ba2b1a6f1b84 creators.xml --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/creators.xml Thu Oct 17 10:47:14 2024 +0000 @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff -r ac497ba6819d -r ba2b1a6f1b84 scale_image.py --- a/scale_image.py Mon Jul 22 04:59:15 2019 -0400 +++ b/scale_image.py Thu Oct 17 10:47:14 2024 +0000 @@ -1,37 +1,51 @@ import argparse import sys + +import giatools.io +import numpy as np import skimage.io import skimage.transform -import scipy.misc +import skimage.util from PIL import Image - -def scale_image(input_file, output_file, scale, order=1): - Image.MAX_IMAGE_PIXELS = 50000*50000 - img_in = skimage.io.imread(input_file) - if order == 0: - interp = 'nearest' - elif order == 1: - interp = 'bilinear' - elif order == 2: - interp = 'bicubic' + +def scale_image(input_file, output_file, scale, order, antialias): + Image.MAX_IMAGE_PIXELS = 50000 * 50000 + im = giatools.io.imread(input_file) + + # Parse `--scale` argument if ',' in scale: - scale = scale[1:-1].split(',') - scale = [int(i) for i in scale] - elif '.' in scale: + scale = [float(s.strip()) for s in scale.split(',')] + assert len(scale) <= im.ndim, f'Image has {im.ndim} axes, but scale factors were given for {len(scale)} axes.' + scale = scale + [1] * (im.ndim - len(scale)) + + else: scale = float(scale) - else: - scale = int(scale) - res = scipy.misc.imresize(img_in, scale, interp=interp) + + # For images with 3 or more axes, the last axis is assumed to correspond to channels + if im.ndim >= 3: + scale = [scale] * (im.ndim - 1) + [1] + + # Do the scaling + res = skimage.transform.rescale(im, scale, order, anti_aliasing=antialias, preserve_range=True) + + # Preserve the `dtype` so that both brightness and range of values is preserved + if res.dtype != im.dtype: + if np.issubdtype(im.dtype, np.integer): + res = res.round() + res = res.astype(im.dtype) + + # Save result skimage.io.imsave(output_file, res) if __name__ == "__main__": 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 (PNG)') - parser.add_argument('scale', type=str, help='fraction scaling factor(float), percentage scaling factor(int), output size(tuple(height,width))') # integer option not implemented in galaxy wrapper - parser.add_argument('order', type=int, default=1, help='interpolation method') + parser.add_argument('input_file', type=argparse.FileType('r'), default=sys.stdin) + parser.add_argument('out_file', type=argparse.FileType('w'), default=sys.stdin) + parser.add_argument('--scale', type=str, required=True) + parser.add_argument('--order', type=int, required=True) + parser.add_argument('--antialias', default=False, action='store_true') args = parser.parse_args() - scale_image(args.input_file.name, args.out_file.name, args.scale, args.order) + scale_image(args.input_file.name, args.out_file.name, args.scale, args.order, args.antialias) diff -r ac497ba6819d -r ba2b1a6f1b84 scale_image.xml --- a/scale_image.xml Mon Jul 22 04:59:15 2019 -0400 +++ b/scale_image.xml Thu Oct 17 10:47:14 2024 +0000 @@ -1,62 +1,101 @@ - - Scales image + + with scikit-image + + creators.xml + tests.xml + 0.18.3 + 2 + + + + + + operation_3443 + + + scikit-image + scikit-image + - pillow - scikit-image - numpy - scipy - tifffile + scikit-image + pillow + numpy + tifffile + giatools - - - + python '$__tool_directory__/scale_image.py' '$input' + + ./output.${input.ext} + + --scale '$scale' + --order $order + $antialias + + && mv ./output.${input.ext} ./output + + ]]> - - - - - - - - - - - - - - - + + + + - + + - - - - + + + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - **What it does** + + **Scales an image using one or more scaling factors.** - This tool scales an image using the scaling factor. + The image is rescaled uniformly along all axes, or anistropically if multiple scale factors are given. + + This operation preserves both the brightness of the image, and the range of values. + 10.1016/j.jbiotec.2017.07.019 diff -r ac497ba6819d -r ba2b1a6f1b84 test-data/anisotropic.png Binary file test-data/anisotropic.png has changed diff -r ac497ba6819d -r ba2b1a6f1b84 test-data/input1_binary_rgb.png Binary file test-data/input1_binary_rgb.png has changed diff -r ac497ba6819d -r ba2b1a6f1b84 test-data/input2_normalized.tiff Binary file test-data/input2_normalized.tiff has changed diff -r ac497ba6819d -r ba2b1a6f1b84 test-data/input3_not_normalized.tiff Binary file test-data/input3_not_normalized.tiff has changed diff -r ac497ba6819d -r ba2b1a6f1b84 test-data/normalized.tiff Binary file test-data/normalized.tiff has changed diff -r ac497ba6819d -r ba2b1a6f1b84 test-data/not_normalized.tiff Binary file test-data/not_normalized.tiff has changed diff -r ac497ba6819d -r ba2b1a6f1b84 test-data/out.png Binary file test-data/out.png has changed diff -r ac497ba6819d -r ba2b1a6f1b84 test-data/out2.png Binary file test-data/out2.png has changed diff -r ac497ba6819d -r ba2b1a6f1b84 test-data/sample1.png Binary file test-data/sample1.png has changed diff -r ac497ba6819d -r ba2b1a6f1b84 test-data/uniform.png Binary file test-data/uniform.png has changed diff -r ac497ba6819d -r ba2b1a6f1b84 test-data/uniform_binary.png Binary file test-data/uniform_binary.png has changed diff -r ac497ba6819d -r ba2b1a6f1b84 tests.xml --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tests.xml Thu Oct 17 10:47:14 2024 +0000 @@ -0,0 +1,95 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +