]> Creatis software - FrontAlgorithms.git/blobdiff - appli/examples/example_Image_RegionGrow_ConnectedPixels.cxx
CMake updated. Some other filters added.
[FrontAlgorithms.git] / appli / examples / example_Image_RegionGrow_ConnectedPixels.cxx
diff --git a/appli/examples/example_Image_RegionGrow_ConnectedPixels.cxx b/appli/examples/example_Image_RegionGrow_ConnectedPixels.cxx
new file mode 100644 (file)
index 0000000..4f65ce6
--- /dev/null
@@ -0,0 +1,98 @@
+#include <cstdlib>
+#include <iostream>
+#include <limits>
+#include <string>
+
+#include <itkImage.h>
+#include <itkImageToVTKImageFilter.h>
+
+#include <fpa/Image/RegionGrow.h>
+#include <fpa/Image/Functors/RegionGrowThresholdFunction.h>
+#include <fpa/VTK/Image2DObserver.h>
+
+#include "fpa_Utility.h"
+
+// -------------------------------------------------------------------------
+const unsigned int Dim = 2;
+typedef unsigned char TPixel;
+typedef itk::Image< TPixel, Dim > TImage;
+
+// -------------------------------------------------------------------------
+int main( int argc, char* argv[] )
+{
+  if( argc < 3 )
+  {
+    std::cerr
+      << "Usage: " << argv[ 0 ]
+      << " input_image neighborhood_order"
+      << std::endl;
+    return( 1 );
+
+  } // fi
+  std::string input_image_fn = argv[ 1 ];
+  unsigned int neighborhood_order = std::atoi( argv[ 2 ] );
+
+  // Read image
+  TImage::Pointer input_image;
+  std::string err = fpa_Utility::ReadImage( input_image, input_image_fn );
+  if( err != "" )
+  {
+    std::cerr << err << std::endl;
+    return( 1 );
+
+  } // fi
+
+  // Show image and wait for, at least, one seed
+  itk::ImageToVTKImageFilter< TImage >::Pointer vtk_input_image =
+    itk::ImageToVTKImageFilter< TImage >::New( );
+  vtk_input_image->SetInput( input_image );
+  vtk_input_image->Update( );
+
+  fpa_Utility::Viewer2DWithSeeds viewer;
+  viewer.SetImage( vtk_input_image->GetOutput( ) );
+  while( viewer.GetNumberOfSeeds( ) == 0 )
+    viewer.Start( );
+
+  // Region growing types
+  typedef fpa::Image::RegionGrow< TImage > TFilter;
+  typedef fpa::Image::Functors::
+    RegionGrowThresholdFunction< TImage > TFunction;
+
+  // Prepare region grow function
+  TFunction::Pointer function = TFunction::New( );
+
+  // Prepare region grow filter
+  TFilter::Pointer filter = TFilter::New( );
+  filter->SetInput( input_image );
+  filter->SetGrowingFunction( function );
+  filter->SetNeighborhoodOrder( neighborhood_order );
+  filter->SetOutsideValue( TPixel( 0 ) );
+  filter->SetInsideValue( std::numeric_limits< TPixel >::max( ) );
+  filter->StopAtOneFrontOff( );
+
+  // Associate seed
+  TImage::PointType pnt;
+  TImage::IndexType idx;
+  viewer.GetSeed( pnt, 0 );
+  if( input_image->TransformPhysicalPointToIndex( pnt, idx ) )
+    filter->AddSeed( idx, 0 );
+  function->SetLowerThreshold( input_image->GetPixel( idx ) );
+  function->SetUpperThreshold( input_image->GetPixel( idx ) );
+
+  // Prepare graphical debugger
+  typedef fpa::VTK::Image2DObserver< TFilter, vtkRenderWindow > TDebugger;
+  TDebugger::Pointer debugger = TDebugger::New( );
+  debugger->SetRenderWindow( viewer.Window );
+  debugger->SetRenderPercentage( 0.01 );
+  filter->AddObserver( itk::AnyEvent( ), debugger );
+  filter->ThrowEventsOn( );
+
+  // Go!
+  filter->Update( );
+
+  // Some more interaction and finish
+  viewer.Start( );
+  return( 0 );
+}
+
+// eof - $RCSfile$