]> Creatis software - FrontAlgorithms.git/blob - examples/sandbox.cxx
...
[FrontAlgorithms.git] / examples / sandbox.cxx
1 #include <itkImage.h>
2 #include <itkImageFileReader.h>
3 #include <itkImageFileWriter.h>
4 #include <itkMinimumMaximumImageCalculator.h>
5 #include <itkImageRegionConstIteratorWithIndex.h>
6
7 #include <fpa/Image/Dijkstra.h>
8 #include <fpa/Image/Functors/GaussianWeight.h>
9
10 // -------------------------------------------------------------------------
11 static const unsigned int VDim = 2;
12 typedef short                                        TPixel;
13 typedef double                                       TScalar;
14 typedef itk::Image< TPixel, VDim >                   TImage;
15 typedef itk::Image< TScalar, VDim >                  TScalarImage;
16 typedef itk::ImageFileReader< TImage >               TReader;
17 typedef itk::ImageFileWriter< TScalarImage >         TWriter;
18 typedef fpa::Image::Dijkstra< TImage, TScalarImage > TFilter;
19 typedef itk::MinimumMaximumImageCalculator< TImage > TMinMax;
20 typedef itk::ImageRegionConstIteratorWithIndex< TImage > TIterator;
21
22 typedef fpa::Image::Functors::GaussianWeight< TImage, TScalar > TVertexFunc;
23
24 // -------------------------------------------------------------------------
25 int main( int argc, char* argv[] )
26 {
27   // Get arguments
28   if( argc < 5 )
29   {
30     std::cerr
31       << "Usage: " << argv[ 0 ]
32       << " input_image input_seeds output_image beta"
33       << std::endl;
34     return( 1 );
35
36   } // fi
37   std::string input_image_filename = argv[ 1 ];
38   std::string input_seeds_filename = argv[ 2 ];
39   std::string output_image_filename = argv[ 3 ];
40   double beta = std::atof( argv[ 4 ] );
41
42   // Read seeds
43   TReader::Pointer input_seeds = TReader::New( );
44   input_seeds->SetFileName( input_seeds_filename );
45   try
46   {
47     input_seeds->Update( );
48   }
49   catch( std::exception& err )
50   {
51     std::cerr << "Error: " << err.what( ) << std::endl;
52     return( 1 );
53
54   } // yrt
55   TMinMax::Pointer minmax = TMinMax::New( );
56   minmax->SetImage( input_seeds->GetOutput( ) );
57   minmax->Compute( );
58
59   // Read image
60   TReader::Pointer input_image = TReader::New( );
61   input_image->SetFileName( input_image_filename );
62
63   // Prepare dijkstra filter
64   TFilter::Pointer filter = TFilter::New( );
65   filter->SetInput( input_image->GetOutput( ) );
66   filter->StopAtOneFrontOff( );
67
68   // Assign seeds
69   /* TODO
70      TIterator sIt(
71      input_seeds->GetOutput( ),
72      input_seeds->GetOutput( )->GetRequestedRegion( )
73      );
74      for( sIt.GoToBegin( ); !sIt.IsAtEnd( ); ++sIt )
75      if( sIt.Get( ) > minmax->GetMinimum( ) )
76      filter->AddSeed( sIt.GetIndex( ) );
77   */
78   TImage::IndexType seed;
79   /* TODO
80      seed[ 0 ] = 248;
81      seed[ 1 ] = 326;
82      seed[ 2 ] = 312;
83   */
84   seed[ 0 ] = 482;
85   seed[ 1 ] = 57;
86   filter->AddSeed( seed );
87
88   seed[ 0 ] = 306;
89   seed[ 1 ] = 439;
90   filter->AddSeed( seed );
91
92   TVertexFunc::Pointer vertex_func = TVertexFunc::New( );
93   vertex_func->SetBeta( beta );
94   filter->SetFunctor( vertex_func );
95
96   TWriter::Pointer writer = TWriter::New( );
97   writer->SetInput( filter->GetOutput( ) );
98   writer->SetFileName( output_image_filename );
99
100   try
101   {
102     writer->Update( );
103   }
104   catch( std::exception& err )
105   {
106     std::cerr << "ERROR: " << err.what( ) << std::endl;
107     return( 1 );
108
109   } // yrt
110   return( 0 );
111 }
112
113 // eof - $RCSfile$