]> Creatis software - FrontAlgorithms.git/blob - tests/image/RandomWalker/Gaussian.cxx
...
[FrontAlgorithms.git] / tests / image / RandomWalker / Gaussian.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/RandomWalker.h>
10 #include <fpa/Functors/Dijkstra/Image/Gaussian.h>
11
12 // -------------------------------------------------------------------------
13 const unsigned int Dim = 2;
14 typedef unsigned char TPixel;
15 typedef unsigned char TLabel;
16 typedef float TCost;
17 typedef itk::Image< TPixel, Dim > TImage;
18 typedef itk::Image< TLabel, Dim > TLabelImage;
19
20 // -------------------------------------------------------------------------
21 int main( int argc, char* argv[] )
22 {
23   // Get arguments
24   if( argc < 7 )
25   {
26     std::cerr
27       << "Usage: " << argv[ 0 ]
28       << " input_image input_label output_image output_costs alpha beta"
29       << std::endl;
30     return( 1 );
31
32   } // fi
33   std::string input_image_filename = argv[ 1 ];
34   std::string input_label_filename = argv[ 2 ];
35   std::string output_image_filename = argv[ 3 ];
36   std::string output_costs_filename = argv[ 4 ];
37   double alpha = std::atof( argv[ 5 ] );
38   double beta = std::atof( argv[ 6 ] );
39
40   // Read image
41   typedef itk::ImageFileReader< TImage > TImageReader;
42   TImageReader::Pointer input_image_reader = TImageReader::New( );
43   input_image_reader->SetFileName( input_image_filename );
44
45   // Read labels
46   typedef itk::ImageFileReader< TLabelImage > TLabelImageReader;
47   TLabelImageReader::Pointer input_label_reader = TLabelImageReader::New( );
48   input_label_reader->SetFileName( input_label_filename );
49
50   // Prepare weight functor
51   typedef fpa::Functors::Dijkstra::Image::Gaussian< TImage, TCost > TWeight;
52   TWeight::Pointer weight = TWeight::New( );
53   weight->SetAlpha( alpha );
54   weight->SetBeta( beta );
55
56   // Prepare filter
57   typedef fpa::Filters::Image::RandomWalker< TImage, TLabelImage, TCost > TFilter;
58   TFilter::Pointer filter = TFilter::New( );
59   filter->SetInputImage( input_image_reader->GetOutput( ) );
60   filter->SetInputLabels( input_label_reader->GetOutput( ) );
61   filter->SetWeightFunction( weight );
62
63   // Execute filter
64   filter->Update( );
65
66   // Save results
67   typedef itk::ImageFileWriter< TFilter::TLabelImage > TOutputWriter;
68   TOutputWriter::Pointer output_writer = TOutputWriter::New( );
69   output_writer->SetInput( filter->GetOutputLabels( ) );
70   output_writer->SetFileName( output_image_filename );
71
72   typedef itk::ImageFileWriter< TFilter::TCostsImage > TCostsWriter;
73   TCostsWriter::Pointer costs_writer = TCostsWriter::New( );
74   costs_writer->SetInput( filter->GetOutputCosts( ) );
75   costs_writer->SetFileName( output_costs_filename );
76
77   try
78   {
79     output_writer->Update( );
80     costs_writer->Update( );
81   }
82   catch( std::exception& err )
83   {
84     std::cerr << "Error caught: " << err.what( ) << std::endl;
85     return( 1 );
86
87   } // yrt
88   return( 0 );
89 }
90
91 // eof - $RCSfile$