6 #include <itkImageFileReader.h>
7 #include <itkImageFileWriter.h>
8 #include <itkSimpleFilterWatcher.h>
11 #include <cpPlugins/Extensions/Algorithms/MultiScaleGaussianImageFilter.h>
12 #include <cpPlugins/Extensions/Algorithms/GulsunTekMedialness.h>
13 #include <cpPlugins/Extensions/Algorithms/ImageFunctionFilter.h>
15 // -------------------------------------------------------------------------
17 typedef float TScalar;
18 const unsigned int Dimension = 3;
20 typedef itk::Vector< TScalar, Dimension > TVector;
21 typedef itk::Image< TPixel, Dimension > TImage;
22 typedef itk::Image< TVector, Dimension > TGradient;
23 typedef itk::Image< TScalar, Dimension > TScalarImage;
25 // -------------------------------------------------------------------------
26 int main( int argc, char* argv[] )
31 << "Usage: " << argv[ 0 ]
32 << " input_image output_medialness"
33 << " min_radius max_radius profile_sampling radial_sampling"
39 std::string image_fn = argv[ 1 ];
40 std::string medialness_fn = argv[ 2 ];
41 double min_radius = std::atof( argv[ 3 ] );
42 double max_radius = std::atof( argv[ 4 ] );
43 unsigned int profile_sampling = std::atoi( argv[ 5 ] );
44 unsigned int radial_sampling = std::atoi( argv[ 6 ] );
47 itk::ImageFileReader< TImage >::Pointer image_reader =
48 itk::ImageFileReader< TImage >::New( );
49 image_reader->SetFileName( image_fn );
52 image_reader->Update( );
54 catch( itk::ExceptionObject& err )
56 std::cerr << err << std::endl;
62 typedef cpPlugins::Extensions::Algorithms::
63 MultiScaleGaussianImageFilter< TImage, TGradient > TGradientFilter;
65 TGradientFilter::Pointer gradientFilter = TGradientFilter::New( );
66 gradientFilter->SetFilterToGradient( );
67 gradientFilter->SetInput( image_reader->GetOutput( ) );
68 for( int i = 7; i < argc; ++i )
69 gradientFilter->AddScale( std::atof( argv[ i ] ) );
72 itk::SimpleFilterWatcher gradientFilter_watcher( gradientFilter, "Gradient" );
73 gradientFilter->Update( );
75 // Prepare medialness function
76 typedef cpPlugins::Extensions::Algorithms::
77 GulsunTekMedialness< TGradient > TMedialness;
78 TMedialness::Pointer medialness = TMedialness::New( );
79 medialness->SetInputImage( gradientFilter->GetOutput( ) );
80 medialness->SetMinRadius( min_radius );
81 medialness->SetMaxRadius( max_radius );
82 medialness->SetProfileSampling( profile_sampling );
83 medialness->SetRadialSampling( radial_sampling );
85 // Prepare output filter
86 typedef cpPlugins::Extensions::Algorithms::
87 ImageFunctionFilter< TGradient, TScalarImage, TMedialness >
89 TFunctionApplier::Pointer medialnessFilter = TFunctionApplier::New( );
90 medialnessFilter->SetInput( gradientFilter->GetOutput( ) );
91 medialnessFilter->SetFunction( medialness );
94 itk::SimpleFilterWatcher medialnessFilter_watcher(
95 medialnessFilter, "Medialness"
97 medialnessFilter->Update( );
100 itk::ImageFileWriter< TScalarImage >::Pointer medialness_writer =
101 itk::ImageFileWriter< TScalarImage >::New( );
102 medialness_writer->SetInput( medialnessFilter->GetOutput( ) );
103 medialness_writer->SetFileName( medialness_fn );
106 medialness_writer->Update( );
108 catch( itk::ExceptionObject& err )
110 std::cerr << err << std::endl;