// @author Leonardo Florez-Valencia (florez-l@javeriana.edu.co)
// -------------------------------------------------------------------------
-#ifndef __CPEXTENSIONS__ALGORITHMS__IMAGEFUNCTORFILTER__H__
-#define __CPEXTENSIONS__ALGORITHMS__IMAGEFUNCTORFILTER__H__
+#ifndef __cpExtensions__Algorithms__ImageFunctorFilter__h__
+#define __cpExtensions__Algorithms__ImageFunctorFilter__h__
+#include <itkFunctionBase.h>
#include <itkImageToImageFilter.h>
-#include <itkImageScanlineConstIterator.h>
-#include <itkImageScanlineIterator.h>
-#include <itkProgressReporter.h>
namespace cpExtensions
{
{
/**
*/
- template< class I, class O, class F >
+ template< class _TInputImage, class _TOutputImage >
class ImageFunctorFilter
: public itk::ImageToImageFilter< I, O >
{
public:
- typedef ImageFunctorFilter Self;
+ typedef ImageFunctorFilter Self;
typedef itk::ImageToImageFilter< I, O > Superclass;
typedef itk::SmartPointer< Self > Pointer;
typedef itk::SmartPointer< const Self > ConstPointer;
- typedef I TInputImage;
- typedef O TOutputImage;
- typedef F TFunctor;
+ typedef _TInputImage TInputImage;
+ typedef _TOutputImage TOutputImage;
+ typedef typename TInputImage::PixelType TInputPixel;
+ typedef typename TOutputImage::PixelType TOutputPixel;
+ typedef typename TOutputImage::RegionType TRegion;
- typedef typename O::RegionType TRegion;
+ typedef itk::FunctionBase< TInputPixel, TOutputPixel > TFunctor;
public:
itkNewMacro( Self );
itkTypeMacro( ImageFunctorFilter, itkImageToImageFilter );
- itkGetMacro( Functor, F );
- itkGetConstMacro( Functor, F );
+ itkGetObjectMacro( Functor, TFunctor );
+ itkGetConstObjectMacro( Functor, TFunctor );
+ itkSetObjectMacro( Functor, TFunctor );
protected:
- ImageFunctorFilter( )
- : Superclass( )
- {
- }
- virtual ~ImageFunctorFilter( )
- {
- }
-
- virtual void ThreadedGenerateData(
- const TRegion& region,
- itk::ThreadIdType threadId
- )
- {
- const typename TRegion::SizeType& regionSize = region.GetSize( );
- if( regionSize[ 0 ] == 0 )
- return;
- const I* in = this->GetInput( );
- O* out = this->GetOutput( 0 );
-
- const size_t nLines = region.GetNumberOfPixels( ) / regionSize[ 0 ];
- itk::ProgressReporter progress( this, threadId, nLines );
-
- // Define the iterators
- itk::ImageScanlineConstIterator< I > inIt( in, region );
- itk::ImageScanlineIterator< O > outIt( out, region );
-
- inIt.GoToBegin( );
- outIt.GoToBegin( );
- while( !inIt.IsAtEnd( ) )
- {
- while( !inIt.IsAtEndOfLine( ) )
- {
- outIt.Set( this->m_Functor( inIt.Get( ) ) );
- ++inIt;
- ++outIt;
-
- } // elihw
- inIt.NextLine( );
- outIt.NextLine( );
- progress.CompletedPixel( );
-
- } // elihw
- }
+ ImageFunctorFilter( );
+ virtual ~ImageFunctorFilter( );
+
+ virtual void ThreadedGenerateData( const TRegion& region, itk::ThreadIdType threadId ) override;
private:
// Purposely not implemented.
void operator=( const Self& );
protected:
- F m_Functor;
+ typename TFunctor::Pointer m_Functor;
};
} // ecapseman
} // ecapseman
-#endif // __CPEXTENSIONS__ALGORITHMS__IMAGEFUNCTORFILTER__H__
+#ifndef ITK_MANUAL_INSTANTIATION
+# include <cpExtensions/Algorithms/ImageFunctorFilter.hxx>
+#endif // ITK_MANUAL_INSTANTIATION
+
+#endif // __cpExtensions__Algorithms__ImageFunctorFilter__h__
// eof - $RCSfile$