diff --git a/Modules/Segmentation/SegmentationUtilities/MorphologicalOperations/mitkMorphologicalOperations.h b/Modules/Segmentation/SegmentationUtilities/MorphologicalOperations/mitkMorphologicalOperations.h index be98517f63..2fef203e17 100644 --- a/Modules/Segmentation/SegmentationUtilities/MorphologicalOperations/mitkMorphologicalOperations.h +++ b/Modules/Segmentation/SegmentationUtilities/MorphologicalOperations/mitkMorphologicalOperations.h @@ -1,116 +1,116 @@ /*=================================================================== 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. ===================================================================*/ #ifndef mitkMorphologicalOperations_h #define mitkMorphologicalOperations_h #include #include namespace mitk { /** \brief Encapsulates several morphological operations that can be performed on segmentations. */ class MitkSegmentation_EXPORT MorphologicalOperations { public: enum StructuralElementType { Ball = 7, Ball_Axial = 1, Ball_Sagital = 2, Ball_Coronal = 4, Cross = 56, Cross_Axial = 8, Cross_Sagital = 16, Cross_Coronal = 32 }; ///@{ /** \brief Perform morphological operation on 2D, 3D or 3D+t segmentation. */ static void Closing(mitk::Image::Pointer& image, int factor, StructuralElementType structuralElement); static void Erode(mitk::Image::Pointer& image, int factor, StructuralElementType structuralElement); static void Dilate(mitk::Image::Pointer& image, int factor, StructuralElementType structuralElement); static void Opening(mitk::Image::Pointer& image, int factor, StructuralElementType structuralElement); static void FillHoles(mitk::Image::Pointer& image); ///@} private: MorphologicalOperations(); template static TStructuringElement CreateStructuringElement(StructuralElementType structuralElementFlag, int factor) { TStructuringElement strElem; typename TStructuringElement::SizeType size; size.Fill(0); switch (structuralElementFlag) { case Ball_Axial: case Cross_Axial: size.SetElement(0,factor); size.SetElement(1,factor); break; case Ball_Coronal: case Cross_Coronal: - size.SetElement(1,factor); + size.SetElement(0,factor); size.SetElement(2,factor); break; case Ball_Sagital: case Cross_Sagital: - size.SetElement(0,factor); + size.SetElement(1,factor); size.SetElement(2,factor); break; case Ball: case Cross: size.Fill(factor); break; } strElem.SetRadius(size); strElem.CreateStructuringElement(); return strElem; } ///@{ /** \brief Perform morphological operation by using corresponding ITK filter. */ template void static itkClosing(itk::Image* sourceImage, mitk::Image::Pointer& resultImage, int factor, StructuralElementType structuralElement); template void static itkErode(itk::Image* sourceImage, mitk::Image::Pointer& resultImage, int factor, StructuralElementType structuralElement); template void static itkDilate(itk::Image* sourceImage, mitk::Image::Pointer& resultImage, int factor, StructuralElementType structuralElement); template void static itkOpening(itk::Image* sourceImage, mitk::Image::Pointer& resultImage, int factor, StructuralElementType structuralElement); template void static itkFillHoles(itk::Image* sourceImage, mitk::Image::Pointer& resultImage); ///@} }; } #endif