#include #include #include #include #include #include #include // ------------------------------------------------------------------------- static const unsigned int VDim = 2; typedef short TPixel; typedef double TScalar; typedef itk::Image< TPixel, VDim > TImage; typedef itk::Image< TScalar, VDim > TScalarImage; typedef itk::ImageFileReader< TImage > TReader; typedef itk::ImageFileWriter< TScalarImage > TWriter; typedef fpa::Image::Dijkstra< TImage, TScalarImage > TFilter; typedef itk::MinimumMaximumImageCalculator< TImage > TMinMax; typedef itk::ImageRegionConstIteratorWithIndex< TImage > TIterator; typedef fpa::Image::Functors::GaussianWeight< TImage, TScalar > TVertexFunc; // ------------------------------------------------------------------------- int main( int argc, char* argv[] ) { // Get arguments if( argc < 5 ) { std::cerr << "Usage: " << argv[ 0 ] << " input_image input_seeds output_image beta" << std::endl; return( 1 ); } // fi std::string input_image_filename = argv[ 1 ]; std::string input_seeds_filename = argv[ 2 ]; std::string output_image_filename = argv[ 3 ]; double beta = std::atof( argv[ 4 ] ); // Read seeds TReader::Pointer input_seeds = TReader::New( ); input_seeds->SetFileName( input_seeds_filename ); try { input_seeds->Update( ); } catch( std::exception& err ) { std::cerr << "Error: " << err.what( ) << std::endl; return( 1 ); } // yrt TMinMax::Pointer minmax = TMinMax::New( ); minmax->SetImage( input_seeds->GetOutput( ) ); minmax->Compute( ); // Read image TReader::Pointer input_image = TReader::New( ); input_image->SetFileName( input_image_filename ); // Prepare dijkstra filter TFilter::Pointer filter = TFilter::New( ); filter->SetInput( input_image->GetOutput( ) ); filter->StopAtOneFrontOff( ); // Assign seeds /* TODO TIterator sIt( input_seeds->GetOutput( ), input_seeds->GetOutput( )->GetRequestedRegion( ) ); for( sIt.GoToBegin( ); !sIt.IsAtEnd( ); ++sIt ) if( sIt.Get( ) > minmax->GetMinimum( ) ) filter->AddSeed( sIt.GetIndex( ) ); */ TImage::IndexType seed; /* TODO seed[ 0 ] = 248; seed[ 1 ] = 326; seed[ 2 ] = 312; */ seed[ 0 ] = 482; seed[ 1 ] = 57; filter->AddSeed( seed ); seed[ 0 ] = 306; seed[ 1 ] = 439; filter->AddSeed( seed ); TVertexFunc::Pointer vertex_func = TVertexFunc::New( ); vertex_func->SetBeta( beta ); filter->SetFunctor( vertex_func ); TWriter::Pointer writer = TWriter::New( ); writer->SetInput( filter->GetOutput( ) ); writer->SetFileName( output_image_filename ); try { writer->Update( ); } catch( std::exception& err ) { std::cerr << "ERROR: " << err.what( ) << std::endl; return( 1 ); } // yrt return( 0 ); } // eof - $RCSfile$