#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$