1 // =========================================================================
2 // @author Leonardo Florez Valencia
3 // @email florez-l@javeriana.edu.co
4 // =========================================================================
7 #include <itkImageFileReader.h>
8 #include <itkImageFileWriter.h>
9 #include <fpa/Common/OriginalRandomWalker.h>
10 #include <fpa/Functors/Dijkstra/Image/Gaussian.h>
12 // -------------------------------------------------------------------------
13 const unsigned int Dim = 2;
14 typedef unsigned char TPixel;
15 typedef unsigned char TLabel;
16 typedef double TScalar;
18 typedef itk::Image< TPixel, Dim > TImage;
19 typedef itk::Image< TLabel, Dim > TLabels;
21 // -------------------------------------------------------------------------
22 int main( int argc, char* argv[] )
24 // Get input arguments
28 << "Usage: " << argv[ 0 ]
29 << " input_image input_labels output_labels output_probabilities"
35 std::string input_image_filename, input_labels_filename;
36 std::string output_labels_filename, output_probabilities_filename;
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 ] );
46 typedef itk::ImageFileReader< TImage > TImageReader;
47 TImageReader::Pointer input_image_reader = TImageReader::New( );
48 input_image_reader->SetFileName( input_image_filename );
51 typedef itk::ImageFileReader< TLabels > TLabelsReader;
52 TLabelsReader::Pointer input_labels_reader = TLabelsReader::New( );
53 input_labels_reader->SetFileName( input_labels_filename );
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( );
63 typedef fpa::Common::OriginalRandomWalker< 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 );
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( ) );
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( ) );
84 output_labels_writer->Update( );
85 output_probabilities_writer->Update( );
87 catch( std::exception& err )
89 std::cerr << "Error caught: " << err.what( ) << std::endl;