Source code for unravel.image_io.tif_to_tifs
#!/usr/bin/env python3
"""
Use ``io_tif_to_tifs`` (``t2t``) from UNRAVEL to load a 3D .tif or .ome.tif image and save it as tifs.
Input:
- path/image.tif (can use glob patterns)
Outputs:
- <tif_dir>/slice_0000.tif, <tif_dir>/slice_0001.tif, ...
- tif_dir may be specified with -t flag or it will default to <image_name>_tifs
- parameters/metadata.txt (if -m flag is used)
Next command:
``io_metadata`` to specify voxel sizes and image dimensions to parameters/metadata.txt (if metadata is not extractable)
``reg_prep`` to prep autofluo images registration
Usage:
------
io_tif_to_tifs -i <path/image.tif> -t autofl [-v]
"""
from glob import glob
import numpy as np
from pathlib import Path
from rich import print
from rich.traceback import install
from unravel.core.config import Configuration
from unravel.core.help_formatter import RichArgumentParser, SuppressMetavar, SM
from unravel.core.img_io import save_metadata_to_file, save_as_tifs, load_3D_tif
from unravel.core.utils import log_command, verbose_start_msg, verbose_end_msg
[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/image.tif (can use glob patterns)', required=True, action=SM)
opts = parser.add_argument_group('Optional args')
opts.add_argument('-t', '--tif_dir', help='Name of output folder for outputting tifs', required=True, action=SM)
opts.add_argument('-m', '--metad_path', help='Path for storing key raw image metadata. Default: parameters/metadata.txt', default="parameters/metadata.txt", action=SM)
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()
[docs]
@log_command
def main():
install()
args = parse_args()
Configuration.verbose = args.verbose
verbose_start_msg()
input_paths = list(Path().cwd().glob(str(args.input)))
for input_path in input_paths:
print(f"\n Processing {input_path}\n")
# Load .tif image (highest res dataset) as ndarray and extract voxel sizes in microns
if args.metad_path:
img = load_3D_tif(input_path, desired_axis_order="xyz", return_res=False, return_metadata=False, save_metadata=args.metad_path)
else:
img = load_3D_tif(input_path, desired_axis_order="xyz", return_res=False)
# Save 3D tif as tifs
if args.tif_dir:
tifs_output_path = Path(args.tif_dir)
else:
if '.ome.tif' in str(input_path):
tifs_output_path = str(Path(input_path).name).replace('.ome.tif', '_tifs')
elif '.tif' in str(input_path):
tifs_output_path = str(Path(input_path).name).replace('.tif', '_tifs')
else:
tifs_output_path = 'tifs'
save_as_tifs(img, tifs_output_path)
verbose_end_msg()
if __name__ == '__main__':
main()