2 #include <itkImageFileReader.h>
3 #include <itkImageFileWriter.h>
4 #include <itkMinimumMaximumImageCalculator.h>
5 #include <itkImageRegionConstIteratorWithIndex.h>
7 #include <fpa/Image/Dijkstra.h>
8 #include <fpa/Image/Functors/GaussianWeight.h>
10 // -------------------------------------------------------------------------
11 static const unsigned int VDim = 2;
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;
22 typedef fpa::Image::Functors::GaussianWeight< TImage, TScalar > TVertexFunc;
24 // -------------------------------------------------------------------------
25 int main( int argc, char* argv[] )
31 << "Usage: " << argv[ 0 ]
32 << " input_image input_seeds output_image beta"
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 ] );
43 TReader::Pointer input_seeds = TReader::New( );
44 input_seeds->SetFileName( input_seeds_filename );
47 input_seeds->Update( );
49 catch( std::exception& err )
51 std::cerr << "Error: " << err.what( ) << std::endl;
55 TMinMax::Pointer minmax = TMinMax::New( );
56 minmax->SetImage( input_seeds->GetOutput( ) );
60 TReader::Pointer input_image = TReader::New( );
61 input_image->SetFileName( input_image_filename );
63 // Prepare dijkstra filter
64 TFilter::Pointer filter = TFilter::New( );
65 filter->SetInput( input_image->GetOutput( ) );
66 filter->StopAtOneFrontOff( );
71 input_seeds->GetOutput( ),
72 input_seeds->GetOutput( )->GetRequestedRegion( )
74 for( sIt.GoToBegin( ); !sIt.IsAtEnd( ); ++sIt )
75 if( sIt.Get( ) > minmax->GetMinimum( ) )
76 filter->AddSeed( sIt.GetIndex( ) );
78 TImage::IndexType seed;
86 filter->AddSeed( seed );
90 filter->AddSeed( seed );
92 TVertexFunc::Pointer vertex_func = TVertexFunc::New( );
93 vertex_func->SetBeta( beta );
94 filter->SetFunctor( vertex_func );
96 TWriter::Pointer writer = TWriter::New( );
97 writer->SetInput( filter->GetOutput( ) );
98 writer->SetFileName( output_image_filename );
104 catch( std::exception& err )
106 std::cerr << "ERROR: " << err.what( ) << std::endl;