]> 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 = 3;
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 arguments
23   if( argc < 4 )
24   {
25     std::cerr
26       << "Usage: " << argv[ 0 ]
27       << " input_image output_labels output_probabilities"
28       << std::endl;
29     return( 1 );
30
31   } // fi
32   std::string input_image_filename = argv[ 1 ];
33   std::string output_labels_filename = argv[ 2 ];
34   std::string output_probabilities_filename = argv[ 3 ];
35   double beta = 90;
36   double eps = 1e-5;
37
38   TImage::IndexType s1, s2;
39   s1.Fill( 0 );
40   s2.Fill( 0 );
41   s1[ 0 ] = 131;
42   s1[ 1 ] = 150;
43   s2[ 0 ] = 200;
44   s2[ 1 ] = 200;
45
46   // Read image
47   TImage::Pointer input;
48   typedef itk::ImageFileReader< TImage > TImageReader;
49   TImageReader::Pointer input_image_reader = TImageReader::New( );
50   input_image_reader->SetFileName( input_image_filename );
51
52   // Random walker
53   typedef fpa::Common::OriginalRandomWalker< TImage, TLabels > TFilter;
54   TFilter::Pointer rw = TFilter::New( );
55   rw->SetInput( input_image_reader->GetOutput( ) );
56   rw->SetBeta( beta );
57   rw->SetEpsilon( eps );
58   rw->AddSeed( s1, 100 );
59   rw->AddSeed( s2, 150 );
60   rw->NormalizeWeightsOn( );
61
62   // Save labels
63   typedef itk::ImageFileWriter< TFilter::TLabels > TLabelsWriter;
64   TLabelsWriter::Pointer output_labels_writer = TLabelsWriter::New( );
65   output_labels_writer->SetFileName( output_labels_filename );
66   output_labels_writer->SetInput( rw->GetOutput( ) );
67
68   // Save probabilities
69   typedef itk::ImageFileWriter< TFilter::TScalarImage > TProbabilitesWriter;
70   TProbabilitesWriter::Pointer output_probabilities_writer =
71     TProbabilitesWriter::New( );
72   output_probabilities_writer->SetFileName( output_probabilities_filename );
73   output_probabilities_writer->SetInput( rw->GetOutputProbabilities( ) );
74
75   try
76   {
77     output_labels_writer->Update( );
78     output_probabilities_writer->Update( );
79   }
80   catch( std::exception& err )
81   {
82     std::cerr << "Error caught: " << err.what( ) << std::endl;
83     return( 1 );
84
85   } // yrt
86   return( 0 );
87 }
88
89 // eof - $RCSfile$