28 #include <itkBinaryThresholdImageFilter.h> 29 #include <itkOrImageFilter.h> 30 #include <itkOtsuMultipleThresholdsImageFilter.h> 55 Superclass::Activated();
59 m_OriginalImage =
dynamic_cast<mitk::Image *
>(m_ToolManager->GetReferenceData(0)->GetData());
62 m_BinaryPreviewNode->SetName(
"Binary_Preview");
67 m_ToolManager->GetDataStorage()->Add(this->m_BinaryPreviewNode);
70 m_MultiLabelResultNode->SetName(
"Otsu_Preview");
72 m_MultiLabelResultNode->SetVisibility(
true);
75 m_MaskedImagePreviewNode->SetName(
"Volume_Preview");
77 m_MaskedImagePreviewNode->SetVisibility(
false);
79 m_ToolManager->GetDataStorage()->Add(this->m_MultiLabelResultNode);
85 m_ToolManager->GetDataStorage()->Remove(this->m_MultiLabelResultNode);
86 m_MultiLabelResultNode =
nullptr;
87 m_ToolManager->GetDataStorage()->Remove(this->m_BinaryPreviewNode);
88 m_BinaryPreviewNode =
nullptr;
89 m_ToolManager->GetDataStorage()->Remove(this->m_MaskedImagePreviewNode);
90 m_MaskedImagePreviewNode =
nullptr;
92 Superclass::Deactivated();
111 int numberOfThresholds = regions - 1;
118 otsuFilter->SetNumberOfThresholds(numberOfThresholds);
119 otsuFilter->SetValleyEmphasis(useValley);
120 otsuFilter->SetNumberOfBins(numberOfBins);
121 otsuFilter->SetInput(image3D);
125 otsuFilter->Update();
129 mitkThrow() <<
"itkOtsuFilter error (image dimension must be in {2, 3} and image must not be RGB)";
132 m_ToolManager->GetDataStorage()->Remove(this->m_MultiLabelResultNode);
133 m_MultiLabelResultNode =
nullptr;
135 m_MultiLabelResultNode->SetName(
"Otsu_Preview");
136 m_MultiLabelResultNode->SetVisibility(
true);
137 m_ToolManager->GetDataStorage()->Add(this->m_MultiLabelResultNode);
138 m_MultiLabelResultNode->SetOpacity(1.0);
141 resultImage->InitializeByLabeledImage(otsuFilter->GetOutput());
142 this->m_MultiLabelResultNode->SetData(resultImage);
146 m_MultiLabelResultNode->SetProperty(
"Image Rendering.Mode", renderingMode);
149 vtkSmartPointer<vtkLookupTable> lookupTable = vtkSmartPointer<vtkLookupTable>::New();
150 lookupTable->SetHueRange(1.0, 0.0);
151 lookupTable->SetSaturationRange(1.0, 1.0);
152 lookupTable->SetValueRange(1.0, 1.0);
153 lookupTable->SetTableRange(-1.0, 1.0);
154 lookupTable->Build();
155 lut->SetVtkLookupTable(lookupTable);
156 prop->SetLookupTable(lut);
157 m_MultiLabelResultNode->SetProperty(
"LookupTable", prop);
161 levWinProp->SetLevelWindow(levelwindow);
162 m_MultiLabelResultNode->SetProperty(
"levelwindow", levWinProp);
173 resultImage->InitializeByLabeledImage(dynamic_cast<mitk::Image *>(m_BinaryPreviewNode->GetData()));
174 GetTargetSegmentationNode()->SetData(resultImage);
176 m_ToolManager->ActivateTool(-1);
181 m_MultiLabelResultNode->SetVisibility(
false);
183 AccessByItk_1(multiLabelSegmentation, CalculatePreview, regionIDs);
186 template <
typename TPixel,
unsigned int VImageDimension>
190 typedef itk::Image<mitk::Tool::DefaultSegmentationDataType, VImageDimension> OutputImageType;
192 typedef itk::BinaryThresholdImageFilter<InputImageType, OutputImageType> FilterType;
194 typename FilterType::Pointer filter = FilterType::New();
197 typename OutputImageType::Pointer itkBinaryTempImage1;
198 typename OutputImageType::Pointer itkBinaryTempImage2;
199 typename OutputImageType::Pointer itkBinaryResultImage;
204 filter->SetInput(itkImage);
205 filter->SetLowerThreshold(regionIDs[0]);
206 filter->SetUpperThreshold(regionIDs[0]);
207 filter->SetInsideValue(1);
208 filter->SetOutsideValue(0);
210 itkBinaryTempImage2 = filter->GetOutput();
212 typename itk::OrImageFilter<OutputImageType, OutputImageType>::Pointer orFilter =
213 itk::OrImageFilter<OutputImageType, OutputImageType>::New();
216 for (
auto it = regionIDs.begin(); it != regionIDs.end(); ++it)
218 filter->SetLowerThreshold(*it);
219 filter->SetUpperThreshold(*it);
220 filter->SetInsideValue(1);
221 filter->SetOutsideValue(0);
223 itkBinaryTempImage1 = filter->GetOutput();
225 orFilter->SetInput1(itkBinaryTempImage1);
226 orFilter->SetInput2(itkBinaryTempImage2);
228 orFilter->UpdateLargestPossibleRegion();
229 itkBinaryResultImage = orFilter->GetOutput();
230 itkBinaryTempImage2 = itkBinaryResultImage;
235 m_BinaryPreviewNode->SetData(binarySegmentation);
236 m_BinaryPreviewNode->SetVisibility(
true);
285 m_MaskedImagePreviewNode->SetBoolProperty(
"volumerendering",
true);
286 m_MaskedImagePreviewNode->SetBoolProperty(
"volumerendering.uselod",
true);
290 m_MaskedImagePreviewNode->SetBoolProperty(
"volumerendering",
false);
297 m_MultiLabelResultNode->SetVisibility(show);
298 m_BinaryPreviewNode->SetVisibility(!show);
304 ScalarType min = m_OriginalImage.GetPointer()->GetStatistics()->GetScalarValueMin();
305 ScalarType max = m_OriginalImage.GetPointer()->GetStatistics()->GetScalarValueMaxNoRecompute();
306 return static_cast<int>(max -
min) + 1;
::mitk::Image InputImageType
#define MITKSEGMENTATION_EXPORT
DataCollection - Class to facilitate loading/accessing structured data.
const SliceNavigationController * GetTimeNavigationController() const
#define AccessByItk_1(mitkImage, itkImageTypeFunction, arg1)
void SetRangeMinMax(ScalarType min, ScalarType max)
The LevelWindow class Class to store level/window values.
MITK_TOOL_MACRO(MITKSEGMENTATION_EXPORT, LiveWireTool2D, "LiveWire tool")
static RenderingManager * GetInstance()
Module * GetModule() const
Image class for storing images.
ModuleResource GetResource(const std::string &path) const
void CastToMitkImage(const itk::SmartPointer< ItkOutputImageType > &itkimage, itk::SmartPointer< mitk::Image > &mitkoutputimage)
Cast an itk::Image (with a specific type) to an mitk::Image.
mitk::Stepper * GetTime()
Get the Stepper through the time.
virtual unsigned int GetPos() const
static ModuleContext * GetModuleContext()
Returns the module context of the calling module.
void RequestUpdateAll(RequestType type=REQUEST_UPDATE_ALL)