7 #include <itkImageToVTKImageFilter.h>
9 #include <fpa/Image/RegionGrow.h>
10 #include <fpa/Image/Functors/RegionGrowThresholdFunction.h>
11 #include <fpa/VTK/Image2DObserver.h>
13 #include "fpa_Utility.h"
15 // -------------------------------------------------------------------------
16 const unsigned int Dim = 2;
17 typedef unsigned char TPixel;
18 typedef itk::Image< TPixel, Dim > TImage;
20 // -------------------------------------------------------------------------
21 int main( int argc, char* argv[] )
26 << "Usage: " << argv[ 0 ]
27 << " input_image neighborhood_order"
32 std::string input_image_fn = argv[ 1 ];
33 unsigned int neighborhood_order = std::atoi( argv[ 2 ] );
36 TImage::Pointer input_image;
37 std::string err = fpa_Utility::ReadImage( input_image, input_image_fn );
40 std::cerr << err << std::endl;
45 // Show image and wait for, at least, one seed
46 itk::ImageToVTKImageFilter< TImage >::Pointer vtk_input_image =
47 itk::ImageToVTKImageFilter< TImage >::New( );
48 vtk_input_image->SetInput( input_image );
49 vtk_input_image->Update( );
51 fpa_Utility::Viewer2DWithSeeds viewer;
52 viewer.SetImage( vtk_input_image->GetOutput( ) );
53 while( viewer.GetNumberOfSeeds( ) == 0 )
56 // Region growing types
57 typedef fpa::Image::RegionGrow< TImage > TFilter;
58 typedef fpa::Image::Functors::
59 RegionGrowThresholdFunction< TImage > TFunction;
61 // Prepare region grow function
62 TFunction::Pointer function = TFunction::New( );
64 // Prepare region grow filter
65 TFilter::Pointer filter = TFilter::New( );
66 filter->SetInput( input_image );
67 filter->SetGrowingFunction( function );
68 filter->SetNeighborhoodOrder( neighborhood_order );
69 filter->SetOutsideValue( TPixel( 0 ) );
70 filter->SetInsideValue( std::numeric_limits< TPixel >::max( ) );
71 filter->StopAtOneFrontOff( );
74 TImage::PointType pnt;
75 TImage::IndexType idx;
76 viewer.GetSeed( pnt, 0 );
77 if( input_image->TransformPhysicalPointToIndex( pnt, idx ) )
78 filter->AddSeed( idx, 0 );
79 function->SetLowerThreshold( input_image->GetPixel( idx ) );
80 function->SetUpperThreshold( input_image->GetPixel( idx ) );
82 // Prepare graphical debugger
83 typedef fpa::VTK::Image2DObserver< TFilter, vtkRenderWindow > TDebugger;
84 TDebugger::Pointer debugger = TDebugger::New( );
85 debugger->SetRenderWindow( viewer.Window );
86 debugger->SetRenderPercentage( 0.01 );
87 filter->AddObserver( itk::AnyEvent( ), debugger );
88 filter->ThrowEventsOn( );
93 // Some more interaction and finish