]> Creatis software - FrontAlgorithms.git/blob - appli/examples/example_ImageAlgorithmRegionGrow_MultipleThresholds.cxx
1f4bf3fa51f4204d927d155f148c37d93539c903
[FrontAlgorithms.git] / appli / examples / example_ImageAlgorithmRegionGrow_MultipleThresholds.cxx
1 #include <iostream>
2 #include <limits>
3 #include <set>
4 #include <string>
5
6 #include <itkImage.h>
7 #include <itkImageFileReader.h>
8 #include <itkImageToVTKImageFilter.h>
9
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>
17
18 #include <fpa/Image/RegionGrowWithMultipleThresholds.h>
19 #include <fpa/VTK/ImageMPR.h>
20 #include <fpa/VTK/Image3DObserver.h>
21
22 // -------------------------------------------------------------------------
23 const unsigned int Dim = 3;
24 typedef short TPixel;
25 typedef double TScalar;
26 typedef itk::Image< TPixel, Dim >  TImage;
27 typedef itk::ImageToVTKImageFilter< TImage > TVTKImage;
28
29 typedef itk::ImageFileReader< TImage >   TImageReader;
30
31 typedef
32 fpa::Image::RegionGrowWithMultipleThresholds< TImage >
33 TFrontAlgorithm;
34 typedef
35 fpa::VTK::Image3DObserver< TFrontAlgorithm, vtkRenderWindow >
36 TObserver;
37
38 // -------------------------------------------------------------------------
39 int main( int argc, char* argv[] )
40 {
41   if( argc < 5 )
42   {
43     std::cerr
44       << "Usage: " << argv[ 0 ]
45       << " input_image thr_0 thr_1 n_samples" << std::endl;
46     return( 1 );
47
48   } // fi
49   std::string input_image_fn = argv[ 1 ];
50   TPixel thr_0 = TPixel( std::atof( argv[ 2 ] ) );
51   TPixel thr_1 = TPixel( std::atof( argv[ 3 ] ) );
52   unsigned int n_samples = std::atoi( argv[ 4 ] );
53   
54   // Read image
55   TImageReader::Pointer input_image_reader = TImageReader::New( );
56   input_image_reader->SetFileName( input_image_fn );
57   try
58   {
59     input_image_reader->Update( );
60   }
61   catch( itk::ExceptionObject& err )
62   {
63     std::cerr << "Error caught: " << err << std::endl;
64     return( 1 );
65
66   } // yrt
67   TImage::ConstPointer input_image = input_image_reader->GetOutput( );
68   TImage::SpacingType spac = input_image->GetSpacing( );
69   double min_spac = spac[ 0 ];
70   for( unsigned int d = 1; d < Dim; d++ )
71     min_spac = ( spac[ d ] < min_spac )? spac[ d ]: min_spac;
72
73   TVTKImage::Pointer vtk_image = TVTKImage::New( );
74   vtk_image->SetInput( input_image );
75   vtk_image->Update( );
76
77   /* TODO
78      vtkSmartPointer< vtkSphereSource > seed =
79      vtkSmartPointer< vtkSphereSource >::New( );
80      seed->SetCenter( seed_pnt[ 0 ], seed_pnt[ 1 ], seed_pnt[ 2 ] );
81      seed->SetRadius( min_spac * double( 5 ) );
82      seed->Update( );
83   */
84
85   fpa::VTK::ImageMPR view;
86   view.SetBackground( 0.3, 0.2, 0.8 );
87   view.SetSize( 800, 800 );
88   view.SetImage( vtk_image->GetOutput( ) );
89   // TODO: view.AddPolyData( seed->GetOutput( ), 1, 0, 0 );
90   view.Start( );
91
92   // Configure observer
93   /* TODO
94      TObserver::Pointer obs = TObserver::New( );
95      obs->SetImage( input_image, view.GetWindow( ) );
96
97      // Configure algorithm
98      TFrontAlgorithm::Pointer algorithm = TFrontAlgorithm::New( );
99      algorithm->AddThresholds( thr_0, thr_1, n_samples );
100
101      TImage::IndexType seed_idx;
102      input_image->TransformPhysicalPointToIndex( seed_pnt, seed_idx );
103      algorithm->AddSeed( seed_idx, 0 );
104
105      algorithm->AddObserver( itk::AnyEvent( ), obs );
106      algorithm->ThrowEventsOn( );
107      algorithm->SetInput( input_image );
108      algorithm->SetNeighborhoodOrder( 1 );
109      algorithm->SetDerivativeThreshold( double( 3 ) );
110      algorithm->Update( );
111
112      view.Start( );
113   */
114   return( 0 );
115 }
116
117 // eof - $RCSfile$