Source code for medipt.transforms.intensity.intensity_utils_np

import SimpleITK as sitk
import numpy as np
from scipy.ndimage import gaussian_filter
from typing import Union, Tuple, List, Any, Callable, Optional
from types import ModuleType


[docs]def clamp_intensity_np(image: np.ndarray, window_min: Union[int, float] = None, window_max: Union[int, float] = None, image_min: Union[int, float] = None, image_max: Union[int, float] = None, *args, **kwargs) -> np.ndarray: if (window_min is None) and (window_max is None): raise ValueError('window_min and window_max cannot both be None.') if image_min is None or image_max is None: if image_min is None: image_min = image.min() if image_max is None: image_max = image.max() if window_min is None: window_min = image_min if window_max is None: window_max = image_max clamped_image = np.clip(image, window_min, window_max) return clamped_image
[docs]def shift_scale_intensity_np(image: np.ndarray, shift: Union[int, float] = None, scale: Union[int, float] = None, *args, **kwargs) -> np.ndarray: shifted_image = image + shift rescaled_image = shifted_image * scale return rescaled_image
[docs]def rescale_intensity_np(image: np.ndarray, output_min: Union[int, float] = None, output_max: Union[int, float] = None, *args, **kwargs) -> np.ndarray: if (output_min is None) or (output_max is None): if output_min is None: output_min = image.min() if output_max is None: output_max = image.min() else: raise ValueError('Need to provide output minimum and/or output maximum.') input_min = image.min() input_max = image.max() rescaled_image = (image - input_min) * (output_max - output_min) / (input_max - input_min) + output_max return rescaled_image
[docs]def rescale_intensity_window_np(image: np.ndarray, input_min: Union[int, float] = None, input_max: Union[int, float] = None, output_min: Union[int, float] = None, output_max: Union[int, float] = None, *args, **kwargs) -> np.ndarray: if input_min is None: input_min = image.min() if input_max is None: input_max = image.max() if (output_min is None) and (output_max is None): raise ValueError('Need to provide output minimum and/or output maximum.') else: if output_min is None: output_min = input_min if output_max is None: output_max = input_max rescaled_image = (image - input_min) * (output_max - output_min) / (input_max - input_min) + output_min rescaled_image = np.clip(rescaled_image, a_min=output_min, a_max=output_max) return rescaled_image
[docs]def gaussian_blur_np(image: np.ndarray, sigma: Union[int, float], *args, **kwargs) -> np.ndarray: output_image = gaussian_filter(image, sigma=sigma) return output_image
[docs]def gaussian_noise_np(image: np.ndarray, mean: Union[int, float], sigma: Union[int, float], rand_init: Union[ModuleType, np.random.Generator, np.random.BitGenerator] = None, *args, **kwargs) -> np.ndarray: gaussian = rand_init.normal(mean, sigma, image.shape) output_image = image + gaussian return output_image
[docs]def change_image_gamma_np(image: np.ndarray, gamma: Union[int, float], *args, **kwargs) -> np.ndarray: output_image = np.power(image, gamma) return output_image