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