Hi everyone,
I’ve been trying to automatize the application of N4 Bias Field Correction in python. I though it would be a good idea to use sitk. The fact is when I configure the class N4BiasFieldCorrectionImageFilter with the same parameters as it is programmed by default in the Slicer module “N4ITK MRI Bias correction”, the image output lose quality. Does anyone know how to get the same result in the same amount of time using python?
Here is the code I’m using:
shrinkFactor = 4
inputImage = sitk.ReadImage(sys.argv[1])
maskImage = sitk.OtsuThreshold(inputImage, 0, 1, 200)
inputImage = sitk.Shrink(inputImage, [shrinkFactor] * inputImage.GetDimension())
maskImage = sitk.Shrink(maskImage,[shrinkFactor] * inputImage.GetDimension())
inputImage = sitk.Cast(inputImage, sitk.sitkFloat32)
corrector = sitk.N4BiasFieldCorrectionImageFilter()
corrector.SetNumberOfControlPoints([4,4,4])
corrector.SetConvergenceThreshold(0.0001)
corrector.SetMaximumNumberOfIterations([50,40,30])
inputImage = sitk.Cast(inputImage, sitk.sitkFloat32)
output = corrector.Execute(inputImage, maskImage)
sitk.WriteImage(output, name)
I know the shrinkFactor is making the quality poorer but if I turn it 1, then the algorithm takes to much time running.