19 m_Uniformity(0), m_UPP(0), m_Entropy(0), m_Median(0), m_StatisticsCalculated(false)
26 if (m_Histogram != histogram)
28 m_Histogram = histogram;
29 m_StatisticsCalculated =
false;
35 if (!m_StatisticsCalculated)
37 MITK_WARN(
"Statistics have not yet been calculated, running calculation now...");
45 if (!m_StatisticsCalculated)
47 MITK_WARN(
"Statistics have not yet been calculated, running calculation now...");
55 if (!m_StatisticsCalculated)
57 MITK_WARN(
"Statistics have not yet been calculated, running calculation now...");
65 if (!m_StatisticsCalculated)
67 MITK_WARN(
"Statistics have not yet been calculated, running calculation now...");
75 if (m_Histogram.IsNull())
77 throw std::runtime_error(
"Histogram not set in HistogramStatisticsCalculator::CalculateStatistics()");
80 unsigned int nBins = m_Histogram->GetSize()[0];
87 bool medianFound(
false);
89 for (
unsigned int i = 0; i < nBins; i++)
91 MeasurementType partialProbability = m_Histogram->GetFrequency(i, 0) / double( m_Histogram->GetTotalFrequency() );
92 cumulativeProbability += partialProbability;
94 if (partialProbability != 0)
96 m_Entropy -= partialProbability * (std::log2( partialProbability ));
97 m_Uniformity += std::pow(partialProbability, 2);
99 if (m_Histogram->GetMeasurement(i, 0) > 0)
101 m_UPP += std::pow(partialProbability, 2);
106 if (cumulativeProbability >= 0.5 && !medianFound)
110 m_Median = (binMax + binMin) / 2.0;
115 m_StatisticsCalculated =
true;
MeasurementType GetEntropy()
DataCollection - Class to facilitate loading/accessing structured data.
MeasurementType GetUniformity()
void SetHistogram(HistogramType::Pointer histogram)
SetHistogram requires a itk::Statistics::Histogram<double>
MeasurementType GetMedian()
void CalculateStatistics()
calculate statistics
HistogramStatisticsCalculator()