]> Creatis software - FrontAlgorithms.git/blob - tests/image/RegionGrow/BinaryThreshold.cxx
...
[FrontAlgorithms.git] / tests / image / RegionGrow / BinaryThreshold.cxx
1 // =========================================================================
2 // @author Leonardo Florez Valencia
3 // @email florez-l@javeriana.edu.co
4 // =========================================================================
5
6 #include <itkImage.h>
7 #include <itkImageFileReader.h>
8 #include <itkImageFileWriter.h>
9 #include <fpa/Filters/Image/RegionGrow.h>
10 #include <fpa/Functors/RegionGrow/BinaryThreshold.h>
11
12 // -------------------------------------------------------------------------
13 const unsigned int Dim = 2;
14 typedef unsigned char TPixel;
15 typedef itk::Image< TPixel, Dim > TImage;
16
17 // -------------------------------------------------------------------------
18 int main( int argc, char* argv[] )
19 {
20   // Get arguments
21   if( argc < 6 )
22   {
23     std::cerr
24       << "Usage: " << argv[ 0 ]
25       << " input_image output_image output_marks lower upper [seeds]"
26       << std::endl;
27     return( 1 );
28
29   } // fi
30   std::string input_image_filename = argv[ 1 ];
31   std::string output_image_filename = argv[ 2 ];
32   std::string output_marks_filename = argv[ 3 ];
33   TPixel lower = TPixel( std::atof( argv[ 4 ] ) );
34   TPixel upper = TPixel( std::atof( argv[ 5 ] ) );
35
36   // Read image
37   typedef itk::ImageFileReader< TImage > TImageReader;
38   TImageReader::Pointer input_image_reader = TImageReader::New( );
39   input_image_reader->SetFileName( input_image_filename );
40
41   // Prepare predicate
42   typedef fpa::Functors::RegionGrow::BinaryThreshold< TPixel > TPredicate;
43   TPredicate::Pointer predicate = TPredicate::New( );
44   predicate->SetLowerThreshold( lower );
45   predicate->SetUpperThreshold( upper );
46
47   // Prepare filter
48   typedef fpa::Filters::Image::RegionGrow< TImage, TImage > TFilter;
49   TFilter::Pointer filter = TFilter::New( );
50   filter->SetInput( input_image_reader->GetOutput( ) );
51   filter->SetPredicate( predicate );
52   filter->SetInsideValue( std::numeric_limits< TPixel >::max( ) );
53   filter->SetOutsideValue( TPixel( 0 ) );
54
55   // Get all seeds
56   for( int i = 6; 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$