diff --git a/Modules/Segmentation/Interactions/mitkOtsuTool3D.cpp b/Modules/Segmentation/Interactions/mitkOtsuTool3D.cpp index 9a5f4cc388..ec02f6a346 100644 --- a/Modules/Segmentation/Interactions/mitkOtsuTool3D.cpp +++ b/Modules/Segmentation/Interactions/mitkOtsuTool3D.cpp @@ -1,253 +1,86 @@ /*============================================================================ The Medical Imaging Interaction Toolkit (MITK) Copyright (c) German Cancer Research Center (DKFZ) All rights reserved. Use of this source code is governed by a 3-clause BSD license that can be found in the LICENSE file. ============================================================================*/ // MITK #include "mitkOtsuTool3D.h" -#include "mitkImageAccessByItk.h" -#include "mitkLabelSetImage.h" #include "mitkOtsuSegmentationFilter.h" -#include "mitkRenderingManager.h" -#include "mitkToolManager.h" -#include -#include -#include -#include -#include -#include - -// ITK -#include -#include -#include // us #include #include #include #include #include namespace mitk { MITK_TOOL_MACRO(MITKSEGMENTATION_EXPORT, OtsuTool3D, "Otsu Segmentation"); } -mitk::OtsuTool3D::OtsuTool3D() : AutoSegmentationWithPreviewTool(true) -{ -} - -mitk::OtsuTool3D::~OtsuTool3D() -{ -} - -void mitk::OtsuTool3D::SetSelectedRegions(const SelectedRegionVectorType& regions) -{ - if (m_SelectedRegions != regions) - { - m_SelectedRegions = regions; - //Note: we do not call this->Modified() on puprose. Reason: changing the - //selected regions should not force to run otsu filter in DoUpdatePreview due to changed MTime. - } -} - -mitk::OtsuTool3D::SelectedRegionVectorType mitk::OtsuTool3D::GetSelectedRegions() const -{ - return this->m_SelectedRegions; -} - void mitk::OtsuTool3D::Activated() { Superclass::Activated(); - m_SelectedRegions = {}; m_NumberOfBins = 128; m_NumberOfRegions = 2; m_UseValley = false; - - m_OtsuResultNode = mitk::DataNode::New(); - m_OtsuResultNode->SetName("Otsu_Preview"); - // m_MultiLabelResultNode->SetBoolProperty("helper object", true); - m_OtsuResultNode->SetVisibility(true); - m_OtsuResultNode->SetOpacity(1.0); - - m_ToolManager->GetDataStorage()->Add(m_OtsuResultNode); -} - -void mitk::OtsuTool3D::Deactivated() -{ - m_ToolManager->GetDataStorage()->Remove(m_OtsuResultNode); - m_OtsuResultNode = nullptr; - - Superclass::Deactivated(); } const char **mitk::OtsuTool3D::GetXPM() const { return nullptr; } us::ModuleResource mitk::OtsuTool3D::GetIconResource() const { us::Module *module = us::GetModuleContext()->GetModule(); us::ModuleResource resource = module->GetResource("Otsu_48x48.png"); return resource; } const char* mitk::OtsuTool3D::GetName() const { return "Otsu"; } -void mitk::OtsuTool3D::UpdateCleanUp() -{ - if (m_OtsuResultNode.IsNotNull()) - m_OtsuResultNode->SetVisibility(m_SelectedRegions.empty()); - - if (nullptr != this->GetPreviewSegmentationNode()) - this->GetPreviewSegmentationNode()->SetVisibility(!m_SelectedRegions.empty()); - - if (m_SelectedRegions.empty()) - { - this->ResetPreviewNode(); - } -} - -void mitk::OtsuTool3D::DoUpdatePreview(const Image* inputAtTimeStep, Image* previewImage, TimeStepType timeStep) +mitk::LabelSetImage::Pointer mitk::OtsuTool3D::ComputeMLPreview(const Image* inputAtTimeStep, TimeStepType /*timeStep*/) { int numberOfThresholds = m_NumberOfRegions - 1; - const auto timePoint = mitk::RenderingManager::GetInstance()->GetTimeNavigationController()->GetSelectedTimePoint(); - mitk::LabelSetImage::Pointer otsuResultImage = dynamic_cast(this->m_OtsuResultNode->GetData()); - - if (nullptr == m_OtsuResultNode->GetData() - || this->GetMTime() > m_OtsuResultNode->GetData()->GetMTime() - || this->m_LastOtsuTimeStep != timeStep //this covers the case where dynamic - //segmentations have to compute a preview - //for all time steps on confirmation - || this->GetLastTimePointOfUpdate() != timePoint //this ensures that static seg - //previews work with dynamic images - //with avoiding unnecessary other otsu computations - ) - { - if (nullptr == inputAtTimeStep) - { - MITK_WARN << "Cannot run segementation. Currently selected input image is not set."; - return; - } - - this->m_LastOtsuTimeStep = timeStep; - - mitk::OtsuSegmentationFilter::Pointer otsuFilter = mitk::OtsuSegmentationFilter::New(); - otsuFilter->SetNumberOfThresholds(numberOfThresholds); - otsuFilter->SetValleyEmphasis(m_UseValley); - otsuFilter->SetNumberOfBins(m_NumberOfBins); - otsuFilter->SetInput(inputAtTimeStep); - otsuFilter->AddObserver(itk::ProgressEvent(), m_ProgressCommand); - - try - { - otsuFilter->Update(); - } - catch (...) - { - mitkThrow() << "itkOtsuFilter error (image dimension must be in {2, 3} and image must not be RGB)"; - } - - otsuResultImage = mitk::LabelSetImage::New(); - otsuResultImage->InitializeByLabeledImage(otsuFilter->GetOutput()); - this->m_OtsuResultNode->SetData(otsuResultImage); - this->m_OtsuResultNode->SetProperty("binary", mitk::BoolProperty::New(false)); - mitk::RenderingModeProperty::Pointer renderingMode = mitk::RenderingModeProperty::New(); - renderingMode->SetValue(mitk::RenderingModeProperty::LOOKUPTABLE_LEVELWINDOW_COLOR); - this->m_OtsuResultNode->SetProperty("Image Rendering.Mode", renderingMode); - mitk::LookupTable::Pointer lut = mitk::LookupTable::New(); - mitk::LookupTableProperty::Pointer prop = mitk::LookupTableProperty::New(lut); - vtkSmartPointer lookupTable = vtkSmartPointer::New(); - lookupTable->SetHueRange(1.0, 0.0); - lookupTable->SetSaturationRange(1.0, 1.0); - lookupTable->SetValueRange(1.0, 1.0); - lookupTable->SetTableRange(-1.0, 1.0); - lookupTable->Build(); - lut->SetVtkLookupTable(lookupTable); - prop->SetLookupTable(lut); - this->m_OtsuResultNode->SetProperty("LookupTable", prop); - mitk::LevelWindowProperty::Pointer levWinProp = mitk::LevelWindowProperty::New(); - mitk::LevelWindow levelwindow; - levelwindow.SetRangeMinMax(0, numberOfThresholds + 1); - levWinProp->SetLevelWindow(levelwindow); - this->m_OtsuResultNode->SetProperty("levelwindow", levWinProp); - } + mitk::OtsuSegmentationFilter::Pointer otsuFilter = mitk::OtsuSegmentationFilter::New(); + otsuFilter->SetNumberOfThresholds(numberOfThresholds); + otsuFilter->SetValleyEmphasis(m_UseValley); + otsuFilter->SetNumberOfBins(m_NumberOfBins); + otsuFilter->SetInput(inputAtTimeStep); + otsuFilter->AddObserver(itk::ProgressEvent(), m_ProgressCommand); - if (!m_SelectedRegions.empty()) + try { - AccessByItk_n(otsuResultImage, CalculatePreview, (previewImage, timeStep)); + otsuFilter->Update(); } -} - -template -void mitk::OtsuTool3D::CalculatePreview(itk::Image *itkImage, mitk::Image* segmentation, unsigned int timeStep) -{ - typedef itk::Image InputImageType; - typedef itk::Image OutputImageType; - - typedef itk::BinaryThresholdImageFilter FilterType; - - typename FilterType::Pointer filter = FilterType::New(); - - // InputImageType::Pointer itkImage; - typename OutputImageType::Pointer itkBinaryResultImage; - - filter->SetInput(itkImage); - filter->SetLowerThreshold(m_SelectedRegions[0]); - filter->SetUpperThreshold(m_SelectedRegions[0]); - filter->SetInsideValue(1); - filter->SetOutsideValue(0); - filter->AddObserver(itk::ProgressEvent(), m_ProgressCommand); - filter->Update(); - itkBinaryResultImage = filter->GetOutput(); - itkBinaryResultImage->DisconnectPipeline(); - - // if more than one region id is used compute the union of all given binary regions - for (const auto regionID : m_SelectedRegions) + catch (...) { - if (regionID != m_SelectedRegions[0]) - { - filter->SetLowerThreshold(regionID); - filter->SetUpperThreshold(regionID); - filter->SetInsideValue(1); - filter->SetOutsideValue(0); - filter->Update(); - - typename OutputImageType::Pointer tempImage = filter->GetOutput(); - - typename itk::OrImageFilter::Pointer orFilter = - itk::OrImageFilter::New(); - orFilter->SetInput1(tempImage); - orFilter->SetInput2(itkBinaryResultImage); - orFilter->AddObserver(itk::ProgressEvent(), m_ProgressCommand); - - orFilter->UpdateLargestPossibleRegion(); - itkBinaryResultImage = orFilter->GetOutput(); - } + mitkThrow() << "itkOtsuFilter error (image dimension must be in {2, 3} and image must not be RGB)"; } - //---------------------------------------------------------------------------------------------------- - segmentation->SetVolume((void*)(itkBinaryResultImage->GetPixelContainer()->GetBufferPointer()), timeStep); + auto otsuResultImage = mitk::LabelSetImage::New(); + otsuResultImage->InitializeByLabeledImage(otsuFilter->GetOutput()); + return otsuResultImage; } unsigned int mitk::OtsuTool3D::GetMaxNumberOfBins() const { const auto min = this->GetReferenceData()->GetStatistics()->GetScalarValueMin(); const auto max = this->GetReferenceData()->GetStatistics()->GetScalarValueMaxNoRecompute(); return static_cast(max - min) + 1; } diff --git a/Modules/Segmentation/Interactions/mitkOtsuTool3D.h b/Modules/Segmentation/Interactions/mitkOtsuTool3D.h index 7761ec60dd..3703b237a6 100644 --- a/Modules/Segmentation/Interactions/mitkOtsuTool3D.h +++ b/Modules/Segmentation/Interactions/mitkOtsuTool3D.h @@ -1,80 +1,64 @@ /*============================================================================ The Medical Imaging Interaction Toolkit (MITK) Copyright (c) German Cancer Research Center (DKFZ) All rights reserved. Use of this source code is governed by a 3-clause BSD license that can be found in the LICENSE file. ============================================================================*/ #ifndef MITKOTSUTOOL3D_H #define MITKOTSUTOOL3D_H -#include "itkImage.h" -#include "mitkAutoSegmentationWithPreviewTool.h" -#include "mitkDataNode.h" +#include "mitkAutoMLSegmentationWithPreviewTool.h" #include namespace us { class ModuleResource; } namespace mitk { class Image; - class MITKSEGMENTATION_EXPORT OtsuTool3D : public AutoSegmentationWithPreviewTool + class MITKSEGMENTATION_EXPORT OtsuTool3D : public AutoMLSegmentationWithPreviewTool { public: - mitkClassMacro(OtsuTool3D, AutoSegmentationWithPreviewTool); + mitkClassMacro(OtsuTool3D, AutoMLSegmentationWithPreviewTool); itkFactorylessNewMacro(Self); itkCloneMacro(Self); const char *GetName() const override; const char **GetXPM() const override; us::ModuleResource GetIconResource() const override; void Activated() override; - void Deactivated() override; itkSetMacro(NumberOfBins, unsigned int); itkGetConstMacro(NumberOfBins, unsigned int); itkSetMacro(NumberOfRegions, unsigned int); itkGetConstMacro(NumberOfRegions, unsigned int); itkSetMacro(UseValley, bool); itkGetConstMacro(UseValley, bool); itkBooleanMacro(UseValley); - using SelectedRegionVectorType = std::vector; - void SetSelectedRegions(const SelectedRegionVectorType& regions); - SelectedRegionVectorType GetSelectedRegions() const; - /**Returns the number of max bins based on the current input image.*/ unsigned int GetMaxNumberOfBins() const; protected: - OtsuTool3D(); - ~OtsuTool3D() override; - - void UpdateCleanUp() override; - void DoUpdatePreview(const Image* inputAtTimeStep, Image* previewImage, TimeStepType timeStep) override; + OtsuTool3D() = default; + ~OtsuTool3D() = default; - template - void CalculatePreview(itk::Image *itkImage, mitk::Image* segmentation, unsigned int timeStep); + LabelSetImage::Pointer ComputeMLPreview(const Image* inputAtTimeStep, TimeStepType timeStep) override; unsigned int m_NumberOfBins = 128; unsigned int m_NumberOfRegions = 2; bool m_UseValley = false; - SelectedRegionVectorType m_SelectedRegions = {}; - - // holds the multilabel result as a preview image - mitk::DataNode::Pointer m_OtsuResultNode; - TimeStepType m_LastOtsuTimeStep = 0; }; // class } // namespace #endif diff --git a/Modules/SegmentationUI/Qmitk/QmitkOtsuTool3DGUI.cpp b/Modules/SegmentationUI/Qmitk/QmitkOtsuTool3DGUI.cpp index 031b353dab..9e925b66ba 100644 --- a/Modules/SegmentationUI/Qmitk/QmitkOtsuTool3DGUI.cpp +++ b/Modules/SegmentationUI/Qmitk/QmitkOtsuTool3DGUI.cpp @@ -1,214 +1,194 @@ /*============================================================================ The Medical Imaging Interaction Toolkit (MITK) Copyright (c) German Cancer Research Center (DKFZ) All rights reserved. Use of this source code is governed by a 3-clause BSD license that can be found in the LICENSE file. ============================================================================*/ #include "QmitkOtsuTool3DGUI.h" -#include "QmitkConfirmSegmentationDialog.h" #include -#include -#include -#include -#include -#include MITK_TOOL_GUI_MACRO(MITKSEGMENTATIONUI_EXPORT, QmitkOtsuTool3DGUI, "") QmitkOtsuTool3DGUI::QmitkOtsuTool3DGUI() : QmitkToolGUI(), m_NumberOfRegions(0) { m_Controls.setupUi(this); connect(m_Controls.previewButton, SIGNAL(clicked()), this, SLOT(OnSpinboxValueAccept())); - connect(m_Controls.m_selectionListWidget, SIGNAL(itemSelectionChanged()), this, SLOT(OnRegionSelectionChanged())); + connect(m_Controls.m_selectionListWidget, &QmitkSimpleLabelSetListWidget::SelectedLabelsChanged, this, &QmitkOtsuTool3DGUI::OnRegionSelectionChanged); connect(m_Controls.m_Spinbox, SIGNAL(valueChanged(int)), this, SLOT(OnRegionSpinboxChanged(int))); connect(m_Controls.m_ConfSegButton, SIGNAL(clicked()), this, SLOT(OnSegmentationRegionAccept())); connect(this, SIGNAL(NewToolAssociated(mitk::Tool *)), this, SLOT(OnNewToolAssociated(mitk::Tool *))); connect(m_Controls.advancedSettingsButton, SIGNAL(toggled(bool)), this, SLOT(OnAdvancedSettingsButtonToggled(bool))); this->OnAdvancedSettingsButtonToggled(false); } QmitkOtsuTool3DGUI::~QmitkOtsuTool3DGUI() { if (m_OtsuTool3DTool.IsNotNull()) { m_OtsuTool3DTool->CurrentlyBusy -= mitk::MessageDelegate1(this, &QmitkOtsuTool3DGUI::BusyStateChanged); } } void QmitkOtsuTool3DGUI::OnRegionSpinboxChanged(int numberOfRegions) { // we have to change to minimum number of histogram bins accordingly int curBinValue = m_Controls.m_BinsSpinBox->value(); if (curBinValue < numberOfRegions) m_Controls.m_BinsSpinBox->setValue(numberOfRegions); } -void QmitkOtsuTool3DGUI::OnRegionSelectionChanged() +void QmitkOtsuTool3DGUI::OnRegionSelectionChanged(const QmitkSimpleLabelSetListWidget::LabelVectorType& selectedLabels) { - m_SelectedItems = m_Controls.m_selectionListWidget->selectedItems(); - if (m_OtsuTool3DTool.IsNotNull()) { - // update preview of region - QList::Iterator it; - std::vector regionIDs; - for (it = m_SelectedItems.begin(); it != m_SelectedItems.end(); ++it) - regionIDs.push_back((*it)->text().toInt()); + mitk::AutoMLSegmentationWithPreviewTool::SelectedLabelVectorType labelIDs; + for (const auto& label : selectedLabels) + { + labelIDs.push_back(label->GetValue()); + } - m_OtsuTool3DTool->SetSelectedRegions(regionIDs); + m_OtsuTool3DTool->SetSelectedLabels(labelIDs); m_OtsuTool3DTool->UpdatePreview(); - m_Controls.m_ConfSegButton->setEnabled(!regionIDs.empty()); + m_Controls.m_ConfSegButton->setEnabled(!labelIDs.empty()); } } void QmitkOtsuTool3DGUI::OnAdvancedSettingsButtonToggled(bool toggled) { m_Controls.m_ValleyCheckbox->setVisible(toggled); m_Controls.binLabel->setVisible(toggled); m_Controls.m_BinsSpinBox->setVisible(toggled); if (toggled) { int max = m_OtsuTool3DTool->GetMaxNumberOfBins(); if (max >= m_Controls.m_BinsSpinBox->minimum()) { m_Controls.m_BinsSpinBox->setMaximum(max); } } } void QmitkOtsuTool3DGUI::OnNewToolAssociated(mitk::Tool *tool) { if (m_OtsuTool3DTool.IsNotNull()) { m_OtsuTool3DTool->CurrentlyBusy -= mitk::MessageDelegate1(this, &QmitkOtsuTool3DGUI::BusyStateChanged); } m_OtsuTool3DTool = dynamic_cast(tool); if (m_OtsuTool3DTool.IsNotNull()) { m_OtsuTool3DTool->CurrentlyBusy += mitk::MessageDelegate1(this, &QmitkOtsuTool3DGUI::BusyStateChanged); m_OtsuTool3DTool->SetOverwriteExistingSegmentation(true); m_OtsuTool3DTool->IsTimePointChangeAwareOff(); m_Controls.m_CheckProcessAll->setVisible(m_OtsuTool3DTool->GetTargetSegmentationNode()->GetData()->GetTimeSteps() > 1); } } void QmitkOtsuTool3DGUI::OnSegmentationRegionAccept() { - QmitkConfirmSegmentationDialog dialog; QString segName = QString::fromStdString(m_OtsuTool3DTool->GetCurrentSegmentationName()); if (m_OtsuTool3DTool.IsNotNull()) { if (this->m_Controls.m_CheckCreateNew->isChecked()) { m_OtsuTool3DTool->SetOverwriteExistingSegmentation(false); } else { m_OtsuTool3DTool->SetOverwriteExistingSegmentation(true); } m_OtsuTool3DTool->SetCreateAllTimeSteps(this->m_Controls.m_CheckProcessAll->isChecked()); this->m_Controls.m_ConfSegButton->setEnabled(false); m_OtsuTool3DTool->ConfirmSegmentation(); } } void QmitkOtsuTool3DGUI::OnSpinboxValueAccept() { if (m_NumberOfRegions == m_Controls.m_Spinbox->value() && m_UseValleyEmphasis == m_Controls.m_ValleyCheckbox->isChecked() && m_NumberOfBins == m_Controls.m_BinsSpinBox->value()) return; if (m_OtsuTool3DTool.IsNotNull()) { try { int proceed; QMessageBox *messageBox = new QMessageBox(QMessageBox::Question, nullptr, "The otsu segmentation computation may take several minutes depending " "on the number of Regions you selected. Proceed anyway?", QMessageBox::Ok | QMessageBox::Cancel); if (m_Controls.m_Spinbox->value() >= 5) { proceed = messageBox->exec(); if (proceed != QMessageBox::Ok) return; } m_NumberOfRegions = m_Controls.m_Spinbox->value(); m_UseValleyEmphasis = m_Controls.m_ValleyCheckbox->isChecked(); m_NumberOfBins = m_Controls.m_BinsSpinBox->value(); m_OtsuTool3DTool->SetNumberOfRegions(m_NumberOfRegions); m_OtsuTool3DTool->SetUseValley(m_UseValleyEmphasis); m_OtsuTool3DTool->SetNumberOfBins(m_NumberOfBins); m_OtsuTool3DTool->UpdatePreview(); } catch (...) { this->setCursor(Qt::ArrowCursor); QMessageBox *messageBox = new QMessageBox(QMessageBox::Critical, nullptr, "itkOtsuFilter error: image dimension must be in {2, 3} and no RGB images can be handled."); messageBox->exec(); delete messageBox; return; } - // insert regions into widget - QString itemName; - QListWidgetItem *item; - m_Controls.m_selectionListWidget->clear(); - for (int i = 0; i < m_Controls.m_Spinbox->value(); ++i) - { - itemName = QString::number(i); - item = new QListWidgetItem(itemName); - m_Controls.m_selectionListWidget->addItem(item); - } - // deactivate 'confirm segmentation'-button - m_Controls.m_ConfSegButton->setEnabled(false); + m_Controls.m_selectionListWidget->SetLabelSetImage(m_OtsuTool3DTool->GetMLPreview()); m_OtsuTool3DTool->IsTimePointChangeAwareOn(); } } void QmitkOtsuTool3DGUI::BusyStateChanged(bool value) { if (value) { QApplication::setOverrideCursor(QCursor(Qt::BusyCursor)); } else { QApplication::restoreOverrideCursor(); } m_Controls.m_ValleyCheckbox->setEnabled(!value); m_Controls.binLabel->setEnabled(!value); m_Controls.m_BinsSpinBox->setEnabled(!value); - m_Controls.m_ConfSegButton->setEnabled(!m_OtsuTool3DTool->GetSelectedRegions().empty() && !value); + m_Controls.m_ConfSegButton->setEnabled(!m_OtsuTool3DTool->GetSelectedLabels().empty() && !value); m_Controls.m_CheckProcessAll->setEnabled(!value); m_Controls.m_CheckCreateNew->setEnabled(!value); m_Controls.previewButton->setEnabled(!value); } diff --git a/Modules/SegmentationUI/Qmitk/QmitkOtsuTool3DGUI.h b/Modules/SegmentationUI/Qmitk/QmitkOtsuTool3DGUI.h index ce2ad862fe..e7a3762c43 100644 --- a/Modules/SegmentationUI/Qmitk/QmitkOtsuTool3DGUI.h +++ b/Modules/SegmentationUI/Qmitk/QmitkOtsuTool3DGUI.h @@ -1,83 +1,75 @@ /*============================================================================ The Medical Imaging Interaction Toolkit (MITK) Copyright (c) German Cancer Research Center (DKFZ) All rights reserved. Use of this source code is governed by a 3-clause BSD license that can be found in the LICENSE file. ============================================================================*/ #ifndef QmitkOtsuTool3DGUI_h_Included #define QmitkOtsuTool3DGUI_h_Included #include "QmitkToolGUI.h" #include "mitkOtsuTool3D.h" + #include "ui_QmitkOtsuToolWidgetControls.h" + #include -#include #include -class QSpinBox; -class QLabel; - /** \ingroup org_mitk_gui_qt_interactivesegmentation_internal \brief GUI for mitk::. \sa mitk:: This GUI shows ... Last contributor: $Author$ */ class MITKSEGMENTATIONUI_EXPORT QmitkOtsuTool3DGUI : public QmitkToolGUI { Q_OBJECT public: mitkClassMacro(QmitkOtsuTool3DGUI, QmitkToolGUI); itkFactorylessNewMacro(Self); itkCloneMacro(Self); - signals : +protected slots : - public slots : - - protected slots : - - void OnNewToolAssociated(mitk::Tool *); + void OnNewToolAssociated(mitk::Tool *); void OnSpinboxValueAccept(); void OnSegmentationRegionAccept(); - void OnRegionSelectionChanged(); + void OnRegionSelectionChanged(const QmitkSimpleLabelSetListWidget::LabelVectorType& selectedLabels); void OnRegionSpinboxChanged(int); private slots: void OnAdvancedSettingsButtonToggled(bool toggled); protected: QmitkOtsuTool3DGUI(); ~QmitkOtsuTool3DGUI() override; void BusyStateChanged(bool value) override; mitk::OtsuTool3D::Pointer m_OtsuTool3DTool; Ui_QmitkOtsuToolWidgetControls m_Controls; int m_NumberOfRegions; bool m_UseValleyEmphasis; int m_NumberOfBins; - - QList m_SelectedItems; }; #endif diff --git a/Modules/SegmentationUI/Qmitk/QmitkOtsuToolWidgetControls.ui b/Modules/SegmentationUI/Qmitk/QmitkOtsuToolWidgetControls.ui index 392cd05848..a6c8cb30fd 100644 --- a/Modules/SegmentationUI/Qmitk/QmitkOtsuToolWidgetControls.ui +++ b/Modules/SegmentationUI/Qmitk/QmitkOtsuToolWidgetControls.ui @@ -1,231 +1,227 @@ QmitkOtsuToolWidgetControls 0 0 192 - 300 + 352 0 0 100 0 100000 100000 QmitkOtsuToolWidget QLayout::SetNoConstraint 0 0 Number of Regions: 0 0 40 16777215 2 32 0 0 0 32 Advanced settings Qt::ToolButtonTextBesideIcon true Use Valley Emphasis Number of Histogram Bins: 2 4096 128 - + 0 0 10000000 100 - - 0 - - - QAbstractItemView::MultiSelection - - - QListView::Adjust - 0 0 100000 16777215 Preview false 0 0 100000 16777215 Confirm Segmentation Process/overwrite all time steps of the dynamic segmentation and not just the currently visible time step. Process all time steps Add the confirmed segmentation as a new segmentation instead of overwriting the currently selected. Create as new segmentation ctkExpandButton QToolButton
ctkExpandButton.h
-
+ + QmitkSimpleLabelSetListWidget + QWidget +
QmitkSimpleLabelSetListWidget.h
+
+