27 #include <itkBinaryBallStructuringElement.h> 28 #include <itkBinaryContourImageFilter.h> 29 #include <itkBinaryThresholdImageFilter.h> 30 #include <itkDilateObjectMorphologyImageFilter.h> 31 #include <itkErodeObjectMorphologyImageFilter.h> 36 this->SetNumberOfRequiredInputs(1);
38 this->SetNumberOfIndexedOutputs(1);
49 if (m_SegmentationMask.IsNull())
51 MITK_WARN <<
"Please set a segmentation mask first" << std::endl;
59 statCalc->SetInputImage(image);
62 imgMask->SetImageMask(m_SegmentationMask);
64 auto stats = statCalc->GetStatistics()->GetStatisticsForTimeStep(0);
68 double upperThreshold = mean + stdDev;
69 double lowerThreshold = mean - stdDev;
94 i2UFilter->SetInput(edgeImage);
95 i2UFilter->SetThreshold(1.0);
99 if (m_PointGrid.IsNull())
102 m_PointGrid->SetVtkUnstructuredGrid(i2UFilter->GetOutput()->GetVtkUnstructuredGrid());
107 template <
typename TPixel,
unsigned int VImageDimension>
111 typedef itk::BinaryBallStructuringElement<TPixel, VImageDimension> myKernelType;
115 ball.CreateStructuringElement();
117 typedef typename itk::Image<TPixel, VImageDimension>
ImageType;
119 typename itk::DilateObjectMorphologyImageFilter<ImageType, ImageType, myKernelType>::Pointer dilationFilter =
120 itk::DilateObjectMorphologyImageFilter<ImageType, ImageType, myKernelType>::New();
121 dilationFilter->SetInput(originalImage);
122 dilationFilter->SetKernel(ball);
123 dilationFilter->Update();
125 typename itk::Image<TPixel, VImageDimension>::Pointer dilatedImage = dilationFilter->GetOutput();
127 typename itk::ErodeObjectMorphologyImageFilter<ImageType, ImageType, myKernelType>::Pointer erodeFilter =
128 itk::ErodeObjectMorphologyImageFilter<ImageType, ImageType, myKernelType>::New();
129 erodeFilter->SetInput(dilatedImage);
130 erodeFilter->SetKernel(ball);
131 erodeFilter->Update();
136 template <
typename TPixel,
unsigned int VImageDimension>
140 typedef itk::Image<TPixel, VImageDimension>
ImageType;
141 typedef itk::BinaryContourImageFilter<ImageType, ImageType> binaryContourImageFilterType;
143 typename binaryContourImageFilterType::Pointer binaryContourFilter = binaryContourImageFilterType::New();
144 binaryContourFilter->SetInput(originalImage);
145 binaryContourFilter->SetForegroundValue(1);
146 binaryContourFilter->SetBackgroundValue(0);
147 binaryContourFilter->Update();
149 typename itk::Image<TPixel, VImageDimension>::Pointer itkImage = itk::Image<TPixel, VImageDimension>::New();
150 itkImage->Graft(binaryContourFilter->GetOutput());
155 template <
typename TPixel,
unsigned int VImageDimension>
161 typedef itk::Image<TPixel, VImageDimension>
ImageType;
162 typedef itk::Image<unsigned short, VImageDimension> SegmentationType;
163 typedef itk::BinaryThresholdImageFilter<ImageType, SegmentationType> ThresholdFilterType;
165 if (
typeid(TPixel) !=
typeid(
float) &&
typeid(TPixel) !=
typeid(
double))
168 lower = std::floor(lower + 0.5);
169 upper = std::floor(upper - 0.5);
176 typename ThresholdFilterType::Pointer filter = ThresholdFilterType::New();
177 filter->SetInput(originalImage);
178 filter->SetLowerThreshold(lower);
179 filter->SetUpperThreshold(upper);
180 filter->SetInsideValue(1);
181 filter->SetOutsideValue(0);
189 this->m_SegmentationMask = segmentation;
194 Superclass::GenerateOutputInformation();
void Progress(unsigned int steps=1)
Sets the current amount of progress to current progress + steps.
#define AccessByItk_3(mitkImage, itkImageTypeFunction, arg1, arg2, arg3)
void ContourSearch(itk::Image< TPixel, VImageDimension > *originalImage, mitk::Image::Pointer &result)
itk::Image< unsigned char, 3 > ImageType
void ThreadedClosing(itk::Image< TPixel, VImageDimension > *originalImage, mitk::Image::Pointer &result)
void GenerateOutputInformation() override
#define AccessByItk_1(mitkImage, itkImageTypeFunction, arg1)
static ProgressBar * GetInstance()
static method to get the GUI dependent ProgressBar-instance so the methods for steps to do and progre...
Image::Pointer GrabItkImageMemory(itk::SmartPointer< ItkOutputImageType > &itkimage, mitk::Image *mitkImage=nullptr, const BaseGeometry *geometry=nullptr, bool update=true)
Grabs the memory of an itk::Image (with a specific type) and puts it into an mitk::Image.The memory is managed by the mitk::Image after calling this function. The itk::Image remains valid until the mitk::Image decides to free the memory.
void ITKThresholding(const itk::Image< TPixel, VImageDimension > *originalImage, double lower, double upper, mitk::Image::Pointer &result)
mitk::Image::Pointer image
static const std::string STANDARDDEVIATION()
void GenerateData() override
const mitk::Image * GetInput(void) const
~FeatureBasedEdgeDetectionFilter() override
FeatureBasedEdgeDetectionFilter()
static const std::string MEAN()
static void FillHoles(mitk::Image::Pointer &image)
Perform morphological operation on 2D, 3D or 3D+t segmentation.
void SetSegmentationMask(mitk::Image::Pointer)