From a446849d62347e0401f681748ca13289091ac3b9 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Leonardo=20Fl=C3=B3rez-Valencia?= Date: Mon, 6 Feb 2017 17:47:37 -0500 Subject: [PATCH] ... --- data/test_mori_2D.png | Bin 0 -> 69669 bytes examples/CMakeLists.txt | 1 + examples/MoriRegionGrow_00.cxx | 110 ++++++++++++++++++++++ lib/fpa/Base/MoriRegionGrow.h | 61 ------------ lib/fpa/Base/MoriRegionGrow.hxx | 33 ------- lib/fpa/Image/MoriRegionGrow.h | 54 ++++++++--- lib/fpa/Image/MoriRegionGrow.hxx | 98 ++++++++++++++++++- lib/fpa/Image/RegionGrow.hxx | 2 +- plugins/ImageAlgorithms/ImageAlgorithms.i | 1 - 9 files changed, 246 insertions(+), 114 deletions(-) create mode 100644 data/test_mori_2D.png create mode 100644 examples/MoriRegionGrow_00.cxx delete mode 100644 lib/fpa/Base/MoriRegionGrow.h delete mode 100644 lib/fpa/Base/MoriRegionGrow.hxx diff --git a/data/test_mori_2D.png b/data/test_mori_2D.png new file mode 100644 index 0000000000000000000000000000000000000000..943e9f0f12a63150cc03a836d7738ae017670fcc GIT binary patch literal 69669 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%0AtAM0UI34k8fKrFX^P?(j?cdFqO_<8$)FU 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 +#include +#include +#include +#include + +// ------------------------------------------------------------------------- +typedef itk::Image< unsigned char, 2 > TImage; +typedef itk::ImageFileReader< TImage > TReader; +typedef itk::ImageFileWriter< TImage > TWriter; +typedef fpa::Image::MoriRegionGrow< TImage, TImage > TFilter; + +// ------------------------------------------------------------------------- +/** + */ +class MyObserver + : public itk::Command +{ +public: + typedef TFilter::TStartEvent TStartEvent; + typedef TFilter::TEndEvent TEndEvent; + typedef TFilter::TStartLoopEvent TStartLoopEvent; + typedef TFilter::TEndLoopEvent TEndLoopEvent; + typedef TFilter::TPushEvent TPushEvent; + typedef TFilter::TPopEvent TPopEvent; + typedef TFilter::TMarkEvent TMarkEvent; + +public: + itkNewMacro( MyObserver ); + +public: + virtual void Execute( + itk::Object* caller, const itk::EventObject& event + ) override + { + this->Execute( const_cast< const itk::Object* >( caller ), event ); + } + virtual void Execute( + const itk::Object* object, const itk::EventObject& event + ) override + { + /* TODO + if( TStartEvent( ).CheckEvent( &event ) ) + std::cout << "Start" << std::endl; + else if( TEndEvent( ).CheckEvent( &event ) ) + std::cout << "End" << std::endl; + else if( TStartLoopEvent( ).CheckEvent( &event ) ) + std::cout << "StartLoop" << std::endl; + else if( TEndLoopEvent( ).CheckEvent( &event ) ) + std::cout << "EndLoop" << std::endl; + else if( TMarkEvent( ).CheckEvent( &event ) ) + { + const TMarkEvent* mark = dynamic_cast< const TMarkEvent* >( &event ); + std::cout << "Mark: " << mark->Vertex << std::endl; + + } // fi + */ + /* TODO + TPushEvent; + TPopEvent; + */ + } +}; + +// ------------------------------------------------------------------------- +int main( int argc, char* argv[] ) +{ + if( argc < 3 ) + { + std::cerr + << "Usage: " << argv[ 0 ] + << " input_filename output_filename" << std::endl; + return( 1 ); + + } // fi + std::string in_fname = argv[ 1 ]; + std::string out_fname = argv[ 2 ]; + int seed_x = 111; + int seed_y = 91; + + TReader::Pointer reader = TReader::New( ); + reader->SetFileName( in_fname ); + + TImage::IndexType seed; + seed[ 0 ] = seed_x; + seed[ 1 ] = seed_y; + + TFilter::Pointer filter = TFilter::New( ); + filter->SetInput( reader->GetOutput( ) ); + filter->SetLower( 0 ); + filter->SetUpper( 255 ); + filter->SetStep( 1 ); + filter->SetInsideValue( 255 ); + filter->SetOutsideValue( 0 ); + filter->AddSeed( seed, filter->GetInsideValue( ) ); + + /* TODO + MyObserver::Pointer obs = MyObserver::New( ); + filter->AddObserver( itk::AnyEvent( ), obs ); + */ + + TWriter::Pointer writer = TWriter::New( ); + writer->SetInput( filter->GetOutput( ) ); + writer->SetFileName( out_fname ); + writer->Update( ); + + return( 0 ); +} + +// eof - $RCSfile$ diff --git a/lib/fpa/Base/MoriRegionGrow.h b/lib/fpa/Base/MoriRegionGrow.h deleted file mode 100644 index 40f59cd..0000000 --- a/lib/fpa/Base/MoriRegionGrow.h +++ /dev/null @@ -1,61 +0,0 @@ -#ifndef __fpa__Base__MoriRegionGrow__h__ -#define __fpa__Base__MoriRegionGrow__h__ - -#include -#include -#include - -namespace fpa -{ - namespace Base - { - /** - */ - template< class _TSuperclass > - class MoriRegionGrow - : public fpa::Base::RegionGrow< _TSuperclass > - { - public: - typedef MoriRegionGrow Self; - typedef fpa::Base::RegionGrow< _TSuperclass > Superclass; - typedef itk::SmartPointer< Self > Pointer; - typedef itk::SmartPointer< const Self > ConstPointer; - - typedef typename Superclass::TOutput TOutput; - typedef typename Superclass::TVertex TVertex; - - protected: - typedef typename Superclass::_TQueueNode _TQueueNode; - typedef typename Superclass::_TQueue _TQueue; - - public: - itkTypeMacro( MoriRegionGrow, Algorithm ); - - protected: - MoriRegionGrow( ); - virtual ~MoriRegionGrow( ); - - virtual bool _UpdateValue( - _TQueueNode& v, const _TQueueNode& p - ) override; - - private: - // Purposely not defined - MoriRegionGrow( const Self& other ); - Self& operator=( const Self& other ); - - protected: - _TQueue m_AuxilaryQueue; - }; - - } // ecapseman - -} // ecapseman - -#ifndef ITK_MANUAL_INSTANTIATION -# include -#endif // ITK_MANUAL_INSTANTIATION - -#endif // __fpa__Base__MoriRegionGrow__h__ - -// eof - $RCSfile$ diff --git a/lib/fpa/Base/MoriRegionGrow.hxx b/lib/fpa/Base/MoriRegionGrow.hxx deleted file mode 100644 index 9e1c300..0000000 --- a/lib/fpa/Base/MoriRegionGrow.hxx +++ /dev/null @@ -1,33 +0,0 @@ -#ifndef __fpa__Base__MoriRegionGrow__hxx__ -#define __fpa__Base__MoriRegionGrow__hxx__ - -// ------------------------------------------------------------------------- -template< class _TSuperclass > -fpa::Base::MoriRegionGrow< _TSuperclass >:: -MoriRegionGrow( ) - : Superclass( ) -{ -} - -// ------------------------------------------------------------------------- -template< class _TSuperclass > -fpa::Base::MoriRegionGrow< _TSuperclass >:: -~MoriRegionGrow( ) -{ -} - -// ------------------------------------------------------------------------- -template< class _TSuperclass > -bool fpa::Base::MoriRegionGrow< _TSuperclass >:: -_UpdateValue( _TQueueNode& v, const _TQueueNode& p ) -{ - bool ret = this->Superclass::_UpdateValue( v, p ); - if( !ret ) - this->m_AuxilaryQueue.push( v ); - return( ret ); -} - - -#endif // __fpa__Base__MoriRegionGrow__hxx__ - -// eof - $RCSfile$ diff --git a/lib/fpa/Image/MoriRegionGrow.h b/lib/fpa/Image/MoriRegionGrow.h index 5708582..50e8bb1 100644 --- a/lib/fpa/Image/MoriRegionGrow.h +++ b/lib/fpa/Image/MoriRegionGrow.h @@ -1,8 +1,8 @@ #ifndef __fpa__Image__MoriRegionGrow__h__ #define __fpa__Image__MoriRegionGrow__h__ -#include -#include +#include +#include namespace fpa { @@ -12,34 +12,62 @@ namespace fpa */ template< class _TInputImage, class _TOutputImage > class MoriRegionGrow - : public fpa::Base::MoriRegionGrow< fpa::Image::Algorithm< _TInputImage, _TOutputImage > > + : public fpa::Image::RegionGrow< _TInputImage, _TOutputImage > { public: - typedef fpa::Image::Algorithm< _TInputImage, _TOutputImage > TAlgorithm; - typedef MoriRegionGrow Self; - typedef fpa::Base::MoriRegionGrow< TAlgorithm > Superclass; - typedef itk::SmartPointer< Self > Pointer; - typedef itk::SmartPointer< const Self > ConstPointer; + typedef MoriRegionGrow Self; + typedef fpa::Image::RegionGrow< _TInputImage, _TOutputImage > Superclass; + typedef itk::SmartPointer< Self > Pointer; + typedef itk::SmartPointer< const Self > ConstPointer; - typedef typename Superclass::TOutput TOutput; - typedef typename Superclass::TVertex TVertex; + typedef typename Superclass::TOutput TOutput; + typedef typename Superclass::TVertex TVertex; + typedef typename Superclass::TGrowFunction TGrowFunction; + typedef + fpa::Image::Functors::RegionGrow::BinaryThreshold< _TInputImage > + TBinThresholdFunction; + typedef typename _TInputImage::PixelType TPixel; - typedef fpa::Image::Functors::Base< _TInputImage, typename Superclass::TGrowFunction > TGrowFunction; + protected: + typedef typename Superclass::_TQueueNode _TQueueNode; + typedef typename Superclass::_TQueue _TQueue; public: itkNewMacro( Self ); - itkTypeMacro( fpa::Image::MoriRegionGrow, fpa::Base::MoriRegionGrow ); + itkTypeMacro( fpa::Image::MoriRegionGrow, fpa::Image::RegionGrow ); + + itkGetConstMacro( Lower, TPixel ); + itkGetConstMacro( Upper, TPixel ); + itkGetConstMacro( Step, TPixel ); + + itkSetMacro( Lower, TPixel ); + itkSetMacro( Upper, TPixel ); + itkSetMacro( Step, TPixel ); protected: MoriRegionGrow( ); virtual ~MoriRegionGrow( ); - virtual void _BeforeGenerateData( ) fpa_OVERRIDE; + virtual bool _ContinueGenerateData( ) override; + virtual void _BeforeGenerateData( ) override; + virtual void _AfterGenerateData( ) override; + virtual void _BeforeLoop( ) override; + virtual void _AfterLoop( ) override; + virtual bool _UpdateValue( _TQueueNode& v, const _TQueueNode& p ) override; + virtual void _UpdateResult( const _TQueueNode& n ) override; private: // Purposely not defined MoriRegionGrow( const Self& other ); Self& operator=( const Self& other ); + + protected: + TPixel m_Lower; + TPixel m_Upper; + TPixel m_Step; + + _TQueue m_NextQueue; + unsigned long m_ActualCount; }; } // ecapseman diff --git a/lib/fpa/Image/MoriRegionGrow.hxx b/lib/fpa/Image/MoriRegionGrow.hxx index 29f46ac..3b06e41 100644 --- a/lib/fpa/Image/MoriRegionGrow.hxx +++ b/lib/fpa/Image/MoriRegionGrow.hxx @@ -5,8 +5,17 @@ template< class _TInputImage, class _TOutputImage > fpa::Image::MoriRegionGrow< _TInputImage, _TOutputImage >:: MoriRegionGrow( ) - : Superclass( ) + : Superclass( ), + m_Step( TPixel( 1 ) ) { + this->m_Upper = std::numeric_limits< TPixel >::max( ); + if( std::numeric_limits< TPixel >::is_integer ) + this->m_Lower = std::numeric_limits< TPixel >::min( ); + else + this->m_Lower = -this->m_Upper; + typename TBinThresholdFunction::Pointer functor = + TBinThresholdFunction::New( ); + this->SetGrowFunction( functor ); } // ------------------------------------------------------------------------- @@ -16,6 +25,32 @@ fpa::Image::MoriRegionGrow< _TInputImage, _TOutputImage >:: { } +// ------------------------------------------------------------------------- +template< class _TInputImage, class _TOutputImage > +bool fpa::Image::MoriRegionGrow< _TInputImage, _TOutputImage >:: +_ContinueGenerateData( ) +{ + TBinThresholdFunction* functor = + dynamic_cast< TBinThresholdFunction* >( this->GetGrowFunction( ) ); + TPixel u = functor->GetUpper( ); + + std::cout << long( u ) << " " << this->m_ActualCount << std::endl; + + if( u < this->m_Upper ) + { + u += this->m_Step; + if( u > this->m_Upper ) + u = this->m_Upper; + functor->SetUpper( u ); + this->m_Queue = this->m_NextQueue; + while( this->m_NextQueue.size( ) > 0 ) + this->m_NextQueue.pop( ); + return( true ); + } + else + return( false ); +} + // ------------------------------------------------------------------------- template< class _TInputImage, class _TOutputImage > void fpa::Image::MoriRegionGrow< _TInputImage, _TOutputImage >:: @@ -23,10 +58,63 @@ _BeforeGenerateData( ) { this->Superclass::_BeforeGenerateData( ); - TGrowFunction* grow = - dynamic_cast< TGrowFunction* >( this->GetGrowFunction( ) ); - if( grow != NULL ) - grow->SetImage( this->GetInput( ) ); + while( this->m_NextQueue.size( ) > 0 ) + this->m_NextQueue.pop( ); + this->m_ActualCount = 0; + TBinThresholdFunction* functor = + dynamic_cast< TBinThresholdFunction* >( this->GetGrowFunction( ) ); + functor->SetLower( this->m_Lower ); + functor->SetUpper( this->m_Lower + this->m_Step ); +} + +// ------------------------------------------------------------------------- +template< class _TInputImage, class _TOutputImage > +void fpa::Image::MoriRegionGrow< _TInputImage, _TOutputImage >:: +_AfterGenerateData( ) +{ + this->Superclass::_AfterGenerateData( ); + while( this->m_NextQueue.size( ) > 0 ) + this->m_NextQueue.pop( ); +} + +// ------------------------------------------------------------------------- +template< class _TInputImage, class _TOutputImage > +void fpa::Image::MoriRegionGrow< _TInputImage, _TOutputImage >:: +_BeforeLoop( ) +{ + this->Superclass::_BeforeLoop( ); +} + +// ------------------------------------------------------------------------- +template< class _TInputImage, class _TOutputImage > +void fpa::Image::MoriRegionGrow< _TInputImage, _TOutputImage >:: +_AfterLoop( ) +{ + this->Superclass::_AfterLoop( ); +} + +// ------------------------------------------------------------------------- +template< class _TInputImage, class _TOutputImage > +bool fpa::Image::MoriRegionGrow< _TInputImage, _TOutputImage >:: +_UpdateValue( _TQueueNode& v, const _TQueueNode& p ) +{ + bool ret = this->Superclass::_UpdateValue( v, p ); + if( !ret ) + { + v.Result = this->m_InsideValue; + this->m_NextQueue.push( v ); + + } // fi + return( ret ); +} + +// ------------------------------------------------------------------------- +template< class _TInputImage, class _TOutputImage > +void fpa::Image::MoriRegionGrow< _TInputImage, _TOutputImage >:: +_UpdateResult( const _TQueueNode& n ) +{ + this->Superclass::_UpdateResult( n ); + this->m_ActualCount += 1; } #endif // __fpa__Image__MoriRegionGrow__hxx__ diff --git a/lib/fpa/Image/RegionGrow.hxx b/lib/fpa/Image/RegionGrow.hxx index b1f5da0..5c8b76e 100644 --- a/lib/fpa/Image/RegionGrow.hxx +++ b/lib/fpa/Image/RegionGrow.hxx @@ -21,8 +21,8 @@ template< class _TInputImage, class _TOutputImage > void fpa::Image::RegionGrow< _TInputImage, _TOutputImage >:: _BeforeGenerateData( ) { + this->m_InitResult = this->m_OutsideValue; this->Superclass::_BeforeGenerateData( ); - TGrowFunction* grow = dynamic_cast< TGrowFunction* >( this->GetGrowFunction( ) ); if( grow != NULL ) diff --git a/plugins/ImageAlgorithms/ImageAlgorithms.i b/plugins/ImageAlgorithms/ImageAlgorithms.i index 9f44dd1..41cd37c 100644 --- a/plugins/ImageAlgorithms/ImageAlgorithms.i +++ b/plugins/ImageAlgorithms/ImageAlgorithms.i @@ -4,7 +4,6 @@ tinclude fpa/Image/Functors/SimpleNeighborhood:h|hxx instances fpa::Image::Functors::SimpleNeighborhood< itk::Image< #scalar_types#, #pdims# > > cinclude fpa/Base/RegionGrow.hxx -cinclude fpa/Base/MoriRegionGrow.hxx define all_int_types=#int_types#;#uint_types# tinclude fpa/Image/RegionGrow:h|hxx tinclude fpa/Image/MoriRegionGrow:h|hxx -- 2.45.1