Mercurial > repos > imgteam > split_image
comparison split.py @ 1:73d7a4ffc03d draft default tip
planemo upload for repository https://github.com/BMCV/galaxy-image-analysis/tree/master/tools/split_image/ commit 6152e9fafda27f76c1e96e533143f86fe605e2da
| author | imgteam | 
|---|---|
| date | Sat, 12 Apr 2025 15:05:29 +0000 | 
| parents | 6b42bec75e69 | 
| children | 
   comparison
  equal
  deleted
  inserted
  replaced
| 0:6b42bec75e69 | 1:73d7a4ffc03d | 
|---|---|
| 16 | 16 | 
| 17 # Validate and normalize input parameters | 17 # Validate and normalize input parameters | 
| 18 assert len(args.axis) == 1, 'Axis input must be a single character.' | 18 assert len(args.axis) == 1, 'Axis input must be a single character.' | 
| 19 axis = args.axis.replace('S', 'C') | 19 axis = args.axis.replace('S', 'C') | 
| 20 | 20 | 
| 21 # Read input image as TZYXC | 21 # Read input image with normalized axes | 
| 22 img_in = giatools.Image.read(args.input) | 22 img_in = giatools.Image.read(args.input) | 
| 23 | 23 | 
| 24 # Determine the axis to split along | 24 # Determine the axis to split along | 
| 25 axis_pos = img_in.axes.index(axis) | 25 axis_pos = img_in.axes.index(axis) | 
| 26 | 26 | 
| 29 decimals = math.ceil(math.log10(1 + arr.shape[0])) | 29 decimals = math.ceil(math.log10(1 + arr.shape[0])) | 
| 30 output_filename_pattern = f'{args.output}/%0{decimals}d.tiff' | 30 output_filename_pattern = f'{args.output}/%0{decimals}d.tiff' | 
| 31 for img_idx, img in enumerate(arr): | 31 for img_idx, img in enumerate(arr): | 
| 32 img = np.moveaxis(img[None], 0, axis_pos) | 32 img = np.moveaxis(img[None], 0, axis_pos) | 
| 33 | 33 | 
| 34 # Construct the output image, remove axes added by normalization | |
| 35 img_out = giatools.Image( | |
| 36 data=img, | |
| 37 axes=img_in.axes, | |
| 38 ).squeeze_like( | |
| 39 img_in.original_axes, | |
| 40 ) | |
| 41 | |
| 34 # Optionally, squeeze the image | 42 # Optionally, squeeze the image | 
| 35 if args.squeeze: | 43 if args.squeeze: | 
| 36 s = [axis_pos for axis_pos in range(len(img_in.axes)) if img.shape[axis_pos] == 1 and img_in.axes[axis_pos] not in 'YX'] | 44 s = [ | 
| 37 img = np.squeeze(img, axis=tuple(s)) | 45 axis_pos for axis_pos in range(len(img_out.axes)) | 
| 38 img_axes = giatools.util.str_without_positions(img_in.axes, s) | 46 if img_out.data.shape[axis_pos] == 1 and img_out.axes[axis_pos] not in 'YX' | 
| 39 else: | 47 ] | 
| 40 img_axes = img_in.axes | 48 img_out = img_out.squeeze_like( | 
| 49 giatools.util.str_without_positions(img_out.axes, s), | |
| 50 ) | |
| 41 | 51 | 
| 42 # Save the result | 52 # Save the result | 
| 43 filename = output_filename_pattern % (img_idx + 1) | 53 filename = output_filename_pattern % (img_idx + 1) | 
| 44 tifffile.imwrite(filename, img, metadata=dict(axes=img_axes)) | 54 tifffile.imwrite(filename, img_out.data, metadata=dict(axes=img_out.axes)) | 
