X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;ds=sidebyside;f=appli%2Fexamples%2Fexample_Image_Dijkstra_DanielssonCost_TwoSeedsPath.cxx;fp=appli%2Fexamples%2Fexample_Image_Dijkstra_DanielssonCost_TwoSeedsPath.cxx;h=0000000000000000000000000000000000000000;hb=9c4035dc18f4e44a92cda3e3c1c6e583c94ef06b;hp=8a5eab04980771a00b7cd04f8c5dc901d7508b2c;hpb=e832f438861464a8d521464b61be7e31c896adb8;p=FrontAlgorithms.git diff --git a/appli/examples/example_Image_Dijkstra_DanielssonCost_TwoSeedsPath.cxx b/appli/examples/example_Image_Dijkstra_DanielssonCost_TwoSeedsPath.cxx deleted file mode 100644 index 8a5eab0..0000000 --- a/appli/examples/example_Image_Dijkstra_DanielssonCost_TwoSeedsPath.cxx +++ /dev/null @@ -1,253 +0,0 @@ -#include -#include -#include -#include - -#include -#include -#include - -#include -#include -#include -#include -#include - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include -#include -#include - -// ------------------------------------------------------------------------- -const unsigned int Dim = 2; -typedef unsigned char TInputPixel; -typedef float TOutputPixel; - -typedef itk::Image< TInputPixel, Dim > TInputImage; -typedef itk::Image< TOutputPixel, Dim > TOutputImage; -typedef itk::ImageToVTKImageFilter< TInputImage > TVTKInputImage; - -// ------------------------------------------------------------------------- -int main( int argc, char* argv[] ) -{ - if( argc < 5 ) - { - std::cerr - << "Usage: " << argv[ 0 ] - << " input_image output_image neighborhood_order stop_at_one_front" - << std::endl; - return( 1 ); - - } // fi - std::string input_image_fn = argv[ 1 ]; - std::string output_image_fn = argv[ 2 ]; - unsigned int neighborhood_order = std::atoi( argv[ 3 ] ); - bool stop_at_one_front = ( std::atoi( argv[ 4 ] ) != 0 ); - - // Read image - itk::ImageFileReader< TInputImage >::Pointer input_image_reader = - itk::ImageFileReader< TInputImage >::New( ); - input_image_reader->SetFileName( input_image_fn ); - try - { - input_image_reader->Update( ); - } - catch( itk::ExceptionObject& err ) - { - std::cerr - << "Error while reading image from " << input_image_fn << ": " - << err << std::endl; - return( 1 ); - - } // yrt - TInputImage::ConstPointer input_image = input_image_reader->GetOutput( ); - TVTKInputImage::Pointer vtk_input_image = TVTKInputImage::New( ); - vtk_input_image->SetInput( input_image ); - vtk_input_image->Update( ); - - // VTK visualization - vtkSmartPointer< vtkImageActor > actor = - vtkSmartPointer< vtkImageActor >::New( ); - actor->SetInputData( vtk_input_image->GetOutput( ) ); - - vtkSmartPointer< vtkRenderer > renderer = - vtkSmartPointer< vtkRenderer >::New( ); - renderer->SetBackground( 0.1, 0.2, 0.7 ); - renderer->AddActor( actor ); - vtkSmartPointer< vtkRenderWindow > window = - vtkSmartPointer< vtkRenderWindow >::New( ); - window->SetSize( 800, 800 ); - window->AddRenderer( renderer ); - - // Correct camera due to the loaded image - vtkCamera* camera = renderer->GetActiveCamera( ); - camera->SetViewUp( 0, -1, 0 ); - camera->SetPosition( 0, 0, -1 ); - camera->SetFocalPoint( 0, 0, 0 ); - - // VTK interaction - vtkSmartPointer< vtkInteractorStyleImage > imageStyle = - vtkSmartPointer< vtkInteractorStyleImage >::New( ); - vtkSmartPointer< vtkRenderWindowInteractor > interactor = - vtkSmartPointer< vtkRenderWindowInteractor >::New( ); - interactor->SetInteractorStyle( imageStyle ); - window->SetInteractor( interactor ); - - // Create the widget and its representation - vtkSmartPointer< vtkPointHandleRepresentation3D > handle = - vtkSmartPointer< vtkPointHandleRepresentation3D >::New( ); - handle->GetProperty( )->SetColor( 1, 0, 0 ); - vtkSmartPointer< vtkSeedRepresentation > rep = - vtkSmartPointer< vtkSeedRepresentation >::New( ); - rep->SetHandleRepresentation( handle ); - - vtkSmartPointer< vtkSeedWidget > widget = - vtkSmartPointer< vtkSeedWidget >::New( ); - widget->SetInteractor( interactor ); - widget->SetRepresentation( rep ); - - // Let some interaction - interactor->Initialize( ); - renderer->ResetCamera( ); - window->Render( ); - widget->On( ); - interactor->Start( ); - - // Invert input image - itk::MinimumMaximumImageCalculator< TInputImage >::Pointer minmax = - itk::MinimumMaximumImageCalculator< TInputImage >::New( ); - minmax->SetImage( input_image ); - minmax->Compute( ); - - itk::InvertIntensityImageFilter< TInputImage >::Pointer invert = - itk::InvertIntensityImageFilter< TInputImage >::New( ); - invert->SetInput( input_image ); - invert->SetMaximum( minmax->GetMaximum( ) ); - - itk::DanielssonDistanceMapImageFilter< TInputImage, TOutputImage >::Pointer dmap = - itk::DanielssonDistanceMapImageFilter< TInputImage, TOutputImage >::New( ); - dmap->SetInput( invert->GetOutput( ) ); - dmap->InputIsBinaryOn( ); - dmap->SquaredDistanceOn( ); - dmap->UseImageSpacingOn( ); - dmap->Update( ); - - typedef fpa::Base::Functors::InvertCostFunction< TOutputPixel > TFunction; - TFunction::Pointer function = TFunction::New( ); - - // Prepare region grow filter - typedef fpa::Image::Dijkstra< TOutputImage, TOutputImage > TFilter; - TFilter::Pointer filter = TFilter::New( ); - filter->SetInput( dmap->GetOutput( ) ); - filter->SetConversionFunction( function ); - filter->SetNeighborhoodOrder( neighborhood_order ); - filter->SetStopAtOneFront( stop_at_one_front ); - - // Get user-given seeds - for( unsigned int s = 0; s < rep->GetNumberOfSeeds( ); s++ ) - { - double pos[ 3 ]; - rep->GetSeedWorldPosition( s, pos ); - - TInputImage::PointType pnt; - pnt[ 0 ] = TInputImage::PointType::ValueType( pos[ 0 ] ); - pnt[ 1 ] = TInputImage::PointType::ValueType( pos[ 1 ] ); - - TInputImage::IndexType idx; - if( input_image->TransformPhysicalPointToIndex( pnt, idx ) ) - filter->AddSeed( idx, 0 ); - - } // rof - - // Prepare graphical debugger - typedef fpa::VTK::Image2DObserver< TFilter, vtkRenderWindow > TDebugger; - TDebugger::Pointer debugger = TDebugger::New( ); - debugger->SetRenderWindow( window ); - debugger->SetRenderPercentage( 0.001 ); - filter->AddObserver( itk::AnyEvent( ), debugger ); - filter->ThrowEventsOn( ); - - // Go! - filter->Update( ); - - // Save final total cost map - itk::ImageFileWriter< TOutputImage >::Pointer output_image_writer = - itk::ImageFileWriter< TOutputImage >::New( ); - output_image_writer->SetFileName( output_image_fn ); - output_image_writer->SetInput( filter->GetOutput( ) ); - try - { - output_image_writer->Update( ); - } - catch( itk::ExceptionObject& err ) - { - std::cerr - << "Error while writing image to " << output_image_fn << ": " - << err << std::endl; - return( 1 ); - - } // yrt - - // Draw the path between the two seeds - if( filter->GetNumberOfSeeds( ) > 1 ) - { - TInputImage::IndexType a = filter->GetSeed( 0 ); - TInputImage::IndexType b = - filter->GetSeed( filter->GetNumberOfSeeds( ) - 1 ); - - std::vector< TInputImage::IndexType > path; - filter->GetMinimumSpanningTree( )->GetPath( path, a, b ); - - typedef itk::Image< itk::RGBAPixel< unsigned char >, Dim > TColorImage; - TColorImage::Pointer path_image = TColorImage::New( ); - path_image->SetLargestPossibleRegion( - input_image->GetLargestPossibleRegion( ) - ); - path_image->SetRequestedRegion( input_image->GetRequestedRegion( ) ); - path_image->SetBufferedRegion( input_image->GetBufferedRegion( ) ); - path_image->SetSpacing( input_image->GetSpacing( ) ); - path_image->SetOrigin( input_image->GetOrigin( ) ); - path_image->SetDirection( input_image->GetDirection( ) ); - path_image->Allocate( ); - - unsigned char background[ 4 ] = { 0, 0, 0, 0 }; - unsigned char color[ 4 ] = { 255, 0, 0, 255 }; - path_image->FillBuffer( itk::RGBAPixel< unsigned char >( background ) ); - - for( unsigned int pId = 0; pId < path.size( ); ++pId ) - path_image->SetPixel( - path[ pId ], itk::RGBAPixel< unsigned char >( color ) - ); - - itk::ImageToVTKImageFilter< TColorImage >::Pointer vtk_path_image = - itk::ImageToVTKImageFilter< TColorImage >::New( ); - vtk_path_image->SetInput( path_image ); - vtk_path_image->Update( ); - - vtkSmartPointer< vtkImageActor > path_image_actor = - vtkSmartPointer< vtkImageActor >::New( ); - path_image_actor->SetInputData( vtk_path_image->GetOutput( ) ); - renderer->AddActor( path_image_actor ); - - // More interaction - window->Render( ); - widget->Off( ); - interactor->Start( ); - - } // fi - - return( 0 ); -} - -// eof - $RCSfile$