1 #include <cpPlugins/Plugins/OtsuThresholdImageFilter.h>
2 #include <cpPlugins/Interface/Image.h>
6 #define ITK_MANUAL_INSTANTIATION
9 #include <itkCovariantVector.h>
10 #include <itkDiffusionTensor3D.h>
12 #include <itkRGBPixel.h>
13 #include <itkRGBAPixel.h>
14 #include <itkSymmetricSecondRankTensor.h>
15 #include <itkVector.h>
17 #undef ITK_MANUAL_INSTANTIATION
18 #include <itkOtsuThresholdImageFilter.h>
20 // -------------------------------------------------------------------------
21 cpPlugins::Plugins::OtsuThresholdImageFilter::
22 OtsuThresholdImageFilter( )
25 this->m_ClassName = "cpPlugins::OtsuThresholdImageFilter";
26 this->m_ClassCategory = "ImageToImageFilter";
27 this->SetNumberOfInputs( 1 );
28 this->SetNumberOfOutputs( 1 );
29 this->_MakeOutput< cpPlugins::Interface::Image >( 0 );
31 using namespace cpPlugins::Interface;
32 this->m_DefaultParameters.Configure( Parameters::Uint, "NumberOfHistogramBins" );
33 this->m_DefaultParameters.Configure( Parameters::Real, "InsideValue" );
34 this->m_DefaultParameters.Configure( Parameters::Real, "OutsideValue" );
35 this->m_Parameters = this->m_DefaultParameters;
38 // -------------------------------------------------------------------------
39 cpPlugins::Plugins::OtsuThresholdImageFilter::
40 ~OtsuThresholdImageFilter( )
44 // -------------------------------------------------------------------------
45 std::string cpPlugins::Plugins::OtsuThresholdImageFilter::
48 itk::DataObject* i = this->m_Inputs[ 0 ]->GetITKDataObject( );
49 return( this->_DemangleImageDimension( i ) );
52 // -------------------------------------------------------------------------
57 cpPlugins_Image_Demangle_Methods_Code_Only_Scalars(
58 OtsuThresholdImageFilter, _DemangleInput
63 // -------------------------------------------------------------------------
65 std::string cpPlugins::Plugins::OtsuThresholdImageFilter::
66 _DemangleInput( itk::DataObject* image )
68 if( this->m_Parameters.HasStringValue( "OutputType" ) )
70 std::string output_type = this->m_Parameters.GetValueAsString( "OutputType" );
72 if( output_type == "char" )
73 r = this->_RealGD< I, itk::Image< char, I::ImageDimension > >( image );
74 else if( output_type == "uchar" )
75 r = this->_RealGD< I, itk::Image< unsigned char, I::ImageDimension > >( image );
76 else if( output_type == "short" )
77 r = this->_RealGD< I, itk::Image< short, I::ImageDimension > >( image );
78 else if( output_type == "ushort" )
79 r = this->_RealGD< I, itk::Image< unsigned short, I::ImageDimension > >( image );
80 else if( output_type == "int" )
81 r = this->_RealGD< I, itk::Image< int, I::ImageDimension > >( image );
82 else if( output_type == "uint" )
83 r = this->_RealGD< I, itk::Image< unsigned int, I::ImageDimension > >( image );
84 else if( output_type == "long" )
85 r = this->_RealGD< I, itk::Image< long, I::ImageDimension > >( image );
86 else if( output_type == "ulong" )
87 r = this->_RealGD< I, itk::Image< unsigned long, I::ImageDimension > >( image );
88 else if( output_type == "float" )
89 r = this->_RealGD< I, itk::Image< float, I::ImageDimension > >( image );
90 else if( output_type == "double" )
91 r = this->_RealGD< I, itk::Image< double, I::ImageDimension > >( image );
93 r = "OtsuThresholdImageFilter: Invalid output type.";
96 return( this->_RealGD< I, I >( image ) );
99 // -------------------------------------------------------------------------
100 template< class I, class O >
101 std::string cpPlugins::Plugins::OtsuThresholdImageFilter::
102 _RealGD( itk::DataObject* image )
104 typedef itk::OtsuThresholdImageFilter< I, O > _F;
105 typedef typename O::PixelType _OP;
107 unsigned int bins = this->m_Parameters.GetValueAsUint( "NumberOfHistogramBins" );
108 _OP in = _OP( this->m_Parameters.GetValueAsReal( "InsideValue" ) );
109 _OP out = _OP( this->m_Parameters.GetValueAsReal( "OutsideValue" ) );
111 _F* filter = dynamic_cast< _F* >( this->m_RealProcessObject.GetPointer( ) );
114 this->m_RealProcessObject = _F::New( );
115 filter = dynamic_cast< _F* >( this->m_RealProcessObject.GetPointer( ) );
118 filter->SetInput( dynamic_cast< I* >( image ) );
119 filter->SetNumberOfHistogramBins( bins );
120 filter->SetInsideValue( in );
121 filter->SetOutsideValue( out );
123 this->m_Outputs[ 0 ]->SetITKDataObject( filter->GetOutput( ) );