Source code for unravel.image_tools.transpose_axes

#!/usr/bin/env python3

"""
Use ``img_transpose`` from UNRAVEL to run ndarray.transpose(axis_1, axis_2, axis_3).

Usage: 
------
    img_transpose -i path/img [-xa 0] [-ya 1] [-za 2] [-o path/img_transposed.nii.gz] [-c 0] [-ao xyz] [-rr]
"""

from pathlib import Path
from rich.traceback import install

from unravel.core.help_formatter import RichArgumentParser, SuppressMetavar, SM

from unravel.core.config import Configuration
from unravel.core.img_io import load_3D_img, save_as_nii
from unravel.core.utils import log_command, verbose_start_msg, verbose_end_msg, print_func_name_args_times


[docs] def parse_args(): parser = RichArgumentParser(formatter_class=SuppressMetavar, add_help=False, docstring=__doc__) reqs = parser.add_argument_group('Required arguments') reqs.add_argument('-i', '--input', help='path/img.czi, path/img.nii.gz, or path/tif_dir', action=SM) opts = parser.add_argument_group('Optional arguments') opts.add_argument('-xa', '-x_axis', help='Enter 0, 1, or 2. Default: 0', default=0, type=int, action=SM) opts.add_argument('-ya', '-y_axis', help='Default: 1', default=1, type=int, action=SM) opts.add_argument('-za', '-z_axis', help='Default: 2', default=2, type=int, action=SM) opts.add_argument('-o', '--output', help='path/img.nii.gz', action=SM) opts.add_argument('-c', '--channel', help='.czi channel number. Default: 0 for autofluo', default=0, type=int, action=SM) opts.add_argument('-ao', '--axis_order', help='Axis order for loading image. Default: xyz. (other option: zyx)', default='xyz', action=SM) opts.add_argument('-rr', '--return_res', help='Default: True. If false, enter a float for xy_res and z_res (in um) in prompts', action='store_true', default=True) general = parser.add_argument_group('General arguments') general.add_argument('-v', '--verbose', help='Increase verbosity. Default: False', action='store_true', default=False) return parser.parse_args()
# TODO: Test script. Add support for other output formats. print_func_name_args_times()
[docs] def transpose_img(ndarray, axis_1, axis_2, axis_3): """Transposes axes of ndarray""" return ndarray.transpose(axis_1, axis_2, axis_3)
[docs] @log_command def main(): install() args = parse_args() Configuration.verbose = args.verbose verbose_start_msg() if args.return_res: img, xy_res, z_res = load_3D_img(args.input, args.channel, desired_axis_order=args.axis_order, return_res=args.return_res) else: img = load_3D_img(args.input, args.channel, desired_axis_order=args.axis_order, return_res=args.return_res) xy_res = float(input("Enter xy_res: ")) z_res = float(input("Enter z_res: ")) tranposed_img = transpose_img(img, args.x_axis, args.y_axis, args.z_axis) if args.output: save_as_nii(tranposed_img, args.output, xy_res, z_res) else: output = str(Path(args.input).resolve()).replace(".nii.gz", f"_transposed.nii.gz") save_as_nii(tranposed_img, output, xy_res, z_res) verbose_end_msg()
if __name__ == '__main__': main()