def LabelStatistics(inputLabel, inputVolume, outputCSVFilename): labelValue = 1 import SimpleITK as sitk statCalculator = sitk.LabelStatisticsImageFilter() inImg = sitk.Cast(sitk.ReadImage(inputVolume), sitk.sitkFloat32) inMsk = sitk.ReadImage(inputLabel) statCalculator.Execute(inImg, inMsk) ## volume imageSpacing = inMsk.GetSpacing() Volume = imageSpacing[0] * imageSpacing[1] * imageSpacing[ 2] * statCalculator.GetCount(labelValue) Mean = statCalculator.GetMean(labelValue) Median = statCalculator.GetMedian(labelValue) Minimum = statCalculator.GetMinimum(labelValue) Maximum = statCalculator.GetMaximum(labelValue) Sigma = statCalculator.GetSigma(labelValue) Variance = statCalculator.GetVariance(labelValue) outputDictionary = dict() outputDictionary['Mean'] = Mean outputDictionary['Median'] = Median outputDictionary['Minimum'] = Minimum outputDictionary['Maximum'] = Maximum outputDictionary['Sigma'] = Sigma outputDictionary['Variance'] = Variance print "################################################## Mean:: " + str( Mean) print "################################################## Median:: " + str( Median) print "################################################## Minimum:: " + str( Minimum) print "################################################## Maximum:: " + str( Maximum) print "################################################## Sigma:: " + str( Sigma) print "################################################## Variance:: " + str( Variance) ## TODO 25/75 quantiles LowerHalfMsk = sitk.BinaryThreshold(inImg, Minimum, Median) Quantile25Calculator = sitk.LabelStatisticsImageFilter() Quantile25Calculator.Execute(inImg, inMsk * LowerHalfMsk) Quantile25 = Quantile25Calculator.GetMedian(labelValue) outputDictionary['Quantile25'] = Quantile25 print "################################################## Quantile25:: " + str( Quantile25) UpperHalfMsk = sitk.BinaryThreshold(inImg, Median, Maximum) Quantile75Calculator = sitk.LabelStatisticsImageFilter() Quantile75Calculator.Execute(inImg, inMsk * UpperHalfMsk) Quantile75 = Quantile75Calculator.GetMedian(labelValue) outputDictionary['Quantile75'] = Quantile75 print "################################################## Quantile75:: " + str( Quantile75) ## TODO MAD AbsoluteFilter = sitk.AbsImageFilter() AbsImg = AbsoluteFilter.Execute(inImg - Median) MADCalculator = sitk.LabelStatisticsImageFilter() MADCalculator.Execute(AbsImg, inMsk) MAD = MADCalculator.GetMedian(labelValue) outputDictionary['MAD'] = MAD print "################################################## MAD:: " + str( MAD) import csv csvFile = open(outputCSVFilename, 'w') dWriter = csv.DictWriter(csvFile, outputDictionary.keys()) dWriter.writeheader() dWriter.writerow(outputDictionary) import os import sys returnFile = os.path.realpath(outputCSVFilename) outputDictionarySet = dict(volume=inputVolume, labelVolume=inputLabel, statDict=outputDictionary) # returnDict = { 'outputStatDictionary': outputDictionary, # 'outputCSVFilename': returnFile } # return returnDict return returnFile, outputDictionarySet
def LabelStatistics(inputLabel, inputVolume, outputCSVFilename): labelValue = 1 import SimpleITK as sitk from collections import ( OrderedDict, ) # Need OrderedDict internally to ensure consistent ordering statCalculator = sitk.LabelStatisticsImageFilter() inImg = sitk.Cast(sitk.ReadImage(inputVolume), sitk.sitkFloat32) inMsk = sitk.ReadImage(inputLabel) statCalculator.Execute(inImg, inMsk) ## volume imageSpacing = inMsk.GetSpacing() Volume = ( imageSpacing[0] * imageSpacing[1] * imageSpacing[2] * statCalculator.GetCount(labelValue) ) Mean = statCalculator.GetMean(labelValue) Median = statCalculator.GetMedian(labelValue) Minimum = statCalculator.GetMinimum(labelValue) Maximum = statCalculator.GetMaximum(labelValue) Sigma = statCalculator.GetSigma(labelValue) Variance = statCalculator.GetVariance(labelValue) outputDictionary = OrderedDict() outputDictionary["Mean"] = Mean outputDictionary["Median"] = Median outputDictionary["Minimum"] = Minimum outputDictionary["Maximum"] = Maximum outputDictionary["Sigma"] = Sigma outputDictionary["Variance"] = Variance print(("################################################## Mean:: " + str(Mean))) print( ("################################################## Median:: " + str(Median)) ) print( ("################################################## Minimum:: " + str(Minimum)) ) print( ("################################################## Maximum:: " + str(Maximum)) ) print(("################################################## Sigma:: " + str(Sigma))) print( ( "################################################## Variance:: " + str(Variance) ) ) ## TODO 25/75 quantiles LowerHalfMsk = sitk.BinaryThreshold(inImg, Minimum, Median) Quantile25Calculator = sitk.LabelStatisticsImageFilter() Quantile25Calculator.Execute(inImg, inMsk * LowerHalfMsk) Quantile25 = Quantile25Calculator.GetMedian(labelValue) outputDictionary["Quantile25"] = Quantile25 print( ( "################################################## Quantile25:: " + str(Quantile25) ) ) UpperHalfMsk = sitk.BinaryThreshold(inImg, Median, Maximum) Quantile75Calculator = sitk.LabelStatisticsImageFilter() Quantile75Calculator.Execute(inImg, inMsk * UpperHalfMsk) Quantile75 = Quantile75Calculator.GetMedian(labelValue) outputDictionary["Quantile75"] = Quantile75 print( ( "################################################## Quantile75:: " + str(Quantile75) ) ) ## TODO MAD AbsoluteFilter = sitk.AbsImageFilter() AbsImg = AbsoluteFilter.Execute(inImg - Median) MADCalculator = sitk.LabelStatisticsImageFilter() MADCalculator.Execute(AbsImg, inMsk) MAD = MADCalculator.GetMedian(labelValue) outputDictionary["MAD"] = MAD print(("################################################## MAD:: " + str(MAD))) import csv csvFile = open(outputCSVFilename, "w") dWriter = csv.DictWriter(csvFile, list(outputDictionary.keys())) dWriter.writeheader() dWriter.writerow(outputDictionary) import os import sys from collections import ( OrderedDict, ) # Need OrderedDict internally to ensure consistent ordering returnFile = os.path.realpath(outputCSVFilename) outputDictionarySet = OrderedDict( volume=inputVolume, labelVolume=inputLabel, statDict=outputDictionary ) # returnDict = { 'outputStatDictionary': outputDictionary, # 'outputCSVFilename': returnFile } # return returnDict return returnFile, outputDictionarySet