N4 Bias Field Correction¶
Overview¶
Code¶
#!/usr/bin/env python
from __future__ import print_function
import SimpleITK as sitk
import sys
import os
if len ( sys.argv ) < 2:
print( "Usage: N4BiasFieldCorrection inputImage " + \
"outputImage [shrinkFactor] [maskImage] [numberOfIterations] " +\
"[numberOfFittingLevels]" )
sys.exit ( 1 )
inputImage = sitk.ReadImage( sys.argv[1] )
if len ( sys.argv ) > 4:
maskImage = sitk.ReadImage( sys.argv[4] )
else:
maskImage = sitk.OtsuThreshold( inputImage, 0, 1, 200 )
if len ( sys.argv ) > 3:
inputImage = sitk.Shrink( inputImage, [ int(sys.argv[3]) ] * inputImage.GetDimension() )
maskImage = sitk.Shrink( maskImage, [ int(sys.argv[3]) ] * inputImage.GetDimension() )
inputImage = sitk.Cast( inputImage, sitk.sitkFloat32 )
corrector = sitk.N4BiasFieldCorrectionImageFilter();
numberFittingLevels = 4
if len ( sys.argv ) > 6:
numberFittingLevels = int( sys.argv[6] )
if len ( sys.argv ) > 5:
corrector.SetMaximumNumberOfIterations( [ int( sys.argv[5] ) ] *numberFittingLevels )
output = corrector.Execute( inputImage, maskImage )
sitk.WriteImage( output, sys.argv[2] )
if ( not "SITK_NOSHOW" in os.environ ):
sitk.Show( output, "N4 Corrected" )
# Run with:
#
# Rscript --vanilla N4BiasFieldCorrection.R inputImage, outputImage, shrinkFactor, maskImage, numberOfIterations, numberOfFittingLevels
#
library(SimpleITK)
args <- commandArgs( TRUE )
if (length(args) < 2) {
stop("At least 2 arguments expected - inputImage, outputImage, [shrinkFactor], ",
"[maskImage], [numberOfIterations], [numberOfFittingLevels]")
}
inputImage <- ReadImage(args[[1]])
if (length( args ) > 4) {
maskImage <- ReadImage( args[[4]] )
} else {
maskImage <- OtsuThreshold( inputImage, 0, 1, 200 )
}
if (length( args ) > 3) {
inputImage <- Shrink( inputImage, rep(strtoi(args[3]), inputImage$GetDimension()) )
maskImage <- Shrink( maskImage, rep(strtoi(args[3]), inputImage$GetDimension()) )
}
inputImage <- Cast( inputImage, 'sitkFloat32' )
corrector <- N4BiasFieldCorrectionImageFilter()
numberFittingLevels <- 4
if (length ( args ) > 6) {
numberFittingLevels <- strtoi( args[[6]] )
}
if (length ( args ) > 5) {
corrector$SetMaximumNumberOfIterations( rep(strtoi( args[[5]], numberFittingLevels)) )
}
output <- corrector$Execute( inputImage, maskImage )
WriteImage(output, args[[2]])