]> Creatis software - FrontAlgorithms.git/blob - examples/image/RandomWalker/Original.cxx
...
[FrontAlgorithms.git] / examples / 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/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 double        TScalar;
17
18 typedef itk::Image< TPixel, Dim > TImage;
19 typedef itk::Image< TLabel, Dim > TLabels;
20
21 // -------------------------------------------------------------------------
22 int main( int argc, char* argv[] )
23 {
24   // Get input arguments
25   if( argc < 7 )
26   {
27     std::cerr
28       << "Usage: " << argv[ 0 ]
29       << " input_image input_labels output_labels output_probabilities"
30       << " beta eps"
31       << std::endl;
32     return( 1 );
33
34   } // fi
35   std::string input_image_filename, input_labels_filename;
36   std::string output_labels_filename, output_probabilities_filename;
37   double beta, eps;
38   input_image_filename = argv[ 1 ];
39   input_labels_filename = argv[ 2 ];
40   output_labels_filename = argv[ 3 ];
41   output_probabilities_filename = argv[ 4 ];
42   beta = std::atof( argv[ 5 ] );
43   eps = std::atof( argv[ 6 ] );
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 function
56   typedef fpa::Functors::Dijkstra::Image::Gaussian< TImage, TScalar > TFunction;
57   TFunction::Pointer edge = TFunction::New( );
58   edge->SetBeta( beta );
59   edge->SetEpsilon( eps );
60   edge->TreatAsWeightOff( );
61
62   // Random walker
63   typedef fpa::Common::RandomWalker< TImage, TLabels, TScalar > TFilter;
64   TFilter::Pointer rw = TFilter::New( );
65   rw->SetInput( input_image_reader->GetOutput( ) );
66   rw->SetInputLabels( input_labels_reader->GetOutput( ) );
67   rw->SetEdgeFunction( edge );
68
69   // Save labels
70   typedef itk::ImageFileWriter< TFilter::TLabels > TLabelsWriter;
71   TLabelsWriter::Pointer output_labels_writer = TLabelsWriter::New( );
72   output_labels_writer->SetFileName( output_labels_filename );
73   output_labels_writer->SetInput( rw->GetOutput( ) );
74
75   // Save probabilities
76   typedef itk::ImageFileWriter< TFilter::TScalarImage > TProbabilitesWriter;
77   TProbabilitesWriter::Pointer output_probabilities_writer =
78     TProbabilitesWriter::New( );
79   output_probabilities_writer->SetFileName( output_probabilities_filename );
80   output_probabilities_writer->SetInput( rw->GetOutputProbabilities( ) );
81
82   try
83   {
84     output_labels_writer->Update( );
85     output_probabilities_writer->Update( );
86   }
87   catch( std::exception& err )
88   {
89     std::cerr << "Error caught: " << err.what( ) << std::endl;
90     return( 1 );
91
92   } // yrt
93   return( 0 );
94 }
95
96 // eof - $RCSfile$