]> Creatis software - FrontAlgorithms.git/blob - tests/image/Dijkstra/Skeleton.cxx
b792d392e45a956faed252ca0e935fde1ee49805
[FrontAlgorithms.git] / tests / image / Dijkstra / Skeleton.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 <fpa/Common/Image/SkeletonWriter.h>
9 #include <fpa/Filters/Image/Skeleton.h>
10
11 // -------------------------------------------------------------------------
12 const unsigned int Dim = 2;
13 typedef unsigned char TPixel;
14 typedef itk::Image< TPixel, Dim > TImage;
15
16 // -------------------------------------------------------------------------
17 int main( int argc, char* argv[] )
18 {
19   // Get arguments
20   if( argc < 3 )
21   {
22     std::cerr
23       << "Usage: " << argv[ 0 ]
24       << " input_image output_skeleton [seed]"
25       << std::endl;
26     return( 1 );
27
28   } // fi
29   std::string input_image_filename = argv[ 1 ];
30   std::string output_skeleton_filename = argv[ 2 ];
31
32   // Read image
33   typedef itk::ImageFileReader< TImage > TImageReader;
34   TImageReader::Pointer input_image_reader = TImageReader::New( );
35   input_image_reader->SetFileName( input_image_filename );
36
37   // Prepare filter
38   typedef fpa::Filters::Image::Skeleton< TImage > TFilter;
39   TFilter::Pointer filter = TFilter::New( );
40   filter->SetInput( input_image_reader->GetOutput( ) );
41
42   // Get seed
43   if( argc >= Dim + 3 )
44   {
45     TImage::IndexType seed;
46     for( int j = 0; j < Dim; ++j )
47       if( 3 + j < argc )
48         seed[ j ] = std::atoi( argv[ 3 + j ] );
49     filter->SeedFromMaximumDistanceOff( );
50     filter->SetSeed( seed );
51   }
52   else
53     filter->SeedFromMaximumDistanceOn( );
54
55   // Configure distance map
56   filter->GetDistanceMap( )->InsideIsPositiveOn( );
57   filter->GetDistanceMap( )->SquaredDistanceOff( );
58   filter->GetDistanceMap( )->UseImageSpacingOn( );
59
60   // Execute filter
61   filter->Update( );
62
63   // Save results
64   typedef fpa::Common::Image::SkeletonWriter< TFilter::TSkeleton > TSkeletonWriter;
65   TSkeletonWriter::Pointer skeleton_writer = TSkeletonWriter::New( );
66   skeleton_writer->SetInput( filter->GetOutput( ) );
67   skeleton_writer->SetFileName( output_skeleton_filename );
68
69   try
70   {
71     skeleton_writer->Update( );
72   }
73   catch( std::exception& err )
74   {
75     std::cerr << "Error caught: " << err.what( ) << std::endl;
76     return( 1 );
77
78   } // yrt
79   return( 0 );
80 }
81
82 // eof - $RCSfile$