]> Creatis software - FrontAlgorithms.git/blob - examples/RegionGrow_Tautology.cxx
...
[FrontAlgorithms.git] / examples / RegionGrow_Tautology.cxx
1 #include <itkCommand.h>
2 #include <itkImage.h>
3 #include <itkImageFileWriter.h>
4
5 #include <fpa/Image/RegionGrow.h>
6 #include <fpa/Image/Functors/RegionGrow/Tautology.h>
7
8 // -------------------------------------------------------------------------
9 typedef unsigned char                  TPixel;
10 typedef itk::Image< TPixel, 2 >        TImage;
11 typedef itk::ImageFileWriter< TImage > TWriter;
12
13 typedef fpa::Image::RegionGrow< TImage, TImage > TFilter;
14 typedef fpa::Image::Functors::RegionGrow::Tautology< TPixel > TPredicate;
15
16 // -------------------------------------------------------------------------
17 int main( int argc, char* argv[] )
18 {
19   // Get arguments
20   if( argc < 6 )
21   {
22     std::cerr
23       << "Usage: " << argv[ 0 ]
24       << " output_image width height s0x s0y s1x s1y ..."
25       << std::endl;
26     return( 1 );
27
28   } // fi
29   std::string output_image_filename = argv[ 1 ];
30   TImage::SizeType size;
31   size[ 0 ] = std::atoi( argv[ 2 ] );
32   size[ 1 ] = std::atoi( argv[ 3 ] );
33
34   TImage::Pointer input = TImage::New( );
35   input->SetRegions( size );
36   input->Allocate( );
37   input->FillBuffer( 0 );
38
39   TPredicate::Pointer predicate = TPredicate::New( );
40
41   TFilter::Pointer filter = TFilter::New( );
42   filter->SetInput( input );
43   filter->SetPredicate( predicate );
44   for( int i = 4; i < argc; i += 2 )
45   {
46     if( i + 1 < argc )
47     {
48       TImage::IndexType seed;
49       seed[ 0 ] = std::atoi( argv[ i ] );
50       seed[ 1 ] = std::atoi( argv[ i + 1 ] );
51       filter->AddSeed( seed );
52
53     } // fi
54
55   } // rof
56   filter->SetInsideValue( 255 );
57   filter->SetOutsideValue( 0 );
58
59   TWriter::Pointer writer = TWriter::New( );
60   writer->SetInput( filter->GetOutput( ) );
61   writer->SetFileName( output_image_filename );
62   try
63   {
64     writer->Update( );
65   }
66   catch( std::exception& err )
67   {
68     std::cerr << "ERROR: " << err.what( ) << std::endl;
69     return( 1 );
70
71   } // yrt
72   return( 0 );
73 }
74
75 // eof - $RCSfile$