diff --git a/Modules/ImageStatisticsUI/Qmitk/QmitkHistogramVisualizationControls.ui b/Modules/ImageStatisticsUI/Qmitk/QmitkHistogramVisualizationControls.ui
index ac4a41972c..43aeb08f85 100644
--- a/Modules/ImageStatisticsUI/Qmitk/QmitkHistogramVisualizationControls.ui
+++ b/Modules/ImageStatisticsUI/Qmitk/QmitkHistogramVisualizationControls.ui
@@ -1,405 +1,350 @@
QmitkHistogramVisualizationControls
0
0
540
460
540
460
Form
false
0
0
530
450
400
450
false
-
false
255
0
0
255
0
0
255
0
0
255
0
0
255
0
0
255
0
0
120
120
120
120
120
120
120
120
120
-
false
0
0
0
0
16777215
16777215
Plot
-
-
-
-
-
-
-
-
- 0
- 0
-
-
-
-
-
-
- Barchart
-
-
- true
-
-
-
- -
-
-
-
- 0
- 0
-
-
-
-
- 0
- 0
-
-
-
- Linegraph
-
-
-
- -
-
-
- Qt::Horizontal
-
-
-
- 40
- 20
-
-
-
-
-
-
-
Show Subchart
true
-
Use default #bins
true
-
QFrame::NoFrame
QFrame::Raised
0
0
0
0
0
-
60
0
100
16777215
# bins:
-
false
Press enter to recalculate statistics with new bin size.
1
10000
100
-
0
0
0
0
0
-
-
0
0
0
0
0
-
0
0
Copy to Clipboard
-
Qt::Horizontal
40
20
QmitkChartWidget
QWidget
diff --git a/Modules/ImageStatisticsUI/Qmitk/QmitkHistogramVisualizationWidget.cpp b/Modules/ImageStatisticsUI/Qmitk/QmitkHistogramVisualizationWidget.cpp
index 022d5e848c..b744d26976 100644
--- a/Modules/ImageStatisticsUI/Qmitk/QmitkHistogramVisualizationWidget.cpp
+++ b/Modules/ImageStatisticsUI/Qmitk/QmitkHistogramVisualizationWidget.cpp
@@ -1,69 +1,125 @@
/*===================================================================
The Medical Imaging Interaction Toolkit (MITK)
Copyright (c) German Cancer Research Center,
Division of Medical and Biological Informatics.
All rights reserved.
This software is distributed WITHOUT ANY WARRANTY; without
even the implied warranty of MERCHANTABILITY or FITNESS FOR
A PARTICULAR PURPOSE.
See LICENSE.txt or http://www.mitk.org for details.
===================================================================*/
#include "QmitkHistogramVisualizationWidget.h"
+#include
+
HistogramVisualizationWidget::HistogramVisualizationWidget(QWidget* parent) : QWidget(parent)
{
- if (m_Controls == nullptr)
- {
- m_Controls = new Ui::QmitkHistogramVisualizationControls;
- }
- setupUi(this);
+ m_Controls.setupUi(this);
CreateConnections();
}
-void HistogramVisualizationWidget::CreateConnections()
+void HistogramVisualizationWidget::setHistogram(itk::Statistics::Histogram::ConstPointer histogram, std::string dataLabel)
{
- connect(buttonCopyHistogramToClipboard, &QPushButton::clicked, this, &HistogramVisualizationWidget::OnClipboardButtonClicked);
- connect(radioButtonBarchart, &QRadioButton::clicked, this, &HistogramVisualizationWidget::OnBarRadioButtonSelected);
- connect(radioButtonLinegraph, &QRadioButton::clicked, this, &HistogramVisualizationWidget::OnLineRadioButtonSelected);
- connect(checkBoxUseDefaultNBins, &QCheckBox::clicked, this, &HistogramVisualizationWidget::OnDefaultNBinsCheckBoxChanged);
- connect(spinBoxNBins, &QSpinBox::editingFinished, this, &HistogramVisualizationWidget::OnNBinsSpinBoxValueChanged);
- connect(checkBoxShowSubchart, &QCheckBox::clicked, this, &HistogramVisualizationWidget::OnShowSubchartCheckBoxChanged);
+ if (histogram == nullptr)
+ return;
+
+ m_Histogram = histogram;
+ m_Controls.chartWidget->AddData2D(ConvertHistogramToMap(m_Histogram), dataLabel);
+ m_Controls.chartWidget->SetChartType(dataLabel, QmitkChartWidget::ChartType::bar);
+ m_Controls.chartWidget->SetXAxisLabel("Gray value");
+ m_Controls.chartWidget->SetYAxisLabel("Frequency");
+
+ m_Controls.chartWidget->Show(m_Controls.checkBoxShowSubchart->isChecked());
+ SetGUIElementsEnabled(true);
}
-void HistogramVisualizationWidget::EnableAllComponents()
+void HistogramVisualizationWidget::Reset()
{
- this->setEnabled(true);
- groupBoxHistogram->setEnabled(true);
- groupBoxPlot->setEnabled(true);
- buttonCopyHistogramToClipboard->setEnabled(true);
+ m_Controls.chartWidget->Clear();
+ SetGUIElementsEnabled(false);
}
-void HistogramVisualizationWidget::OnClipboardButtonClicked()
+void HistogramVisualizationWidget::CreateConnections()
{
+ connect(m_Controls.buttonCopyHistogramToClipboard, &QPushButton::clicked, this, &HistogramVisualizationWidget::OnClipboardButtonClicked);
+ connect(m_Controls.checkBoxUseDefaultNBins, &QCheckBox::clicked, this, &HistogramVisualizationWidget::OnDefaultNBinsCheckBoxChanged);
+ connect(m_Controls.spinBoxNBins, &QSpinBox::editingFinished, this, &HistogramVisualizationWidget::OnNBinsSpinBoxValueChanged);
+ connect(m_Controls.checkBoxShowSubchart, &QCheckBox::clicked, this, &HistogramVisualizationWidget::OnShowSubchartCheckBoxChanged);
}
-void HistogramVisualizationWidget::OnDefaultNBinsCheckBoxChanged()
+void HistogramVisualizationWidget::SetGUIElementsEnabled(bool enabled)
{
+ this->setEnabled(enabled);
+ m_Controls.groupBoxHistogram->setEnabled(enabled);
+ m_Controls.groupBoxPlot->setEnabled(enabled);
+ m_Controls.checkBoxShowSubchart->setEnabled(enabled);
+ m_Controls.checkBoxUseDefaultNBins->setEnabled(enabled);
+ m_Controls.spinBoxNBins->setEnabled(!m_Controls.checkBoxUseDefaultNBins->isChecked());
+ m_Controls.buttonCopyHistogramToClipboard->setEnabled(enabled);
}
-void HistogramVisualizationWidget::OnNBinsSpinBoxValueChanged()
+std::map HistogramVisualizationWidget::ConvertHistogramToMap(itk::Statistics::Histogram::ConstPointer histogram) const
{
+ std::map histogramMap;
+ if (histogram)
+ {
+ auto endIt = histogram->End();
+ auto it = histogram->Begin();
+
+ // generating Lists of measurement and frequencies
+ for (; it != endIt; ++it)
+ {
+ double frequency = it.GetFrequency();
+ double measurement = it.GetMeasurementVector()[0];
+ histogramMap.emplace(measurement, frequency);
+ }
+
+ }
+ return histogramMap;
}
-void HistogramVisualizationWidget::OnShowSubchartCheckBoxChanged()
+void HistogramVisualizationWidget::OnClipboardButtonClicked()
{
+ if (m_Histogram)
+ {
+ QApplication::clipboard()->clear();
+ QString clipboard("Measurement \t Frequency\n");
+ for (auto it = m_Histogram->Begin(); it != m_Histogram->End(); ++it)
+ {
+ clipboard = clipboard.append("%L1 \t %L2\n")
+ .arg(it.GetMeasurementVector()[0], 0, 'f', 2)
+ .arg(it.GetFrequency());
+ }
+
+ QApplication::clipboard()->setText(clipboard, QClipboard::Clipboard);
+ }
}
-void HistogramVisualizationWidget::OnBarRadioButtonSelected()
+void HistogramVisualizationWidget::OnDefaultNBinsCheckBoxChanged()
{
+ if (m_Controls.checkBoxUseDefaultNBins->isChecked())
+ {
+ m_Controls.spinBoxNBins->setEnabled(false);
+ m_Controls.spinBoxNBins->setValue(100);
+ }
+ else
+ {
+ m_Controls.spinBoxNBins->setEnabled(true);
+ }
}
-void HistogramVisualizationWidget::OnLineRadioButtonSelected()
+void HistogramVisualizationWidget::OnNBinsSpinBoxValueChanged()
{
+ emit RequestHistogramUpdate(m_Controls.spinBoxNBins->value());
}
+
+void HistogramVisualizationWidget::OnShowSubchartCheckBoxChanged()
+{
+ m_Controls.chartWidget->Show(m_Controls.checkBoxShowSubchart->isChecked());
+}
\ No newline at end of file
diff --git a/Modules/ImageStatisticsUI/Qmitk/QmitkHistogramVisualizationWidget.h b/Modules/ImageStatisticsUI/Qmitk/QmitkHistogramVisualizationWidget.h
index b92d5e4eab..ada433f974 100644
--- a/Modules/ImageStatisticsUI/Qmitk/QmitkHistogramVisualizationWidget.h
+++ b/Modules/ImageStatisticsUI/Qmitk/QmitkHistogramVisualizationWidget.h
@@ -1,61 +1,65 @@
/*===================================================================
The Medical Imaging Interaction Toolkit (MITK)
Copyright (c) German Cancer Research Center,
Division of Medical and Biological Informatics.
All rights reserved.
This software is distributed WITHOUT ANY WARRANTY; without
even the implied warranty of MERCHANTABILITY or FITNESS FOR
A PARTICULAR PURPOSE.
See LICENSE.txt or http://www.mitk.org for details.
===================================================================*/
#pragma once
//Qt
#include
#include
#include
-class MITKIMAGESTATISTICSUI_EXPORT HistogramVisualizationWidget : public QWidget, private Ui::QmitkHistogramVisualizationControls
+#include
+
+class MITKIMAGESTATISTICSUI_EXPORT HistogramVisualizationWidget : public QWidget
{
Q_OBJECT
public:
HistogramVisualizationWidget(QWidget* parent = nullptr);
-
- //void setHistogram(itk::Histogram::ConstPointer h);
+ /** \brief Draws the histogram and enables the GUI elements */
+ void setHistogram(itk::Statistics::Histogram::ConstPointer histogram, std::string dataLabel);
+ /** \brief Clears the histogram and disables all GUI elements */
+ void Reset();
signals:
/**
* \brief Signal to be emitted when the number of bins is changed by the user. The HistogramCalculator should connect to this signal and recalculate the data accordingly.
*/
void RequestHistogramUpdate(unsigned int nBins);
private:
void CreateConnections();
- void EnableAllComponents();
+ void SetGUIElementsEnabled(bool enabled);
+
+ std::map ConvertHistogramToMap(itk::Statistics::Histogram::ConstPointer histogram) const;
//slots
/** \brief Saves the histogram to the clipboard */
void OnClipboardButtonClicked();
/** \brief Toogle GUI elements if histogram default bin size checkbox value changed. */
void OnDefaultNBinsCheckBoxChanged();
void OnNBinsSpinBoxValueChanged();
void OnShowSubchartCheckBoxChanged();
- void OnBarRadioButtonSelected();
-
- void OnLineRadioButtonSelected();
-
private:
- Ui::QmitkHistogramVisualizationControls* m_Controls;
+ Ui::QmitkHistogramVisualizationControls m_Controls;
+
+ itk::Statistics::Histogram::ConstPointer m_Histogram;
};
\ No newline at end of file