Source code for mialab.filtering.preprocessing
"""The pre-processing module contains classes for image pre-processing.
Image pre-processing aims to improve the image quality (image intensities) for subsequent pipeline steps.
"""
import warnings
import pymia.filtering.filter as pymia_fltr
import SimpleITK as sitk
[docs]class ImageNormalization(pymia_fltr.Filter):
"""Represents a normalization filter."""
[docs] def __init__(self):
"""Initializes a new instance of the ImageNormalization class."""
super().__init__()
[docs] def execute(self, image: sitk.Image, params: pymia_fltr.FilterParams = None) -> sitk.Image:
"""Executes a normalization on an image.
Args:
image (sitk.Image): The image.
params (FilterParams): The parameters (unused).
Returns:
sitk.Image: The normalized image.
"""
img_arr = sitk.GetArrayFromImage(image)
# todo: normalize the image using numpy
warnings.warn('No normalization implemented. Returning unprocessed image.')
img_out = sitk.GetImageFromArray(img_arr)
img_out.CopyInformation(image)
return img_out
def __str__(self):
"""Gets a printable string representation.
Returns:
str: String representation.
"""
return 'ImageNormalization:\n' \
.format(self=self)
[docs]class SkullStrippingParameters(pymia_fltr.FilterParams):
"""Skull-stripping parameters."""
[docs] def __init__(self, img_mask: sitk.Image):
"""Initializes a new instance of the SkullStrippingParameters
Args:
img_mask (sitk.Image): The brain mask image.
"""
self.img_mask = img_mask
[docs]class SkullStripping(pymia_fltr.Filter):
"""Represents a skull-stripping filter."""
[docs] def __init__(self):
"""Initializes a new instance of the SkullStripping class."""
super().__init__()
[docs] def execute(self, image: sitk.Image, params: SkullStrippingParameters = None) -> sitk.Image:
"""Executes a skull stripping on an image.
Args:
image (sitk.Image): The image.
params (SkullStrippingParameters): The parameters with the brain mask.
Returns:
sitk.Image: The normalized image.
"""
mask = params.img_mask # the brain mask
# todo: remove the skull from the image by using the brain mask
warnings.warn('No skull-stripping implemented. Returning unprocessed image.')
return image
def __str__(self):
"""Gets a printable string representation.
Returns:
str: String representation.
"""
return 'SkullStripping:\n' \
.format(self=self)
[docs]class ImageRegistrationParameters(pymia_fltr.FilterParams):
"""Image registration parameters."""
[docs] def __init__(self, atlas: sitk.Image, transformation: sitk.Transform, is_ground_truth: bool = False):
"""Initializes a new instance of the ImageRegistrationParameters
Args:
atlas (sitk.Image): The atlas image.
transformation (sitk.Transform): The transformation for registration.
is_ground_truth (bool): Indicates weather the registration is performed on the ground truth or not.
"""
self.atlas = atlas
self.transformation = transformation
self.is_ground_truth = is_ground_truth
[docs]class ImageRegistration(pymia_fltr.Filter):
"""Represents a registration filter."""
[docs] def __init__(self):
"""Initializes a new instance of the ImageRegistration class."""
super().__init__()
[docs] def execute(self, image: sitk.Image, params: ImageRegistrationParameters = None) -> sitk.Image:
"""Registers an image.
Args:
image (sitk.Image): The image.
params (ImageRegistrationParameters): The registration parameters.
Returns:
sitk.Image: The registered image.
"""
# todo: replace this filter by a registration. Registration can be costly, therefore, we provide you the
# transformation, which you only need to apply to the image!
warnings.warn('No registration implemented. Returning unregistered image')
atlas = params.atlas
transform = params.transformation
is_ground_truth = params.is_ground_truth # the ground truth will be handled slightly different
# note: if you are interested in registration, and want to test it, have a look at
# pymia.filtering.registration.MultiModalRegistration. Think about the type of registration, i.e.
# do you want to register to an atlas or inter-subject? Or just ask us, we can guide you ;-)
return image
def __str__(self):
"""Gets a printable string representation.
Returns:
str: String representation.
"""
return 'ImageRegistration:\n' \
.format(self=self)