]> Creatis software - FrontAlgorithms.git/blob - tests/image/RegionGrow/Tautology.cxx
...
[FrontAlgorithms.git] / tests / image / RegionGrow / Tautology.cxx
1 // =========================================================================
2 // @author Leonardo Florez Valencia
3 // @email florez-l@javeriana.edu.co
4 // =========================================================================
5
6 #include <itkImage.h>
7 #include <itkImageFileWriter.h>
8 #include <fpa/Filters/Image/RegionGrow.h>
9 #include <fpa/Functors/RegionGrow/Tautology.h>
10
11 // -------------------------------------------------------------------------
12 const unsigned int Dim = 2;
13 typedef unsigned char  TPixel;
14 typedef unsigned short TMark;
15 typedef itk::Image< TPixel, Dim > TImage;
16
17 // -------------------------------------------------------------------------
18 int main( int argc, char* argv[] )
19 {
20   // Get arguments
21   if( argc < 5 )
22   {
23     std::cerr
24       << "Usage: " << argv[ 0 ]
25       << " output_image output_marks size stop [seeds]"
26       << std::endl;
27     return( 1 );
28
29   } // fi
30   std::string output_image_filename = argv[ 1 ];
31   std::string output_marks_filename = argv[ 2 ];
32   TImage::SizeType size;
33   size.Fill( std::atoi( argv[ 3 ] ) );
34   bool stop = ( argv[ 4 ][ 0 ] == '1' );
35
36   // Create image
37   TImage::Pointer image = TImage::New( );
38   image->SetRegions( size );
39   image->Allocate( );
40   image->FillBuffer( TPixel( 0 ) );
41
42   // Prepare predicate
43   typedef fpa::Functors::RegionGrow::Tautology< TPixel > TPredicate;
44   TPredicate::Pointer predicate = TPredicate::New( );
45
46   // Prepare filter
47   typedef fpa::Filters::Image::RegionGrow< TImage, TImage, TMark > TFilter;
48   TFilter::Pointer filter = TFilter::New( );
49   filter->SetInput( image );
50   filter->SetPredicate( predicate );
51   filter->SetInsideValue( std::numeric_limits< TPixel >::max( ) );
52   filter->SetOutsideValue( TPixel( 0 ) );
53   filter->SetStopAtOneFront( stop );
54
55   // Get all seeds
56   for( int i = 5; i < argc; i += Dim )
57   {
58     TImage::IndexType seed;
59     for( int j = 0; j < Dim; ++j )
60       if( i + j < argc )
61         seed[ j ] = std::atoi( argv[ i + j ] );
62     filter->AddSeed( seed );
63
64   } // rof
65
66   // Execute filter
67   filter->Update( );
68
69   // Save results
70   typedef itk::ImageFileWriter< TFilter::TOutputImage > TOutputWriter;
71   TOutputWriter::Pointer output_writer = TOutputWriter::New( );
72   output_writer->SetInput( filter->GetOutput( ) );
73   output_writer->SetFileName( output_image_filename );
74
75   typedef itk::ImageFileWriter< TFilter::TMarksImage > TMarksWriter;
76   TMarksWriter::Pointer marks_writer = TMarksWriter::New( );
77   marks_writer->SetInput( filter->GetMarks( ) );
78   marks_writer->SetFileName( output_marks_filename );
79
80   try
81   {
82     output_writer->Update( );
83     marks_writer->Update( );
84   }
85   catch( std::exception& err )
86   {
87     std::cerr << "Error caught: " << err.what( ) << std::endl;
88     return( 1 );
89
90   } // yrt
91
92   return( 0 );
93 }
94
95 // eof - $RCSfile$