From 3bb947834c947c43da2ae10ed3f5fcec9707d5bb Mon Sep 17 00:00:00 2001 From: =?utf8?q?Leonardo=20Fl=C3=B3rez-Valencia?= Date: Mon, 7 Nov 2016 22:03:50 -0500 Subject: [PATCH] ... --- lib/cpPlugins/BaseObjects/Parameters.cxx | 14 ++++ lib/cpPlugins/BaseObjects/Parameters.h | 1 + .../GaussianBlurImageFilter.cxx | 77 +++++++++++++++++++ .../GaussianBlurImageFilter.h | 32 ++++++++ .../ImageGenericFilters/ImageGenericFilters.i | 5 ++ 5 files changed, 129 insertions(+) create mode 100644 plugins/ImageGenericFilters/GaussianBlurImageFilter.cxx create mode 100644 plugins/ImageGenericFilters/GaussianBlurImageFilter.h diff --git a/lib/cpPlugins/BaseObjects/Parameters.cxx b/lib/cpPlugins/BaseObjects/Parameters.cxx index 1c63638..b30b7d7 100644 --- a/lib/cpPlugins/BaseObjects/Parameters.cxx +++ b/lib/cpPlugins/BaseObjects/Parameters.cxx @@ -174,6 +174,20 @@ ConfigureAsChoices( this->Modified( ); } +// ------------------------------------------------------------------------- +void cpPlugins::BaseObjects::Parameters:: +ConfigureAsRealTypesChoices( const std::string& name ) +{ + std::vector< std::string > choices; +#ifdef cpPlugins_CONFIG_REAL_TYPES_float + choices.push_back( "float" ); +#endif // cpPlugins_CONFIG_REAL_TYPES_float +#ifdef cpPlugins_CONFIG_REAL_TYPES_double + choices.push_back( "double" ); +#endif // cpPlugins_CONFIG_REAL_TYPES_double + this->ConfigureAsChoices( name, choices ); +} + // ------------------------------------------------------------------------- std::vector< std::string > cpPlugins::BaseObjects::Parameters:: GetChoices( const std::string& name ) const diff --git a/lib/cpPlugins/BaseObjects/Parameters.h b/lib/cpPlugins/BaseObjects/Parameters.h index fd6764b..bd106e0 100644 --- a/lib/cpPlugins/BaseObjects/Parameters.h +++ b/lib/cpPlugins/BaseObjects/Parameters.h @@ -152,6 +152,7 @@ namespace cpPlugins void ConfigureAsChoices( const std::string& name, const std::vector< std::string >& choices ); + void ConfigureAsRealTypesChoices( const std::string& name ); std::vector< std::string > GetChoices( const std::string& name ) const; std::string GetSelectedChoice( const std::string& name ) const; bool SetSelectedChoice( diff --git a/plugins/ImageGenericFilters/GaussianBlurImageFilter.cxx b/plugins/ImageGenericFilters/GaussianBlurImageFilter.cxx new file mode 100644 index 0000000..10415cd --- /dev/null +++ b/plugins/ImageGenericFilters/GaussianBlurImageFilter.cxx @@ -0,0 +1,77 @@ +#include +#include +#include + +#include +#include + +// ------------------------------------------------------------------------- +cpPluginsImageGenericFilters::GaussianBlurImageFilter:: +GaussianBlurImageFilter( ) + : Superclass( ) +{ + typedef cpPlugins::DataObjects::Image _TImage; + this->_ConfigureInput< _TImage >( "Input", true, false ); + this->_ConfigureOutput< _TImage >( "Output" ); + + this->m_Parameters.ConfigureAsReal( "MaximumError", 1e-3 ); + this->m_Parameters.ConfigureAsReal( "Sigma", 1 ); + this->m_Parameters.ConfigureAsUint( "MaximumKernelWidth", 32 ); + this->m_Parameters.ConfigureAsRealTypesChoices( "OutputResolution" ); +} + +// ------------------------------------------------------------------------- +cpPluginsImageGenericFilters::GaussianBlurImageFilter:: +~GaussianBlurImageFilter( ) +{ +} + +// ------------------------------------------------------------------------- +void cpPluginsImageGenericFilters::GaussianBlurImageFilter:: +_GenerateData( ) +{ + auto o = this->GetInputData( "Input" ); + cpPlugins_Demangle_Image_ScalarPixels_AllDims_1( o, _GD0 ) + this->_Error( "Invalid input image." ); +} + +// ------------------------------------------------------------------------- +template< class _TInput > +void cpPluginsImageGenericFilters::GaussianBlurImageFilter:: +_GD0( _TInput* input ) +{ + std::string t = this->m_Parameters.GetSelectedChoice( "OutputResolution" ); +#ifdef cpPlugins_CONFIG_REAL_TYPES_float + if( t == "float" ) this->_GD1< _TInput, float >( input ); +#endif // cpPlugins_CONFIG_REAL_TYPES_float +#ifdef cpPlugins_CONFIG_REAL_TYPES_double + if( t == "double" ) this->_GD1< _TInput, double >( input ); +#endif // cpPlugins_CONFIG_REAL_TYPES_double +} + +// ------------------------------------------------------------------------- +template< class _TInput, class _TOutputPixel > +void cpPluginsImageGenericFilters::GaussianBlurImageFilter:: +_GD1( _TInput* input ) +{ + /* TODO + typedef itk::GaussianBlurImageFunction< _TInput, _TOutputPixel > _TFunction; + typedef itk::Image< _TOutputPixel, _TInput::ImageDimension > _TOutput; + typedef itk::UnaryFunctorImageFilter< _TInput, _TOutput, _TFunction > _TFilter; + + auto filter = this->_CreateITK< _TFilter >( ); + filter->SetInput( input ); + + typename _TFunction::ErrorArrayType e; + e.Fill( this->m_Parameters.GetReal( "MaximumError" ) ); + filter->GetFunctor( ).SetMaximumError( e ); + filter->GetFunctor( ).SetSigma( this->m_Parameters.GetReal( "Sigma" ) ); + filter->GetFunctor( ).SetMaximumKernelWidth( + this->m_Parameters.GetUint( "MaximumKernelWidth" ) + ); + filter->Update( ); + this->GetOutput( "Output" )->SetITK( filter->GetOutput( ) ); + */ +} + +// eof - $RCSfile$ diff --git a/plugins/ImageGenericFilters/GaussianBlurImageFilter.h b/plugins/ImageGenericFilters/GaussianBlurImageFilter.h new file mode 100644 index 0000000..9faef0a --- /dev/null +++ b/plugins/ImageGenericFilters/GaussianBlurImageFilter.h @@ -0,0 +1,32 @@ +#ifndef __cpPluginsImageGenericFilters__GaussianBlurImageFilter__h__ +#define __cpPluginsImageGenericFilters__GaussianBlurImageFilter__h__ + +#include +#include + +namespace cpPluginsImageGenericFilters +{ + /** + */ + class cpPluginsImageGenericFilters_EXPORT GaussianBlurImageFilter + : public cpPlugins::BaseObjects::ProcessObject + { + cpPluginsObject( + GaussianBlurImageFilter, + cpPlugins::BaseObjects::ProcessObject, + ImageFilters + ); + + protected: + template< class _TInput > + inline void _GD0( _TInput* input ); + + template< class _TInput, class _TOutputPixel > + inline void _GD1( _TInput* input ); + }; + +} // ecapseman + +#endif // __cpPluginsImageGenericFilters__GaussianBlurImageFilter__h__ + +// eof - $RCSfile$ diff --git a/plugins/ImageGenericFilters/ImageGenericFilters.i b/plugins/ImageGenericFilters/ImageGenericFilters.i index 360bcbd..1deff6b 100644 --- a/plugins/ImageGenericFilters/ImageGenericFilters.i +++ b/plugins/ImageGenericFilters/ImageGenericFilters.i @@ -1,9 +1,12 @@ header #define ITK_MANUAL_INSTANTIATION +define functions=NeighborhoodOperatorImageFunction;GaussianBlurImageFunction + tinclude itkRegionOfInterestImageFilter:h|hxx tinclude itkRescaleIntensityImageFilter:h|hxx tinclude itkMinimumMaximumImageCalculator:h|hxx tinclude itkExtractImageFilter:h|hxx +* tinclude itk#functions#:h|hxx cinclude itk#color_pixels#.h cinclude itkImageAlgorithm.hxx @@ -17,4 +20,6 @@ instances itk::RescaleIntensityImageFilter< itk::Image< #scalar_pixels#, #proces instances itk::MinimumMaximumImageCalculator< itk::Image< #scalar_pixels#, #process_dims# > > +* instances itk::#functions#< itk::Image< #scalar_pixels#, #process_dims# >, #real_types# > + ** eof - $RCSfile$ -- 2.45.0