2 #include <itkImageFileReader.h>
3 #include <itkSignedMaurerDistanceMapImageFilter.h>
4 #include <itkMinimumMaximumImageCalculator.h>
5 #include <fpa/Image/SkeletonFilter.h>
6 #include <cpExtensions/Algorithms/SkeletonWriter.h>
8 // -------------------------------------------------------------------------
9 typedef itk::Image< double, 2 > TImage;
10 typedef itk::ImageFileReader< TImage > TReader;
11 typedef itk::SignedMaurerDistanceMapImageFilter< TImage, TImage > TDMap;
12 typedef itk::MinimumMaximumImageCalculator< TImage > TMinMax;
13 typedef fpa::Image::SkeletonFilter< TImage > TFilter;
14 typedef TFilter::TSkeleton TSkeleton;
15 typedef cpExtensions::Algorithms::SkeletonWriter< TSkeleton > TWriter;
17 // -------------------------------------------------------------------------
18 int main( int argc, char* argv[] )
23 << "Usage: " << argv[ 0 ]
24 << " input_filename output_filename" << std::endl;
28 std::string in_fname = argv[ 1 ];
29 std::string out_fname = argv[ 2 ];
31 TReader::Pointer reader = TReader::New( );
32 reader->SetFileName( in_fname );
34 TDMap::Pointer dmap = TDMap::New( );
35 dmap->SetInput( reader->GetOutput( ) );
36 dmap->InsideIsPositiveOn( );
37 dmap->SquaredDistanceOff( );
38 dmap->UseImageSpacingOn( );
41 TMinMax::Pointer minmax = TMinMax::New( );
42 minmax->SetImage( dmap->GetOutput( ) );
45 TFilter::Pointer filter = TFilter::New( );
46 filter->SetInput( dmap->GetOutput( ) );
47 filter->AddSeed( minmax->GetIndexOfMaximum( ), 0 );
50 TWriter::Pointer writer = TWriter::New( );
51 writer->SetInput( filter->GetSkeleton( ) );
52 writer->SetFileName( out_fname );