Mercurial > repos > imgteam > split_image
annotate split.py @ 0:6b42bec75e69 draft
planemo upload for repository https://github.com/BMCV/galaxy-image-analysis/tree/master/tools/split_image/ commit f1052360d410594fa1795cf0e02576b8fa4d4135
| author | imgteam | 
|---|---|
| date | Fri, 07 Mar 2025 08:08:05 +0000 | 
| parents | |
| children | 73d7a4ffc03d | 
| rev | line source | 
|---|---|
| 
0
 
6b42bec75e69
planemo upload for repository https://github.com/BMCV/galaxy-image-analysis/tree/master/tools/split_image/ commit f1052360d410594fa1795cf0e02576b8fa4d4135
 
imgteam 
parents:  
diff
changeset
 | 
1 import argparse | 
| 
 
6b42bec75e69
planemo upload for repository https://github.com/BMCV/galaxy-image-analysis/tree/master/tools/split_image/ commit f1052360d410594fa1795cf0e02576b8fa4d4135
 
imgteam 
parents:  
diff
changeset
 | 
2 import math | 
| 
 
6b42bec75e69
planemo upload for repository https://github.com/BMCV/galaxy-image-analysis/tree/master/tools/split_image/ commit f1052360d410594fa1795cf0e02576b8fa4d4135
 
imgteam 
parents:  
diff
changeset
 | 
3 | 
| 
 
6b42bec75e69
planemo upload for repository https://github.com/BMCV/galaxy-image-analysis/tree/master/tools/split_image/ commit f1052360d410594fa1795cf0e02576b8fa4d4135
 
imgteam 
parents:  
diff
changeset
 | 
4 import giatools | 
| 
 
6b42bec75e69
planemo upload for repository https://github.com/BMCV/galaxy-image-analysis/tree/master/tools/split_image/ commit f1052360d410594fa1795cf0e02576b8fa4d4135
 
imgteam 
parents:  
diff
changeset
 | 
5 import giatools.util | 
| 
 
6b42bec75e69
planemo upload for repository https://github.com/BMCV/galaxy-image-analysis/tree/master/tools/split_image/ commit f1052360d410594fa1795cf0e02576b8fa4d4135
 
imgteam 
parents:  
diff
changeset
 | 
6 import numpy as np | 
| 
 
6b42bec75e69
planemo upload for repository https://github.com/BMCV/galaxy-image-analysis/tree/master/tools/split_image/ commit f1052360d410594fa1795cf0e02576b8fa4d4135
 
imgteam 
parents:  
diff
changeset
 | 
7 import tifffile | 
| 
 
6b42bec75e69
planemo upload for repository https://github.com/BMCV/galaxy-image-analysis/tree/master/tools/split_image/ commit f1052360d410594fa1795cf0e02576b8fa4d4135
 
imgteam 
parents:  
diff
changeset
 | 
8 | 
| 
 
6b42bec75e69
planemo upload for repository https://github.com/BMCV/galaxy-image-analysis/tree/master/tools/split_image/ commit f1052360d410594fa1795cf0e02576b8fa4d4135
 
imgteam 
parents:  
diff
changeset
 | 
9 | 
| 
 
6b42bec75e69
planemo upload for repository https://github.com/BMCV/galaxy-image-analysis/tree/master/tools/split_image/ commit f1052360d410594fa1795cf0e02576b8fa4d4135
 
imgteam 
parents:  
diff
changeset
 | 
10 parser = argparse.ArgumentParser() | 
| 
 
6b42bec75e69
planemo upload for repository https://github.com/BMCV/galaxy-image-analysis/tree/master/tools/split_image/ commit f1052360d410594fa1795cf0e02576b8fa4d4135
 
imgteam 
parents:  
diff
changeset
 | 
11 parser.add_argument('input', type=str) | 
| 
 
6b42bec75e69
planemo upload for repository https://github.com/BMCV/galaxy-image-analysis/tree/master/tools/split_image/ commit f1052360d410594fa1795cf0e02576b8fa4d4135
 
imgteam 
parents:  
diff
changeset
 | 
12 parser.add_argument('axis', type=str) | 
| 
 
6b42bec75e69
planemo upload for repository https://github.com/BMCV/galaxy-image-analysis/tree/master/tools/split_image/ commit f1052360d410594fa1795cf0e02576b8fa4d4135
 
imgteam 
parents:  
diff
changeset
 | 
13 parser.add_argument('output', type=str) | 
| 
 
6b42bec75e69
planemo upload for repository https://github.com/BMCV/galaxy-image-analysis/tree/master/tools/split_image/ commit f1052360d410594fa1795cf0e02576b8fa4d4135
 
imgteam 
parents:  
diff
changeset
 | 
14 parser.add_argument('--squeeze', action='store_true', default=False) | 
| 
 
6b42bec75e69
planemo upload for repository https://github.com/BMCV/galaxy-image-analysis/tree/master/tools/split_image/ commit f1052360d410594fa1795cf0e02576b8fa4d4135
 
imgteam 
parents:  
diff
changeset
 | 
15 args = parser.parse_args() | 
| 
 
6b42bec75e69
planemo upload for repository https://github.com/BMCV/galaxy-image-analysis/tree/master/tools/split_image/ commit f1052360d410594fa1795cf0e02576b8fa4d4135
 
imgteam 
parents:  
diff
changeset
 | 
16 | 
| 
 
6b42bec75e69
planemo upload for repository https://github.com/BMCV/galaxy-image-analysis/tree/master/tools/split_image/ commit f1052360d410594fa1795cf0e02576b8fa4d4135
 
imgteam 
parents:  
diff
changeset
 | 
17 # Validate and normalize input parameters | 
| 
 
6b42bec75e69
planemo upload for repository https://github.com/BMCV/galaxy-image-analysis/tree/master/tools/split_image/ commit f1052360d410594fa1795cf0e02576b8fa4d4135
 
imgteam 
parents:  
diff
changeset
 | 
18 assert len(args.axis) == 1, 'Axis input must be a single character.' | 
| 
 
6b42bec75e69
planemo upload for repository https://github.com/BMCV/galaxy-image-analysis/tree/master/tools/split_image/ commit f1052360d410594fa1795cf0e02576b8fa4d4135
 
imgteam 
parents:  
diff
changeset
 | 
19 axis = args.axis.replace('S', 'C') | 
| 
 
6b42bec75e69
planemo upload for repository https://github.com/BMCV/galaxy-image-analysis/tree/master/tools/split_image/ commit f1052360d410594fa1795cf0e02576b8fa4d4135
 
imgteam 
parents:  
diff
changeset
 | 
20 | 
| 
 
6b42bec75e69
planemo upload for repository https://github.com/BMCV/galaxy-image-analysis/tree/master/tools/split_image/ commit f1052360d410594fa1795cf0e02576b8fa4d4135
 
imgteam 
parents:  
diff
changeset
 | 
21 # Read input image as TZYXC | 
| 
 
6b42bec75e69
planemo upload for repository https://github.com/BMCV/galaxy-image-analysis/tree/master/tools/split_image/ commit f1052360d410594fa1795cf0e02576b8fa4d4135
 
imgteam 
parents:  
diff
changeset
 | 
22 img_in = giatools.Image.read(args.input) | 
| 
 
6b42bec75e69
planemo upload for repository https://github.com/BMCV/galaxy-image-analysis/tree/master/tools/split_image/ commit f1052360d410594fa1795cf0e02576b8fa4d4135
 
imgteam 
parents:  
diff
changeset
 | 
23 | 
| 
 
6b42bec75e69
planemo upload for repository https://github.com/BMCV/galaxy-image-analysis/tree/master/tools/split_image/ commit f1052360d410594fa1795cf0e02576b8fa4d4135
 
imgteam 
parents:  
diff
changeset
 | 
24 # Determine the axis to split along | 
| 
 
6b42bec75e69
planemo upload for repository https://github.com/BMCV/galaxy-image-analysis/tree/master/tools/split_image/ commit f1052360d410594fa1795cf0e02576b8fa4d4135
 
imgteam 
parents:  
diff
changeset
 | 
25 axis_pos = img_in.axes.index(axis) | 
| 
 
6b42bec75e69
planemo upload for repository https://github.com/BMCV/galaxy-image-analysis/tree/master/tools/split_image/ commit f1052360d410594fa1795cf0e02576b8fa4d4135
 
imgteam 
parents:  
diff
changeset
 | 
26 | 
| 
 
6b42bec75e69
planemo upload for repository https://github.com/BMCV/galaxy-image-analysis/tree/master/tools/split_image/ commit f1052360d410594fa1795cf0e02576b8fa4d4135
 
imgteam 
parents:  
diff
changeset
 | 
27 # Perform the splitting | 
| 
 
6b42bec75e69
planemo upload for repository https://github.com/BMCV/galaxy-image-analysis/tree/master/tools/split_image/ commit f1052360d410594fa1795cf0e02576b8fa4d4135
 
imgteam 
parents:  
diff
changeset
 | 
28 arr = np.moveaxis(img_in.data, axis_pos, 0) | 
| 
 
6b42bec75e69
planemo upload for repository https://github.com/BMCV/galaxy-image-analysis/tree/master/tools/split_image/ commit f1052360d410594fa1795cf0e02576b8fa4d4135
 
imgteam 
parents:  
diff
changeset
 | 
29 decimals = math.ceil(math.log10(1 + arr.shape[0])) | 
| 
 
6b42bec75e69
planemo upload for repository https://github.com/BMCV/galaxy-image-analysis/tree/master/tools/split_image/ commit f1052360d410594fa1795cf0e02576b8fa4d4135
 
imgteam 
parents:  
diff
changeset
 | 
30 output_filename_pattern = f'{args.output}/%0{decimals}d.tiff' | 
| 
 
6b42bec75e69
planemo upload for repository https://github.com/BMCV/galaxy-image-analysis/tree/master/tools/split_image/ commit f1052360d410594fa1795cf0e02576b8fa4d4135
 
imgteam 
parents:  
diff
changeset
 | 
31 for img_idx, img in enumerate(arr): | 
| 
 
6b42bec75e69
planemo upload for repository https://github.com/BMCV/galaxy-image-analysis/tree/master/tools/split_image/ commit f1052360d410594fa1795cf0e02576b8fa4d4135
 
imgteam 
parents:  
diff
changeset
 | 
32 img = np.moveaxis(img[None], 0, axis_pos) | 
| 
 
6b42bec75e69
planemo upload for repository https://github.com/BMCV/galaxy-image-analysis/tree/master/tools/split_image/ commit f1052360d410594fa1795cf0e02576b8fa4d4135
 
imgteam 
parents:  
diff
changeset
 | 
33 | 
| 
 
6b42bec75e69
planemo upload for repository https://github.com/BMCV/galaxy-image-analysis/tree/master/tools/split_image/ commit f1052360d410594fa1795cf0e02576b8fa4d4135
 
imgteam 
parents:  
diff
changeset
 | 
34 # Optionally, squeeze the image | 
| 
 
6b42bec75e69
planemo upload for repository https://github.com/BMCV/galaxy-image-analysis/tree/master/tools/split_image/ commit f1052360d410594fa1795cf0e02576b8fa4d4135
 
imgteam 
parents:  
diff
changeset
 | 
35 if args.squeeze: | 
| 
 
6b42bec75e69
planemo upload for repository https://github.com/BMCV/galaxy-image-analysis/tree/master/tools/split_image/ commit f1052360d410594fa1795cf0e02576b8fa4d4135
 
imgteam 
parents:  
diff
changeset
 | 
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'] | 
| 
 
6b42bec75e69
planemo upload for repository https://github.com/BMCV/galaxy-image-analysis/tree/master/tools/split_image/ commit f1052360d410594fa1795cf0e02576b8fa4d4135
 
imgteam 
parents:  
diff
changeset
 | 
37 img = np.squeeze(img, axis=tuple(s)) | 
| 
 
6b42bec75e69
planemo upload for repository https://github.com/BMCV/galaxy-image-analysis/tree/master/tools/split_image/ commit f1052360d410594fa1795cf0e02576b8fa4d4135
 
imgteam 
parents:  
diff
changeset
 | 
38 img_axes = giatools.util.str_without_positions(img_in.axes, s) | 
| 
 
6b42bec75e69
planemo upload for repository https://github.com/BMCV/galaxy-image-analysis/tree/master/tools/split_image/ commit f1052360d410594fa1795cf0e02576b8fa4d4135
 
imgteam 
parents:  
diff
changeset
 | 
39 else: | 
| 
 
6b42bec75e69
planemo upload for repository https://github.com/BMCV/galaxy-image-analysis/tree/master/tools/split_image/ commit f1052360d410594fa1795cf0e02576b8fa4d4135
 
imgteam 
parents:  
diff
changeset
 | 
40 img_axes = img_in.axes | 
| 
 
6b42bec75e69
planemo upload for repository https://github.com/BMCV/galaxy-image-analysis/tree/master/tools/split_image/ commit f1052360d410594fa1795cf0e02576b8fa4d4135
 
imgteam 
parents:  
diff
changeset
 | 
41 | 
| 
 
6b42bec75e69
planemo upload for repository https://github.com/BMCV/galaxy-image-analysis/tree/master/tools/split_image/ commit f1052360d410594fa1795cf0e02576b8fa4d4135
 
imgteam 
parents:  
diff
changeset
 | 
42 # Save the result | 
| 
 
6b42bec75e69
planemo upload for repository https://github.com/BMCV/galaxy-image-analysis/tree/master/tools/split_image/ commit f1052360d410594fa1795cf0e02576b8fa4d4135
 
imgteam 
parents:  
diff
changeset
 | 
43 filename = output_filename_pattern % (img_idx + 1) | 
| 
 
6b42bec75e69
planemo upload for repository https://github.com/BMCV/galaxy-image-analysis/tree/master/tools/split_image/ commit f1052360d410594fa1795cf0e02576b8fa4d4135
 
imgteam 
parents:  
diff
changeset
 | 
44 tifffile.imwrite(filename, img, metadata=dict(axes=img_axes)) | 
