]> Creatis software - FrontAlgorithms.git/blob - tests/image/RandomWalker/Original.cxx
...
[FrontAlgorithms.git] / tests / image / RandomWalker / Original.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/Common/OriginalRandomWalker.h>
10
11 // -------------------------------------------------------------------------
12 const unsigned int Dim = 2;
13 typedef unsigned char TPixel;
14 typedef unsigned char TLabel;
15
16 typedef itk::Image< TPixel, Dim > TImage;
17 typedef itk::Image< TLabel, Dim > TLabels;
18
19 // -------------------------------------------------------------------------
20 int main( int argc, char* argv[] )
21 {
22   // Get input arguments
23   if( argc < 8 )
24   {
25     std::cerr
26       << "Usage: " << argv[ 0 ]
27       << " input_image input_labels output_labels output_probabilities"
28       << " beta eps normalize"
29       << std::endl;
30     return( 1 );
31
32   } // fi
33   std::string input_image_filename, input_labels_filename;
34   std::string output_labels_filename, output_probabilities_filename;
35   double beta, eps;
36   bool normalize;
37   input_image_filename = argv[ 1 ];
38   input_labels_filename = argv[ 2 ];
39   output_labels_filename = argv[ 3 ];
40   output_probabilities_filename = argv[ 4 ];
41   beta = std::atof( argv[ 5 ] );
42   eps = std::atof( argv[ 6 ] );
43   normalize = ( argv[ 7 ][ 0 ] == '1' );
44
45   // Read image
46   typedef itk::ImageFileReader< TImage > TImageReader;
47   TImageReader::Pointer input_image_reader = TImageReader::New( );
48   input_image_reader->SetFileName( input_image_filename );
49
50   // Read labels
51   typedef itk::ImageFileReader< TLabels > TLabelsReader;
52   TLabelsReader::Pointer input_labels_reader = TLabelsReader::New( );
53   input_labels_reader->SetFileName( input_labels_filename );
54
55   // Random walker
56   typedef fpa::Common::OriginalRandomWalker< TImage, TLabels > TFilter;
57   TFilter::Pointer rw = TFilter::New( );
58   rw->SetInput( input_image_reader->GetOutput( ) );
59   rw->SetInputLabels( input_labels_reader->GetOutput( ) );
60   rw->SetBeta( beta );
61   rw->SetEpsilon( eps );
62   rw->SetNormalizeWeights( normalize );
63
64   // Save labels
65   typedef itk::ImageFileWriter< TFilter::TLabels > TLabelsWriter;
66   TLabelsWriter::Pointer output_labels_writer = TLabelsWriter::New( );
67   output_labels_writer->SetFileName( output_labels_filename );
68   output_labels_writer->SetInput( rw->GetOutput( ) );
69
70   // Save probabilities
71   typedef itk::ImageFileWriter< TFilter::TScalarImage > TProbabilitesWriter;
72   TProbabilitesWriter::Pointer output_probabilities_writer =
73     TProbabilitesWriter::New( );
74   output_probabilities_writer->SetFileName( output_probabilities_filename );
75   output_probabilities_writer->SetInput( rw->GetOutputProbabilities( ) );
76
77   try
78   {
79     output_labels_writer->Update( );
80     output_probabilities_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$