X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=tests%2Fimage%2FDijkstra%2FSkeleton.cxx;fp=tests%2Fimage%2FDijkstra%2FSkeleton.cxx;h=b792d392e45a956faed252ca0e935fde1ee49805;hb=2047276c8f1a02432fbcc7014722d460d6c1e60f;hp=0000000000000000000000000000000000000000;hpb=3c639e5da479c7216a0a302ffa156ac6762caeed;p=FrontAlgorithms.git diff --git a/tests/image/Dijkstra/Skeleton.cxx b/tests/image/Dijkstra/Skeleton.cxx new file mode 100644 index 0000000..b792d39 --- /dev/null +++ b/tests/image/Dijkstra/Skeleton.cxx @@ -0,0 +1,82 @@ +// ========================================================================= +// @author Leonardo Florez Valencia +// @email florez-l@javeriana.edu.co +// ========================================================================= + +#include +#include +#include +#include + +// ------------------------------------------------------------------------- +const unsigned int Dim = 2; +typedef unsigned char TPixel; +typedef itk::Image< TPixel, Dim > TImage; + +// ------------------------------------------------------------------------- +int main( int argc, char* argv[] ) +{ + // Get arguments + if( argc < 3 ) + { + std::cerr + << "Usage: " << argv[ 0 ] + << " input_image output_skeleton [seed]" + << std::endl; + return( 1 ); + + } // fi + std::string input_image_filename = argv[ 1 ]; + std::string output_skeleton_filename = argv[ 2 ]; + + // Read image + typedef itk::ImageFileReader< TImage > TImageReader; + TImageReader::Pointer input_image_reader = TImageReader::New( ); + input_image_reader->SetFileName( input_image_filename ); + + // Prepare filter + typedef fpa::Filters::Image::Skeleton< TImage > TFilter; + TFilter::Pointer filter = TFilter::New( ); + filter->SetInput( input_image_reader->GetOutput( ) ); + + // Get seed + if( argc >= Dim + 3 ) + { + TImage::IndexType seed; + for( int j = 0; j < Dim; ++j ) + if( 3 + j < argc ) + seed[ j ] = std::atoi( argv[ 3 + j ] ); + filter->SeedFromMaximumDistanceOff( ); + filter->SetSeed( seed ); + } + else + filter->SeedFromMaximumDistanceOn( ); + + // Configure distance map + filter->GetDistanceMap( )->InsideIsPositiveOn( ); + filter->GetDistanceMap( )->SquaredDistanceOff( ); + filter->GetDistanceMap( )->UseImageSpacingOn( ); + + // Execute filter + filter->Update( ); + + // Save results + typedef fpa::Common::Image::SkeletonWriter< TFilter::TSkeleton > TSkeletonWriter; + TSkeletonWriter::Pointer skeleton_writer = TSkeletonWriter::New( ); + skeleton_writer->SetInput( filter->GetOutput( ) ); + skeleton_writer->SetFileName( output_skeleton_filename ); + + try + { + skeleton_writer->Update( ); + } + catch( std::exception& err ) + { + std::cerr << "Error caught: " << err.what( ) << std::endl; + return( 1 ); + + } // yrt + return( 0 ); +} + +// eof - $RCSfile$