--- /dev/null
+#include <cpPlugins/Plugins/OtsuThresholdImageFilter.h>
+#include <cpPlugins/Interface/Image.h>
+
+#include <complex>
+
+#define ITK_MANUAL_INSTANTIATION
+#include <itkImage.h>
+
+#include <itkCovariantVector.h>
+#include <itkDiffusionTensor3D.h>
+#include <itkPoint.h>
+#include <itkRGBPixel.h>
+#include <itkRGBAPixel.h>
+#include <itkSymmetricSecondRankTensor.h>
+#include <itkVector.h>
+
+#undef ITK_MANUAL_INSTANTIATION
+#include <itkOtsuThresholdImageFilter.h>
+
+// -------------------------------------------------------------------------
+cpPlugins::Plugins::OtsuThresholdImageFilter::
+OtsuThresholdImageFilter( )
+ : Superclass( )
+{
+ this->m_ClassName = "cpPlugins::OtsuThresholdImageFilter";
+ this->m_ClassCategory = "ImageToImageFilter";
+ this->SetNumberOfInputs( 1 );
+ this->SetNumberOfOutputs( 1 );
+ this->_MakeOutput< cpPlugins::Interface::Image >( 0 );
+
+ using namespace cpPlugins::Interface;
+ this->m_DefaultParameters.Configure( Parameters::Uint, "NumberOfHistogramBins" );
+ this->m_DefaultParameters.Configure( Parameters::Real, "InsideValue" );
+ this->m_DefaultParameters.Configure( Parameters::Real, "OutsideValue" );
+ this->m_Parameters = this->m_DefaultParameters;
+}
+
+// -------------------------------------------------------------------------
+cpPlugins::Plugins::OtsuThresholdImageFilter::
+~OtsuThresholdImageFilter( )
+{
+}
+
+// -------------------------------------------------------------------------
+std::string cpPlugins::Plugins::OtsuThresholdImageFilter::
+_GenerateData( )
+{
+ itk::DataObject* i = this->m_Inputs[ 0 ]->GetITKDataObject( );
+ return( this->_DemangleImageDimension( i ) );
+}
+
+// -------------------------------------------------------------------------
+namespace cpPlugins
+{
+ namespace Plugins
+ {
+ cpPlugins_Image_Demangle_Methods_Code_Only_Scalars(
+ OtsuThresholdImageFilter, _DemangleInput
+ );
+ }
+}
+
+// -------------------------------------------------------------------------
+template< class I >
+std::string cpPlugins::Plugins::OtsuThresholdImageFilter::
+_DemangleInput( itk::DataObject* image )
+{
+ if( this->m_Parameters.HasStringValue( "OutputType" ) )
+ {
+ std::string output_type = this->m_Parameters.GetValueAsString( "OutputType" );
+ std::string r = "";
+ if( output_type == "char" )
+ r = this->_RealGD< I, itk::Image< char, I::ImageDimension > >( image );
+ else if( output_type == "uchar" )
+ r = this->_RealGD< I, itk::Image< unsigned char, I::ImageDimension > >( image );
+ else if( output_type == "short" )
+ r = this->_RealGD< I, itk::Image< short, I::ImageDimension > >( image );
+ else if( output_type == "ushort" )
+ r = this->_RealGD< I, itk::Image< unsigned short, I::ImageDimension > >( image );
+ else if( output_type == "int" )
+ r = this->_RealGD< I, itk::Image< int, I::ImageDimension > >( image );
+ else if( output_type == "uint" )
+ r = this->_RealGD< I, itk::Image< unsigned int, I::ImageDimension > >( image );
+ else if( output_type == "long" )
+ r = this->_RealGD< I, itk::Image< long, I::ImageDimension > >( image );
+ else if( output_type == "ulong" )
+ r = this->_RealGD< I, itk::Image< unsigned long, I::ImageDimension > >( image );
+ else if( output_type == "float" )
+ r = this->_RealGD< I, itk::Image< float, I::ImageDimension > >( image );
+ else if( output_type == "double" )
+ r = this->_RealGD< I, itk::Image< double, I::ImageDimension > >( image );
+ else
+ r = "OtsuThresholdImageFilter: Invalid output type.";
+ }
+ else
+ return( this->_RealGD< I, I >( image ) );
+}
+
+// -------------------------------------------------------------------------
+template< class I, class O >
+std::string cpPlugins::Plugins::OtsuThresholdImageFilter::
+_RealGD( itk::DataObject* image )
+{
+ typedef itk::OtsuThresholdImageFilter< I, O > _F;
+ typedef typename O::PixelType _OP;
+
+ unsigned int bins = this->m_Parameters.GetValueAsUint( "NumberOfHistogramBins" );
+ _OP in = _OP( this->m_Parameters.GetValueAsReal( "InsideValue" ) );
+ _OP out = _OP( this->m_Parameters.GetValueAsReal( "OutsideValue" ) );
+
+ _F* filter = dynamic_cast< _F* >( this->m_RealProcessObject.GetPointer( ) );
+ if( filter == NULL )
+ {
+ this->m_RealProcessObject = _F::New( );
+ filter = dynamic_cast< _F* >( this->m_RealProcessObject.GetPointer( ) );
+
+ } // fi
+ filter->SetInput( dynamic_cast< I* >( image ) );
+ filter->SetNumberOfHistogramBins( bins );
+ filter->SetInsideValue( in );
+ filter->SetOutsideValue( out );
+ filter->Update( );
+ this->m_Outputs[ 0 ]->SetITKDataObject( filter->GetOutput( ) );
+
+ return( "" );
+}
+
+// eof - $RCSfile$