Source code for medipt.transforms.intensity.intensity_utils_sitk

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


[docs]def min_max_intensity_sitk(image: sitk.Image, *args, **kwargs) -> Tuple[float, float]: min_max_filter = sitk.MinimumMaximumImageFilter() min_max_filter.Execute(image) image_min = min_max_filter.GetMinimum() image_max = min_max_filter.GetMaximum() return image_min, image_max
[docs]def clamp_intensity_sitk(image: sitk.Image, 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) -> sitk.Image: 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: image_min_max = min_max_intensity_sitk(image) if image_min is None: image_min = image_min_max[0] if image_max is None: image_max = image_min_max[1] if window_min is None: window_min = image_min if window_max is None: window_max = image_max clamp_filter = sitk.ClampImageFilter() clamp_filter.SetLowerBound(window_min) clamp_filter.SetUpperBound(window_max) clamped_image = clamp_filter.Execute(image) return clamped_image
[docs]def shift_scale_intensity_sitk(image: sitk.Image, shift: Union[int, float] = None, scale: Union[int, float] = None, *args, **kwargs) -> sitk.Image: shift_scale_filter = sitk.ShiftScaleImageFilter() shift_scale_filter.SetShift(shift) shift_scale_filter.SetScale(scale) shifted_scaled_image = shift_scale_filter.Execute(image) return shifted_scaled_image
[docs]def rescale_intensity_sitk(image: sitk.Image, output_min: Union[int, float] = None, output_max: Union[int, float] = None, *args, **kwargs) -> sitk.Image: if (output_min is None) and (output_max is None): raise ValueError('Need to provide output minimum and/or output maximum.') else: image_min_max = min_max_intensity_sitk(image) if output_min is None: output_min = image_min_max[0] if output_max is None: output_max = image_min_max[1] # if (output_min is None) or (output_max is None): # image_min_max = min_max_intensity_sitk(image) # if output_min is None: # output_min = image_min_max[0] # if output_max is None: # output_max = image_min_max[1] # else: # raise ValueError('Need to provide output minimum and/or output maximum.') rescale_filter = sitk.RescaleIntensityImageFilter() rescale_filter.SetOutputMinimum(output_min) rescale_filter.SetOutputMaximum(output_max) rescaled_image = rescale_filter.Execute(image) return rescaled_image
[docs]def rescale_intensity_window_sitk(image: sitk.Image, # output_min: Union[int, float] = None, # output_max: Union[int, float] = None, 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) -> sitk.Image: image_min_max = min_max_intensity_sitk(image) if input_min is None: input_min = image_min_max[0] if input_max is None: input_max = image_min_max[1] 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 rescale_filter = sitk.IntensityWindowingImageFilter() rescale_filter.SetOutputMaximum(output_max) rescale_filter.SetOutputMinimum(output_min) rescale_filter.SetWindowMaximum(input_max) rescale_filter.SetWindowMinimum(input_min) rescaled_image = rescale_filter.Execute(image) return rescaled_image
[docs]def gaussian_blur_sitk(image: sitk.Image, sigma: Union[int, float], *args, **kwargs) -> sitk.Image: image_default_pixel_type = image.GetPixelID() gaussian_filter = sitk.SmoothingRecursiveGaussianImageFilter() gaussian_filter.SetSigma(sigma) rescast_filter = sitk.CastImageFilter() rescast_filter.SetOutputPixelType(sitk.sitkFloat64) image = rescast_filter.Execute(image) output_image = gaussian_filter.Execute(image) if image_default_pixel_type != sitk.sitkFloat64: output_image = sitk.Cast(output_image, image_default_pixel_type) return output_image
[docs]def gaussian_noise_sitk(image: sitk.Image, mean: Union[int, float], sigma: Union[int, float], seed: int = None, *args, **kwargs) -> sitk.Image: image_default_pixel_type = image.GetPixelID() gaussian_noise_filter = sitk.AdditiveGaussianNoiseImageFilter() gaussian_noise_filter.SetMean(mean) gaussian_noise_filter.SetStandardDeviation(sigma) if seed is not None: gaussian_noise_filter.SetSeed(seed) rescast_filter = sitk.CastImageFilter() rescast_filter.SetOutputPixelType(sitk.sitkFloat64) image = rescast_filter.Execute(image) output_image = gaussian_noise_filter.Execute(image) if image_default_pixel_type != sitk.sitkFloat64: output_image = sitk.Cast(output_image, image_default_pixel_type) return output_image
[docs]def change_image_gamma_sitk(image: sitk.Image, gamma: Union[int, float], *args, **kwargs) -> sitk.Image: exp_image_filter = sitk.PowImageFilter() output_image = exp_image_filter.Execute(image, gamma) return output_image