]> Creatis software - cpPlugins.git/blobdiff - appli/examples/example_3DGulsunTekMedialness.cxx
ITK-VTK-Qt4-CMake coordination/factory problem finally solvedgit status!
[cpPlugins.git] / appli / examples / example_3DGulsunTekMedialness.cxx
diff --git a/appli/examples/example_3DGulsunTekMedialness.cxx b/appli/examples/example_3DGulsunTekMedialness.cxx
new file mode 100644 (file)
index 0000000..796cf05
--- /dev/null
@@ -0,0 +1,118 @@
+#include <cstdlib>
+#include <iostream>
+#include <string>
+
+#include <itkImage.h>
+#include <itkImageFileReader.h>
+#include <itkImageFileWriter.h>
+#include <itkSimpleFilterWatcher.h>
+#include <itkVector.h>
+
+#include <cpPlugins/Extensions/Algorithms/MultiScaleGaussianImageFilter.h>
+#include <cpPlugins/Extensions/Algorithms/GulsunTekMedialness.h>
+#include <cpPlugins/Extensions/Algorithms/ImageFunctionFilter.h>
+
+// -------------------------------------------------------------------------
+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$