X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=appli%2Fexamples%2Fexample_3DGulsunTekMedialness.cxx;fp=appli%2Fexamples%2Fexample_3DGulsunTekMedialness.cxx;h=796cf053b737f4bc218803b136722019ec3a7fe6;hb=a13f931723180e65d7dfdef297c465956952eb7a;hp=0000000000000000000000000000000000000000;hpb=d4dc1570eeb643571de66fa4be5b09b37e90c8cc;p=cpPlugins.git diff --git a/appli/examples/example_3DGulsunTekMedialness.cxx b/appli/examples/example_3DGulsunTekMedialness.cxx new file mode 100644 index 0000000..796cf05 --- /dev/null +++ b/appli/examples/example_3DGulsunTekMedialness.cxx @@ -0,0 +1,118 @@ +#include +#include +#include + +#include +#include +#include +#include +#include + +#include +#include +#include + +// ------------------------------------------------------------------------- +typedef short TPixel; +typedef float TScalar; +const unsigned int Dimension = 3; + +typedef itk::Vector< TScalar, Dimension > TVector; +typedef itk::Image< TPixel, Dimension > TImage; +typedef itk::Image< TVector, Dimension > TGradient; +typedef itk::Image< TScalar, Dimension > TScalarImage; + +// ------------------------------------------------------------------------- +int main( int argc, char* argv[] ) +{ + if( argc < 8 ) + { + std::cout + << "Usage: " << argv[ 0 ] + << " input_image output_medialness" + << " min_radius max_radius profile_sampling radial_sampling" + << " s0 s1 ..." + << std::endl; + return( 1 ); + + } // fi + std::string image_fn = argv[ 1 ]; + std::string medialness_fn = argv[ 2 ]; + double min_radius = std::atof( argv[ 3 ] ); + double max_radius = std::atof( argv[ 4 ] ); + unsigned int profile_sampling = std::atoi( argv[ 5 ] ); + unsigned int radial_sampling = std::atoi( argv[ 6 ] ); + + // Read image + itk::ImageFileReader< TImage >::Pointer image_reader = + itk::ImageFileReader< TImage >::New( ); + image_reader->SetFileName( image_fn ); + try + { + image_reader->Update( ); + } + catch( itk::ExceptionObject& err ) + { + std::cerr << err << std::endl; + return( 1 ); + + } // yrt + + // Prepare filter + typedef cpPlugins::Extensions::Algorithms:: + MultiScaleGaussianImageFilter< TImage, TGradient > TGradientFilter; + + TGradientFilter::Pointer gradientFilter = TGradientFilter::New( ); + gradientFilter->SetFilterToGradient( ); + gradientFilter->SetInput( image_reader->GetOutput( ) ); + for( int i = 7; i < argc; ++i ) + gradientFilter->AddScale( std::atof( argv[ i ] ) ); + + // Execute filter + itk::SimpleFilterWatcher gradientFilter_watcher( gradientFilter, "Gradient" ); + gradientFilter->Update( ); + + // Prepare medialness function + typedef cpPlugins::Extensions::Algorithms:: + GulsunTekMedialness< TGradient > TMedialness; + TMedialness::Pointer medialness = TMedialness::New( ); + medialness->SetInputImage( gradientFilter->GetOutput( ) ); + medialness->SetMinRadius( min_radius ); + medialness->SetMaxRadius( max_radius ); + medialness->SetProfileSampling( profile_sampling ); + medialness->SetRadialSampling( radial_sampling ); + + // Prepare output filter + typedef cpPlugins::Extensions::Algorithms:: + ImageFunctionFilter< TGradient, TScalarImage, TMedialness > + TFunctionApplier; + TFunctionApplier::Pointer medialnessFilter = TFunctionApplier::New( ); + medialnessFilter->SetInput( gradientFilter->GetOutput( ) ); + medialnessFilter->SetFunction( medialness ); + + // Execute filter + itk::SimpleFilterWatcher medialnessFilter_watcher( + medialnessFilter, "Medialness" + ); + medialnessFilter->Update( ); + + // Write image + itk::ImageFileWriter< TScalarImage >::Pointer medialness_writer = + itk::ImageFileWriter< TScalarImage >::New( ); + medialness_writer->SetInput( medialnessFilter->GetOutput( ) ); + medialness_writer->SetFileName( medialness_fn ); + try + { + medialness_writer->Update( ); + } + catch( itk::ExceptionObject& err ) + { + std::cerr << err << std::endl; + return( 1 ); + + } // yrt + + return( 0 ); +} + +// eof - $RCSfile$