1 #include <itkCommand.h>
3 #include <itkImageFileReader.h>
4 #include <itkImageFileWriter.h>
5 #include <fpa/Image/MoriRegionGrow.h>
7 // -------------------------------------------------------------------------
8 typedef itk::Image< unsigned char, 2 > TImage;
9 typedef itk::ImageFileReader< TImage > TReader;
10 typedef itk::ImageFileWriter< TImage > TWriter;
11 typedef fpa::Image::MoriRegionGrow< TImage, TImage > TFilter;
13 // -------------------------------------------------------------------------
20 typedef TFilter::TStartEvent TStartEvent;
21 typedef TFilter::TEndEvent TEndEvent;
22 typedef TFilter::TStartLoopEvent TStartLoopEvent;
23 typedef TFilter::TEndLoopEvent TEndLoopEvent;
24 typedef TFilter::TPushEvent TPushEvent;
25 typedef TFilter::TPopEvent TPopEvent;
26 typedef TFilter::TMarkEvent TMarkEvent;
29 itkNewMacro( MyObserver );
33 itk::Object* caller, const itk::EventObject& event
36 this->Execute( const_cast< const itk::Object* >( caller ), event );
39 const itk::Object* object, const itk::EventObject& event
43 if( TStartEvent( ).CheckEvent( &event ) )
44 std::cout << "Start" << std::endl;
45 else if( TEndEvent( ).CheckEvent( &event ) )
46 std::cout << "End" << std::endl;
47 else if( TStartLoopEvent( ).CheckEvent( &event ) )
48 std::cout << "StartLoop" << std::endl;
49 else if( TEndLoopEvent( ).CheckEvent( &event ) )
50 std::cout << "EndLoop" << std::endl;
51 else if( TMarkEvent( ).CheckEvent( &event ) )
53 const TMarkEvent* mark = dynamic_cast< const TMarkEvent* >( &event );
54 std::cout << "Mark: " << mark->Vertex << std::endl;
65 // -------------------------------------------------------------------------
66 int main( int argc, char* argv[] )
71 << "Usage: " << argv[ 0 ]
72 << " input_filename output_filename" << std::endl;
76 std::string in_fname = argv[ 1 ];
77 std::string out_fname = argv[ 2 ];
81 TReader::Pointer reader = TReader::New( );
82 reader->SetFileName( in_fname );
84 TImage::IndexType seed;
88 TFilter::Pointer filter = TFilter::New( );
89 filter->SetInput( reader->GetOutput( ) );
90 filter->SetLower( 0 );
91 filter->SetUpper( 255 );
93 filter->SetInsideValue( 255 );
94 filter->SetOutsideValue( 0 );
95 filter->AddSeed( seed, filter->GetInsideValue( ) );
98 MyObserver::Pointer obs = MyObserver::New( );
99 filter->AddObserver( itk::AnyEvent( ), obs );
102 TWriter::Pointer writer = TWriter::New( );
103 writer->SetInput( filter->GetOutput( ) );
104 writer->SetFileName( out_fname );