Source code for ukat.preproc.dwi

"""Diffusion-weighted imaging preprocessing module

"""
import SimpleITK as sitk


[docs]def get_parameter_map(disp=False, affine_dti=False): """Create and return elastix parameter map Parameters ---------- disp : bool Print parameter map to console affine_dti : bool True: "Transform" = "AffineDTITransform" (i.e. affine registration) False: "Transform" = "EulerTransform" (i.e. rigid registration) Returns ------- SimpleITK.SimpleITK.ParameterMap Parameter map """ # Take the default rigid parameter map as a starting point parameter_map = sitk.GetDefaultParameterMap("rigid") # "Set the NumberOfSpatialSamples to 3000." (as per manual) parameter_map["NumberOfSpatialSamples"] = ["3000"] # Other settings parameter_map["MovingImageDimension"] = ["3"] parameter_map["FixedImageDimension"] = ["3"] parameter_map["ResultImageFormat"] = ["nii.gz"] parameter_map["ErodeMask"] = ["false"] parameter_map["FixedInternalImagePixelType"] = ["float"] parameter_map["MovingInternalImagePixelType"] = ["float"] parameter_map["ResultImagePixelType"] = ["float"] parameter_map["HowToCombineTransforms"] = ["Compose"] parameter_map["UseAdaptiveStepSizes"] = ["true"] parameter_map["UseDirectionCosines"] = ["true"] parameter_map["NumberOfHistogramBins"] = ["32"] # I have been running into the "Too many samples map outside moving image # buffer" problem when using a multi-resolution strategy. Our masks are # quite small especially in datasets with a small number of slices. Still, # we probably don't want to increase the size of the masks. Alternatively, # I experimented with reducing the number of resolutions from the default # value, 3, to 2, where the error still ocurred, and then 1, which ran fine parameter_map["NumberOfResolutions"] = ["1"] if affine_dti: parameter_map["Transform"] = ["AffineDTITransform"] # Possible modifications -------------------------------------------------- # Looks like it is not possible to use Full/FullSampler by default with # simple elastix**. # **github.com/SuperElastix/SimpleElastix/issues/300#issuecomment-499497546 # parameter_map["ImageSampler"] = ["Full"] # parameter_map["Interpolator"] = ["BSplineInterpolator"] # parameter_map["MaximumNumberOfIterations"] = ["500"] # parameter_map["NumberOfSpatialSamples"] = ["4096"] # parameter_map["BSplineInterpolationOrder"] = ["1"] if disp: sitk.PrintParameterMap(parameter_map) return parameter_map