7 #include <itkImageFileReader.h>
8 #include <itkImageToVTKImageFilter.h>
10 #include <vtkImageActor.h>
11 #include <vtkProperty.h>
12 #include <vtkRenderer.h>
13 #include <vtkRenderWindow.h>
14 #include <vtkRenderWindowInteractor.h>
15 #include <vtkSmartPointer.h>
16 #include <vtkSphereSource.h>
18 #include <fpa/Image/RegionGrowWithMultipleThresholds.h>
19 #include <fpa/VTK/ImageMPR.h>
20 #include <fpa/VTK/Image3DObserver.h>
22 // -------------------------------------------------------------------------
23 const unsigned int Dim = 3;
25 typedef double TScalar;
26 typedef itk::Image< TPixel, Dim > TImage;
27 typedef itk::ImageToVTKImageFilter< TImage > TVTKImage;
29 typedef itk::ImageFileReader< TImage > TImageReader;
32 fpa::Image::RegionGrowWithMultipleThresholds< TImage >
35 fpa::VTK::Image3DObserver< TFrontAlgorithm, vtkRenderWindow >
38 // -------------------------------------------------------------------------
39 int main( int argc, char* argv[] )
44 << "Usage: " << argv[ 0 ]
45 << " input_image s_x s_y s_z thr_0 thr_1 n_samples" << std::endl;
49 std::string input_image_fn = argv[ 1 ];
50 TImage::PointType seed_pnt;
51 seed_pnt[ 0 ] = std::atof( argv[ 2 ] );
52 seed_pnt[ 1 ] = std::atof( argv[ 3 ] );
53 seed_pnt[ 2 ] = std::atof( argv[ 4 ] );
54 TPixel thr_0 = TPixel( std::atof( argv[ 5 ] ) );
55 TPixel thr_1 = TPixel( std::atof( argv[ 6 ] ) );
56 unsigned int n_samples = std::atoi( argv[ 7 ] );
59 TImageReader::Pointer input_image_reader = TImageReader::New( );
60 input_image_reader->SetFileName( input_image_fn );
63 input_image_reader->Update( );
65 catch( itk::ExceptionObject& err )
67 std::cerr << "Error caught: " << err << std::endl;
71 TImage::ConstPointer input_image = input_image_reader->GetOutput( );
72 TImage::SpacingType spac = input_image->GetSpacing( );
73 double min_spac = spac[ 0 ];
74 for( unsigned int d = 1; d < Dim; d++ )
75 min_spac = ( spac[ d ] < min_spac )? spac[ d ]: min_spac;
77 TVTKImage::Pointer vtk_image = TVTKImage::New( );
78 vtk_image->SetInput( input_image );
81 vtkSmartPointer< vtkSphereSource > seed =
82 vtkSmartPointer< vtkSphereSource >::New( );
83 seed->SetCenter( seed_pnt[ 0 ], seed_pnt[ 1 ], seed_pnt[ 2 ] );
84 seed->SetRadius( min_spac * double( 5 ) );
87 fpa::VTK::ImageMPR view;
88 view.SetBackground( 0.3, 0.2, 0.8 );
89 view.SetSize( 800, 800 );
90 view.SetImage( vtk_image->GetOutput( ) );
91 view.AddPolyData( seed->GetOutput( ), 1, 0, 0 );
95 TObserver::Pointer obs = TObserver::New( );
96 obs->SetImage( input_image, view.GetWindow( ) );
98 // Configure algorithm
99 TFrontAlgorithm::Pointer algorithm = TFrontAlgorithm::New( );
100 algorithm->AddThresholds( thr_0, thr_1, n_samples );
102 TImage::IndexType seed_idx;
103 input_image->TransformPhysicalPointToIndex( seed_pnt, seed_idx );
104 algorithm->AddSeed( seed_idx, 0 );
106 algorithm->AddObserver( itk::AnyEvent( ), obs );
107 algorithm->ThrowEventsOn( );
108 algorithm->SetInput( input_image );
109 algorithm->SetNeighborhoodOrder( 1 );
110 algorithm->SetDerivativeThreshold( double( 3 ) );
111 algorithm->Update( );