Source code for medipt.utils.image_input_output_space

import SimpleITK as sitk
import numpy as np
from typing import Union, Tuple, List

from .spatial_utils import get_output_size_from_spacing, get_output_spacing_from_size



[docs]def resolve_input_output_space( dim: int = 3, input_image: sitk.Image = None, reference_image: sitk.Image = None, input_size: Union[List[Union[int, float]], Tuple[Union[int, float], ...]] = None, output_size: Union[List[Union[int, float]], Tuple[Union[int, float], ...]] = None, input_spacing: Union[List[Union[int, float]], Tuple[Union[int, float], ...]] = None, output_spacing: Union[List[Union[int, float]], Tuple[Union[int, float], ...]] = None, input_direction: Union[List[Union[int, float]], Tuple[Union[int, float], ...]] = None, output_direction: Union[List[Union[int, float]], Tuple[Union[int, float], ...]] = None, input_origin: Union[List[Union[int, float]], Tuple[Union[int, float], ...]] = None, output_origin: Union[List[Union[int, float]], Tuple[Union[int, float], ...]] = None, *args, **kwargs): if input_image is not None: input_size = input_image.GetSize() input_spacing = input_image.GetSpacing() input_origin = input_image.GetOrigin() input_direction = input_image.GetDirection() else: input_size = kwargs.get('input_size', input_size) input_spacing = kwargs.get('input_spacing', input_spacing) input_origin = kwargs.get('input_origin', input_origin) input_direction = kwargs.get('input_direction', input_direction) if input_spacing is None: input_spacing = [1.0] * dim if input_origin is None: input_origin = [0] * dim if input_direction is None: input_direction = np.eye(dim).flatten().tolist() if reference_image is not None: output_size = reference_image.GetSize() output_direction = reference_image.GetDirection() output_origin = reference_image.GetOrigin() output_spacing = reference_image.GetSpacing() else: output_size = kwargs.get('output_size', output_size) output_spacing = kwargs.get('output_spacing', output_spacing) output_origin = kwargs.get('output_origin', output_origin) output_direction = kwargs.get('output_direction', output_direction) if (output_size is None) and (output_spacing is None) and (input_image is None): raise ValueError('One of output_size, output_spacing or input_image must be provided.') if output_direction is None: output_direction = input_direction if output_origin is None: output_origin = input_origin if (output_size is None) and (output_spacing is not None): output_size = get_output_size_from_spacing(dim=dim, input_size=input_size, input_spacing=input_spacing, input_direction=input_direction, output_spacing=output_spacing, output_direction=output_direction, *args, **kwargs) output_size = [int(np.round(x)) for x in output_size] elif (output_size is not None) and (output_spacing is None): output_spacing = get_output_spacing_from_size(dim=dim, input_size=input_size, input_spacing=input_spacing, input_direction=input_direction, output_size=output_size, output_direction=output_direction, *args, **kwargs) elif (output_spacing is None) and (output_size is None): output_spacing = input_spacing output_size = input_size kwargs['input_image'] = input_image kwargs['input_size'] = input_size kwargs['input_spacing'] = input_spacing kwargs['input_origin'] = input_origin kwargs['input_direction'] = input_direction kwargs['output_size'] = output_size kwargs['output_spacing'] = output_spacing kwargs['output_origin'] = output_origin kwargs['output_direction'] = output_direction return kwargs
if __name__ == '__main__': dim = 3 input_image = sitk.ReadImage('../../testing_files/sub-verse260.nii.gz') output_size = [256, 256, 256] output_spacing = [3.0, 5.0, 2.0] hold = resolve_input_output_space(dim=dim, input_image=input_image, output_size=output_size, # output_spacing=output_spacing, ) )