#include "BaseFunctions.h" #include #include #include // ------------------------------------------------------------------------- const unsigned int Dim = 2; typedef short TPixel; typedef unsigned char TLabel; typedef float TScalar; typedef itk::Image< TPixel, Dim > TInputImage; typedef itk::Image< TLabel, Dim > TLabelImage; typedef fpa::Image::RandomWalker< TInputImage, TLabelImage, TScalar > TFilter; typedef fpa::Image::Functors::Dijkstra::Gaussian< TInputImage, TScalar > TWeight; // ------------------------------------------------------------------------- int main( int argc, char* argv[] ) { // Get arguments if( argc < 6 ) { std::cerr << "Usage: " << argv[ 0 ] << " input_image labels_image output_image output_costs" << " beta" << std::endl; return( 1 ); } // fi std::string input_image_filename = argv[ 1 ]; std::string labels_image_filename = argv[ 2 ]; std::string output_image_filename = argv[ 3 ]; std::string output_costs_filename = argv[ 4 ]; double beta = std::atof( argv[ 5 ] ); // Read image TInputImage::Pointer image; std::string err0 = fpa::tests::image::Read( image, input_image_filename ); if( err0 != "" ) { std::cerr << "Error caught: " << err0 << std::endl; return( 1 ); } // fi // Read label TLabelImage::Pointer labels; std::string err1 = fpa::tests::image::Read( labels, labels_image_filename ); if( err1 != "" ) { std::cerr << "Error caught: " << err1 << std::endl; return( 1 ); } // fi // Prepare weight TWeight::Pointer weight = TWeight::New( ); weight->SetBeta( beta ); // Prepare filter TFilter::Pointer filter = TFilter::New( ); filter->SetInput( image ); filter->SetWeightFunction( weight ); filter->SetLabels( labels ); // Execute filter try { filter->Update( ); } catch( std::exception& err ) { std::cerr << "Error caught: " << err.what( ) << std::endl; return( 1 ); } // yrt // Save results std::string err2 = fpa::tests::image::Write( filter->GetMarks( ), output_image_filename ); std::string err3 = fpa::tests::image::Write( filter->GetOutput( ), output_costs_filename ); if( err2 != "" ) std::cerr << "Error caught: " << err2 << std::endl; if( err3 != "" ) std::cerr << "Error caught: " << err3 << std::endl; return( 0 ); } // eof - $RCSfile$