Source code for unravel.image_tools.unique_intensities

#!/usr/bin/env python3

"""
Use ``img_unique`` from UNRAVEL to print a list of unique intensities greater than 0.

Usage for printing all non-zero intensities:
--------------------------------------------
    img_unique -i path/input_img.nii.gz [-v]

Usage for printing the number of voxels for each intensity that is present:
---------------------------------------------------------------------------
    img_unique -i path/input_img.nii.gz -s [-v]

Usage for printing unique intensities w/ a min cluster size > 100 voxels:
-------------------------------------------------------------------------
    img_unique -i path/input_img.nii.gz -m 100 [-v]
"""

import nibabel as nib
import numpy as np
from rich import print
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
from unravel.core.img_tools import cluster_IDs
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/input_img.nii.gz', required=True, action=SM) opts = parser.add_argument_group('Optional arguments') opts.add_argument('-m', '--min_extent', help='Min cluster size in voxels (Default: 1)', default=1, action=SM, type=int) opts.add_argument('-s', '--print_sizes', help='Print cluster IDs and sizes. Default: False', default=False, action='store_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()
[docs] def uniq_intensities(input, min_extent=1, print_sizes=False): """Loads a 3D image and prints non-zero unique intensity values in a space-separated list. Args: input (_type_): _description_ min_extent (int, optional): _description_. Defaults to 1. print_sizes (bool, optional): _description_. Defaults to False. Returns: list of ints: list of unique intensities """ if str(input).endswith(".nii.gz"): nii = nib.load(input) img = np.asanyarray(nii.dataobj, dtype=nii.header.get_data_dtype()).squeeze() else: img = load_3D_img(input) uniq_intensities = cluster_IDs(img, min_extent=min_extent, print_IDs=True, print_sizes=print_sizes) return uniq_intensities
[docs] @log_command def main(): install() args = parse_args() Configuration.verbose = args.verbose verbose_start_msg() # Print unique intensities in image uniq_intensities(args.input, args.min_extent, args.print_sizes) verbose_end_msg()
if __name__ == '__main__': main()