Medical Imaging Interaction Toolkit  2018.4.99-389bf124
Medical Imaging Interaction Toolkit
mitkOtsuSegmentationFilter.cpp
Go to the documentation of this file.
1 /*============================================================================
2 
3 The Medical Imaging Interaction Toolkit (MITK)
4 
5 Copyright (c) German Cancer Research Center (DKFZ)
6 All rights reserved.
7 
8 Use of this source code is governed by a 3-clause BSD license that can be
9 found in the LICENSE file.
10 
11 ============================================================================*/
12 
14 #include "itkOtsuMultipleThresholdsImageFilter.h"
15 #include "mitkImageAccessByItk.h"
16 #include "mitkImageCast.h"
17 
18 struct paramContainer
19 {
20  paramContainer(unsigned int numThresholds, bool useValley, unsigned int numBins, mitk::Image::Pointer image)
21  : m_NumberOfThresholds(numThresholds), m_ValleyEmphasis(useValley), m_NumberOfBins(numBins), m_Image(image)
22  {
23  }
24 
25  unsigned int m_NumberOfThresholds;
26  bool m_ValleyEmphasis;
27  unsigned int m_NumberOfBins;
28  mitk::Image::Pointer m_Image;
29 };
30 
31 template <typename TPixel, unsigned int VImageDimension>
32 void AccessItkOtsuFilter(const itk::Image<TPixel, VImageDimension> *itkImage, paramContainer params)
33 {
34  typedef itk::Image<TPixel, VImageDimension> itkInputImageType;
35  typedef itk::Image<mitk::OtsuSegmentationFilter::OutputPixelType, VImageDimension> itkOutputImageType;
36  typedef itk::OtsuMultipleThresholdsImageFilter<itkInputImageType, itkOutputImageType> OtsuFilterType;
37 
38  typename OtsuFilterType::Pointer filter = OtsuFilterType::New();
39  filter->SetNumberOfThresholds(params.m_NumberOfThresholds);
40  filter->SetInput(itkImage);
41  filter->SetValleyEmphasis(params.m_ValleyEmphasis);
42  filter->SetNumberOfHistogramBins(params.m_NumberOfBins);
43 
44  try
45  {
46  filter->Update();
47  }
48  catch (...)
49  {
50  mitkThrow() << "itkOtsuFilter error.";
51  }
52 
53  mitk::CastToMitkImage<itkOutputImageType>(filter->GetOutput(), params.m_Image);
54  return;
55 }
56 
57 namespace mitk
58 {
59  OtsuSegmentationFilter::OtsuSegmentationFilter()
60  : m_NumberOfThresholds(2), m_ValleyEmphasis(false), m_NumberOfBins(128)
61  {
62  }
63 
66  {
67  mitk::Image::ConstPointer mitkImage = GetInput();
68  AccessByItk_n(mitkImage,
70  (paramContainer(m_NumberOfThresholds, m_ValleyEmphasis, m_NumberOfBins, this->GetOutput())));
71  }
72 }
DataCollection - Class to facilitate loading/accessing structured data.
#define AccessByItk_n(mitkImage, itkImageTypeFunction, va_tuple)
Access a MITK image by an ITK image with one or more parameters.
void AccessItkOtsuFilter(const itk::Image< TPixel, VImageDimension > *itkImage, paramContainer params)
#define mitkThrow()
mitk::Image::Pointer image
InputImageType * GetInput(void)
OutputType * GetOutput()
Get the output data of this image source object.