Пример #1
0
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
Пример #2
0
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