2 #include <itkMinimumMaximumImageCalculator.h>
3 #include <itkSignedMaurerDistanceMapImageFilter.h>
4 #include <itkImageFileReader.h>
5 #include <itkImageFileWriter.h>
6 #include <fpa/Image/SkeletonFilter.h>
7 #include <cpExtensions/Algorithms/SkeletonToImageFilter.h>
9 typedef double TScalar;
10 typedef itk::Image< TScalar, 3 > TImage;
11 typedef itk::MinimumMaximumImageCalculator< TImage > TMinMax;
12 typedef itk::SignedMaurerDistanceMapImageFilter< TImage, TImage > TDMap;
13 typedef fpa::Image::SkeletonFilter< TImage > TSkeletonFilter;
14 typedef TSkeletonFilter::TSkeleton TSkeleton;
15 typedef cpExtensions::Algorithms::SkeletonToImageFilter< TSkeleton, TImage > TSkeletonToImage;
16 typedef itk::ImageFileReader< TImage > TReader;
17 typedef itk::ImageFileWriter< TImage > TWriter;
19 int main( int argc, char* argv[] )
24 << "Usage: " << argv[ 0 ]
25 << " image prefix number_of_samples [seed_x seed_y seed_z]"
30 std::string image_name = argv[ 1 ];
32 TReader::Pointer reader = TReader::New( );
33 reader->SetFileName( image_name );
36 TDMap::Pointer dmap = TDMap::New( );
37 dmap->SetInput( reader->GetOutput( ) );
38 dmap->InsideIsPositiveOn( );
40 const TImage* image = dmap->GetOutput( );
42 std::string prefix = argv[ 2 ];
43 std::istringstream str( argv[ 3 ] );
44 unsigned int number_of_samples;
45 str >> number_of_samples;
46 TImage::IndexType seed;
49 TMinMax::Pointer minmax = TMinMax::New( );
50 minmax->SetImage( image );
52 seed = minmax->GetIndexOfMaximum( );
56 std::istringstream str_x( argv[ 4 ] );
57 std::istringstream str_y( argv[ 5 ] );
58 std::istringstream str_z( argv[ 6 ] );
59 TImage::PointType pnt;
63 image->TransformPhysicalPointToIndex( pnt, seed );
67 for( unsigned int i = 0; i < number_of_samples; ++i )
69 std::cout << i << std::endl;
70 TSkeletonFilter::Pointer skeleton = TSkeletonFilter::New( );
71 skeleton->SetInput( image );
72 skeleton->AddSeed( seed, 0 );
75 TSkeletonToImage::Pointer sk2im = TSkeletonToImage::New( );
76 sk2im->SetTemplateImage( image );
77 sk2im->SetSkeleton( skeleton->GetSkeleton( ) );
78 sk2im->SetOutsideValue( 0 );
79 sk2im->SetInsideValue( 1 );
82 TWriter::Pointer writer = TWriter::New( );
83 writer->SetInput( sk2im->GetOutput( ) );
84 writer->SetFileName( "skeleton.mhd" );