25 : QObject(), QRunnable()
26 , m_StatisticsImage(nullptr)
27 , m_BinaryMask(nullptr)
28 , m_PlanarFigureMask(nullptr)
29 , m_IgnoreZeros(false)
30 , m_HistogramNBins(100)
31 , m_CalculationSuccessful(false)
43 this->m_StatisticsImage =
image;
44 this->m_BinaryMask = binaryImage;
45 this->m_PlanarFigureMask = planarFig;
50 return this->m_StatisticsContainer.GetPointer();
55 return this->m_StatisticsImage.GetPointer();
60 return this->m_BinaryMask.GetPointer();
65 return this->m_PlanarFigureMask.GetPointer();
70 this->m_IgnoreZeros = _arg;
75 return this->m_IgnoreZeros;
80 this->m_HistogramNBins = nbins;
85 return this->m_HistogramNBins;
96 if (t >= this->m_HistogramVector.size())
99 return this->m_HistogramVector.at(t).GetPointer();
104 return m_CalculationSuccessful;
109 bool statisticCalculationSuccessful =
true;
112 if (this->m_StatisticsImage.IsNotNull())
114 calculator->SetInputImage(m_StatisticsImage);
118 statisticCalculationSuccessful =
false;
126 if (this->m_BinaryMask.IsNotNull())
129 imgMask->SetImageMask(m_BinaryMask->Clone());
130 calculator->SetMask(imgMask.GetPointer());
132 if (this->m_PlanarFigureMask.IsNotNull())
135 pfMaskGen->SetInputImage(m_StatisticsImage);
136 pfMaskGen->SetPlanarFigure(m_PlanarFigureMask->Clone());
137 calculator->SetMask(pfMaskGen.GetPointer());
143 m_message = e.what();
144 statisticCalculationSuccessful =
false;
146 catch (
const itk::ExceptionObject& e)
149 m_message = e.what();
150 statisticCalculationSuccessful =
false;
152 catch (
const std::runtime_error &e)
154 MITK_ERROR <<
"Runtime Exception: " << e.what();
155 m_message = e.what();
156 statisticCalculationSuccessful =
false;
158 catch (
const std::exception &e)
160 MITK_ERROR <<
"Standard Exception: " << e.what();
161 m_message = e.what();
162 statisticCalculationSuccessful =
false;
165 if (this->m_IgnoreZeros)
168 ignorePixelValueMaskGen->SetIgnoredPixelValue(0);
169 ignorePixelValueMaskGen->SetInputImage(m_StatisticsImage);
170 calculator->SetSecondaryMask(ignorePixelValueMaskGen.GetPointer());
174 calculator->SetSecondaryMask(
nullptr);
177 calculator->SetNBinsForHistogramStatistics(m_HistogramNBins);
181 calculator->GetStatistics();
185 m_message = e.GetDescription();
187 statisticCalculationSuccessful =
false;
189 catch (
const std::runtime_error &e)
191 m_message =
"Failure: " + std::string(e.what());
192 MITK_ERROR <<
"Runtime Exception: " << e.what();
193 statisticCalculationSuccessful =
false;
195 catch (
const std::exception &e)
197 m_message =
"Failure: " + std::string(e.what());
198 MITK_ERROR <<
"Standard Exception: " << e.what();
199 statisticCalculationSuccessful =
false;
202 this->m_CalculationSuccessful = statisticCalculationSuccessful;
204 if (statisticCalculationSuccessful)
206 m_StatisticsContainer = calculator->GetStatistics();
207 this->m_HistogramVector.clear();
209 for (
unsigned int i = 0; i < m_StatisticsImage->GetTimeSteps(); i++)
211 HistogramType::ConstPointer tempHistogram;
213 if (calculator->GetStatistics()->TimeStepExists(i))
215 tempHistogram = calculator->GetStatistics()->GetStatisticsForTimeStep(i).m_Histogram;
216 this->m_HistogramVector.push_back(tempHistogram);
const mitk::PlanarFigure * GetPlanarFigure() const
QmitkImageStatisticsCalculationRunnable()
~QmitkImageStatisticsCalculationRunnable()
bool GetIgnoreZeroValueVoxel() const
std::string GetLastErrorMessage() const
void Initialize(const mitk::Image *image, const mitk::Image *binaryImage, const mitk::PlanarFigure *planarFig)
An object of this class represents an exception of MITK. Please don't instantiate exceptions manually...
void SetIgnoreZeroValueVoxel(bool _arg)
itk::Statistics::Histogram< double > HistogramType
unsigned int GetHistogramNBins() const
void SetHistogramNBins(unsigned int nbins)
Image class for storing images.
const mitk::Image * GetStatisticsImage() const
mitk::Image::Pointer image
const HistogramType * GetTimeStepHistogram(unsigned int t=0) const
const mitk::Image * GetMaskImage() const
mitk::ImageStatisticsContainer * GetStatisticsData() const
bool GetStatisticsUpdateSuccessFlag() const
Container class for storing a StatisticsObject for each timestep.