diff --git a/Modules/Segmentation/Interactions/mitkCloseRegionTool.cpp b/Modules/Segmentation/Interactions/mitkCloseRegionTool.cpp index 76e30c421a..d6939b7c24 100644 --- a/Modules/Segmentation/Interactions/mitkCloseRegionTool.cpp +++ b/Modules/Segmentation/Interactions/mitkCloseRegionTool.cpp @@ -1,120 +1,119 @@ /*============================================================================ 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 "mitkCloseRegionTool.h" // us #include #include #include #include #include #include #include namespace mitk { MITK_TOOL_MACRO(MITKSEGMENTATION_EXPORT, CloseRegionTool, "Close tool"); } const char **mitk::CloseRegionTool::GetXPM() const { return nullptr; } us::ModuleResource mitk::CloseRegionTool::GetIconResource() const { us::Module *module = us::GetModuleContext()->GetModule(); us::ModuleResource resource = module->GetResource("Close.svg"); return resource; } us::ModuleResource mitk::CloseRegionTool::GetCursorIconResource() const { us::Module *module = us::GetModuleContext()->GetModule(); us::ModuleResource resource = module->GetResource("Close_Cursor.svg"); return resource; } const char *mitk::CloseRegionTool::GetName() const { return "Close"; } template void DoITKRegionClosing(const itk::Image* oldSegImage, mitk::Image::Pointer& filledRegionImage, itk::Index seedIndex, mitk::Label::PixelType& seedLabel) { typedef itk::Image InputImageType; typedef itk::Image OutputImageType; typedef itk::ConnectedThresholdImageFilter RegionGrowingFilterType; using FillHoleFilter = itk::BinaryFillholeImageFilter; seedLabel = oldSegImage->GetPixel(seedIndex); typename OutputImageType::Pointer itkResultImage; filledRegionImage = nullptr; try { auto regionGrower = RegionGrowingFilterType::New(); regionGrower->SetInput(oldSegImage); regionGrower->SetReplaceValue(1); regionGrower->AddSeed(seedIndex); regionGrower->SetLower(seedLabel); regionGrower->SetUpper(seedLabel); auto filler = FillHoleFilter::New(); filler->SetInput(regionGrower->GetOutput()); filler->SetForegroundValue(1); filler->Update(); itkResultImage = filler->GetOutput(); } catch (const itk::ExceptionObject&) { return; // can't work } catch (...) { return; } mitk::CastToMitkImage(itkResultImage, filledRegionImage); } mitk::Image::Pointer mitk::CloseRegionTool::GenerateFillImage(const Image* workingSlice, Point3D seedPoint, mitk::Label::PixelType& seedLabelValue) const { itk::Index<2> seedIndex; workingSlice->GetGeometry()->WorldToIndex(seedPoint, seedIndex); Image::Pointer fillImage; AccessFixedDimensionByItk_n(workingSlice, DoITKRegionClosing, 2, (fillImage, seedIndex, seedLabelValue)); - auto labelSetImage = dynamic_cast(this->GetWorkingData()); if (seedLabelValue == LabelSetImage::UnlabeledLabelValue) { return nullptr; } return fillImage; } void mitk::CloseRegionTool::PrepareFilling(const Image* /*workingSlice*/, Point3D /*seedPoint*/) { m_FillLabelValue = m_SeedLabelValue; m_MergeStyle = MultiLabelSegmentation::MergeStyle::Merge; }; diff --git a/Modules/Segmentation/Interactions/mitkEraseRegionTool.cpp b/Modules/Segmentation/Interactions/mitkEraseRegionTool.cpp index c851cac11f..1cdf96af4d 100644 --- a/Modules/Segmentation/Interactions/mitkEraseRegionTool.cpp +++ b/Modules/Segmentation/Interactions/mitkEraseRegionTool.cpp @@ -1,93 +1,87 @@ /*============================================================================ 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 "mitkEraseRegionTool.h" #include "mitkEraseRegionTool.xpm" #include #include #include // us #include #include #include #include namespace mitk { MITK_TOOL_MACRO(MITKSEGMENTATION_EXPORT, EraseRegionTool, "Erase tool"); } const char **mitk::EraseRegionTool::GetXPM() const { return mitkEraseRegionTool_xpm; } us::ModuleResource mitk::EraseRegionTool::GetIconResource() const { us::Module *module = us::GetModuleContext()->GetModule(); us::ModuleResource resource = module->GetResource("Erase.svg"); return resource; } us::ModuleResource mitk::EraseRegionTool::GetCursorIconResource() const { us::Module *module = us::GetModuleContext()->GetModule(); us::ModuleResource resource = module->GetResource("Erase_Cursor.svg"); return resource; } const char *mitk::EraseRegionTool::GetName() const { return "Erase"; } template void DoFillImage(itk::Image* image) { image->FillBuffer(1); }; mitk::Image::Pointer mitk::EraseRegionTool::GenerateFillImage(const Image* workingSlice, Point3D seedPoint, mitk::Label::PixelType& seedLabelValue) const { - auto labelSetImage = dynamic_cast(this->GetWorkingData()); - itk::Index<2> seedIndex; workingSlice->GetGeometry()->WorldToIndex(seedPoint, seedIndex); using AccessorType = ImagePixelReadAccessor; AccessorType accessor(workingSlice); seedLabelValue = accessor.GetPixelByIndex(seedIndex); Image::Pointer fillImage; if ( seedLabelValue == LabelSetImage::UnlabeledLabelValue) { //clicked on background remove everything which is not locked. fillImage = workingSlice->Clone(); AccessByItk(fillImage, DoFillImage); } else { fillImage = Superclass::GenerateFillImage(workingSlice, seedPoint, seedLabelValue); } return fillImage; } void mitk::EraseRegionTool::PrepareFilling(const Image* /*workingSlice*/, Point3D /*seedPoint*/) { - auto labelSetImage = dynamic_cast(this->GetWorkingData()); - if (nullptr != labelSetImage) - { - m_FillLabelValue = LabelSetImage::UnlabeledLabelValue; - } + m_FillLabelValue = LabelSetImage::UnlabeledLabelValue; };