#include #include #include #include #include #include // ------------------------------------------------------------------------- namespace fpa { namespace Base { namespace Functors { namespace RegionGrow { /** */ template< class _TValue > class Tautology : public itk::FunctionBase< _TValue, bool > { public: typedef Tautology Self; typedef itk::FunctionBase< _TValue, bool > Superclass; typedef itk::SmartPointer< Self > Pointer; typedef itk::SmartPointer< const Self > ConstPointer; public: itkNewMacro( Self ); itkTypeMacro( fpa::Base::Functors::RegionGrow::Tautology, itk::FunctionBase ); public: virtual bool Evaluate( const _TValue& input ) const override { return( true ); } protected: Tautology( ) : Superclass( ) { } virtual ~Tautology( ) { } private: // Purposely not implemented Tautology( const Self& other ); Self& operator=( const Self& other ); }; } // ecapseman } // ecapseman } // ecapseman } // ecapseman // ------------------------------------------------------------------------- namespace fpa { namespace Base { /** */ template< class _TAlgorithm > class RegionGrow : public _TAlgorithm { }; } // ecapseman } // ecapseman // ------------------------------------------------------------------------- namespace fpa { namespace Image { /** */ template< class _TInputImage > class MarksInterface { }; } // ecapseman } // ecapseman // ------------------------------------------------------------------------- namespace fpa { namespace Image { /** */ template< class _TInputImage, class _TOutputImage, class _TSeedsInterface, class _TMarksInterface > class Algorithm : public fpa::Base::Algorithm< itk::ImageToImageFilter< _TInputImage, _TOutputImage >, _TSeedsInterface, _TMarksInterface > { }; } // ecapseman } // ecapseman // ------------------------------------------------------------------------- namespace fpa { namespace Image { /** */ template< class _TInputImage, class _TOutputImage > class RegionGrow : public fpa::Base::RegionGrow< fpa::Image::Algorithm< _TInputImage, _TOutputImage, fpa::Base::SeedsInterface< typename _TInputImage::IndexType, typename _TInputImage::IndexType::LexicographicCompare >, fpa::Image::MarksInterface< _TInputImage > > > { }; } // ecapseman } // ecapseman // ------------------------------------------------------------------------- const unsigned int Dim = 2; typedef short TInputPixel; typedef unsigned char TOutputPixel; typedef itk::Image< TInputPixel, Dim > TInputImage; typedef itk::Image< TOutputPixel, Dim > TOutputImage; // ------------------------------------------------------------------------- int main( int argc, char* argv[] ) { TInputImage::IndexType seed; seed.Fill( 0 ); typedef fpa::Base::Functors::RegionGrow::Tautology< TInputPixel > TPredicate; TPredicate::Pointer tautology = TPredicate::New( ); typedef fpa::Image::RegionGrow< TInputImage, TOutputImage > TFilter; TFilter::Pointer filter = TFilter::New( ); filter->SetInput( input_image ); filter->AddSeed( seed ); filter->SetPredicate( tautology ); filter->Update( ); return( 0 ); } // eof - $RCSfile$