X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=lib%2FcpPlugins%2FPlugins%2FOtsuThresholdImageFilter.cxx;h=efc7d6ace500028a371393bf6264314ecb833a3e;hb=3b51a08c6a78ed09578f198f6a13dd769d460bef;hp=38228b99bd8900b0ab5e26a6b1e64bf77dab974a;hpb=48412b66ce1d8d8831625f1a3f51f7e78825f9a1;p=cpPlugins.git diff --git a/lib/cpPlugins/Plugins/OtsuThresholdImageFilter.cxx b/lib/cpPlugins/Plugins/OtsuThresholdImageFilter.cxx index 38228b9..efc7d6a 100644 --- a/lib/cpPlugins/Plugins/OtsuThresholdImageFilter.cxx +++ b/lib/cpPlugins/Plugins/OtsuThresholdImageFilter.cxx @@ -1,20 +1,6 @@ #include #include -#include - -#define ITK_MANUAL_INSTANTIATION -#include - -#include -#include -#include -#include -#include -#include -#include - -#undef ITK_MANUAL_INSTANTIATION #include // ------------------------------------------------------------------------- @@ -29,9 +15,14 @@ OtsuThresholdImageFilter( ) this->_MakeOutput< cpPlugins::Interface::Image >( 0 ); using namespace cpPlugins::Interface; - this->m_DefaultParameters.Configure( Parameters::Uint, "NumberOfHistogramBins" ); + this->m_DefaultParameters.Configure( + Parameters::Uint, "NumberOfHistogramBins" + ); this->m_DefaultParameters.Configure( Parameters::Real, "InsideValue" ); this->m_DefaultParameters.Configure( Parameters::Real, "OutsideValue" ); + this->m_DefaultParameters.SetValueAsUint( "NumberOfHistogramBins", 100 ); + this->m_DefaultParameters.SetValueAsReal( "InsideValue", 255 ); + this->m_DefaultParameters.SetValueAsReal( "OutsideValue", 0 ); this->m_Parameters = this->m_DefaultParameters; } @@ -45,69 +36,53 @@ cpPlugins::Plugins::OtsuThresholdImageFilter:: std::string cpPlugins::Plugins::OtsuThresholdImageFilter:: _GenerateData( ) { - itk::DataObject* i = this->m_Inputs[ 0 ]->GetITKDataObject( ); - return( this->_DemangleImageDimension( i ) ); -} + cpPlugins::Interface::Image* image = + this->_Input< cpPlugins::Interface::Image >( 0 ); + if( image == NULL ) + return( "OtsuThresholdImageFilter: No input image." ); -// ------------------------------------------------------------------------- -namespace cpPlugins -{ - namespace Plugins - { - cpPlugins_Image_Demangle_Methods_Code_Only_Scalars( - OtsuThresholdImageFilter, _DemangleInput - ); - } + itk::DataObject* itk_image = NULL; + std::string r = ""; + cpPlugins_Image_Input_Demangle_Dimension_AllScalarTypes( + 2, image, itk_image, r, _DemangleOutput + ); + else cpPlugins_Image_Input_Demangle_Dimension_AllScalarTypes( + 3, image, itk_image, r, _DemangleOutput + ); + else cpPlugins_Image_Input_Demangle_Dimension_AllScalarTypes( + 4, image, itk_image, r, _DemangleOutput + ); + else r = "OtsuThresholdImageFilter: Input image type not supported."; + return( r ); } // ------------------------------------------------------------------------- template< class I > std::string cpPlugins::Plugins::OtsuThresholdImageFilter:: -_DemangleInput( itk::DataObject* image ) +_DemangleOutput( 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 ) ); + return( + this->_RealGD< I, itk::Image< unsigned char, I::ImageDimension > >( + image + ) + ); } // ------------------------------------------------------------------------- template< class I, class O > -std::string cpPlugins::Plugins::OtsuThresholdImageFilter:: +inline 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" ) ); + // Get parameters + unsigned int bins = + this->m_Parameters.GetValueAsUint( "NumberOfHistogramBins" ); + _OP in_val = _OP( this->m_Parameters.GetValueAsReal( "InsideValue" ) ); + _OP out_val = _OP( this->m_Parameters.GetValueAsReal( "OutsideValue" ) ); + // Configure filter _F* filter = dynamic_cast< _F* >( this->m_RealProcessObject.GetPointer( ) ); if( filter == NULL ) { @@ -117,12 +92,20 @@ _RealGD( itk::DataObject* image ) } // fi filter->SetInput( dynamic_cast< I* >( image ) ); filter->SetNumberOfHistogramBins( bins ); - filter->SetInsideValue( in ); - filter->SetOutsideValue( out ); + filter->SetInsideValue( in_val ); + filter->SetOutsideValue( out_val ); filter->Update( ); - this->m_Outputs[ 0 ]->SetITKDataObject( filter->GetOutput( ) ); - - return( "" ); + + // Connect output + cpPlugins::Interface::Image* out = + this->_Output< cpPlugins::Interface::Image >( 0 ); + if( out != NULL ) + { + out->SetITKImage< O >( filter->GetOutput( ) ); + return( "" ); + } + else + return( "OtsuThresholdImageFilter: output not correctly created." ); } // eof - $RCSfile$