+++ /dev/null
-#include <iostream>
-#include <limits>
-#include <string>
-
-#include <itkImage.h>
-#include <itkImageFileReader.h>
-#include <itkImageToVTKImageFilter.h>
-
-#include <vtkImageActor.h>
-#include <vtkInteractorStyleImage.h>
-#include <vtkPointHandleRepresentation3D.h>
-#include <vtkProperty.h>
-#include <vtkRenderer.h>
-#include <vtkRenderWindow.h>
-#include <vtkRenderWindowInteractor.h>
-#include <vtkSeedRepresentation.h>
-#include <vtkSeedWidget.h>
-#include <vtkSmartPointer.h>
-
-#include <fpa/Image/FastMarching.h>
-#include <fpa/VTK/Image2DObserver.h>
-
-// -------------------------------------------------------------------------
-const unsigned int Dim = 2;
-typedef unsigned char TPixel;
-typedef double TScalar;
-typedef itk::Image< TPixel, Dim > TImage;
-typedef itk::ImageToVTKImageFilter< TImage > TVTKImage;
-
-typedef itk::ImageFileReader< TImage > TImageReader;
-typedef fpa::Image::FastMarching< TImage, TScalar > TFrontAlgorithm;
-
-typedef
-fpa::VTK::Image2DObserver< TFrontAlgorithm, vtkRenderWindow >
-TObserver;
-
-// -------------------------------------------------------------------------
-int main( int argc, char* argv[] )
-{
- if( argc < 2 )
- {
- std::cerr
- << "Usage: " << argv[ 0 ]
- << " input_image [stop_at_one_front]" << std::endl;
- return( 1 );
-
- } // fi
- std::string input_image_fn = argv[ 1 ];
- bool stop_at_one_front = false;
- if( 2 < argc )
- stop_at_one_front = ( std::atoi( argv[ 2 ] ) == 1 );
-
- // Read image
- TImageReader::Pointer input_image_reader = TImageReader::New( );
- input_image_reader->SetFileName( input_image_fn );
- try
- {
- input_image_reader->Update( );
- }
- catch( itk::ExceptionObject& err )
- {
- std::cerr << "Error caught: " << err << std::endl;
- return( 1 );
-
- } // yrt
- TImage::ConstPointer input_image = input_image_reader->GetOutput( );
-
- TVTKImage::Pointer vtk_image = TVTKImage::New( );
- vtk_image->SetInput( input_image );
- vtk_image->Update( );
-
- // VTK visualization
- vtkSmartPointer< vtkImageActor > actor =
- vtkSmartPointer< vtkImageActor >::New( );
- actor->SetInputData( vtk_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 );
-
- // VTK interaction
- vtkSmartPointer< vtkInteractorStyleImage > imageStyle =
- vtkSmartPointer< vtkInteractorStyleImage >::New( );
- vtkSmartPointer< vtkRenderWindowInteractor > interactor =
- vtkSmartPointer< vtkRenderWindowInteractor >::New( );
- interactor->SetInteractorStyle( imageStyle );
- window->SetInteractor( interactor );
- window->Render( );
-
- // 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( );
- window->Render( );
- widget->On( );
- interactor->Start( );
-
- // Configure observer
- TObserver::Pointer obs = TObserver::New( );
- obs->SetImage( input_image, window );
-
- // Configure algorithm
- TFrontAlgorithm::Pointer algorithm = TFrontAlgorithm::New( );
- for( unsigned int s = 0; s < rep->GetNumberOfSeeds( ); s++ )
- {
- double pos[ 3 ];
- rep->GetSeedWorldPosition( s, pos );
-
- TImage::PointType pnt;
- pnt[ 0 ] = pos[ 0 ];
- pnt[ 1 ] = pos[ 1 ];
-
- TImage::IndexType idx;
- if( input_image->TransformPhysicalPointToIndex( pnt, idx ) )
- {
- algorithm->AddSeed( idx, 0 );
- std::cout << " Seed --> " << idx << std::endl;
-
- } // fi
-
- } // rof
- algorithm->AddObserver( itk::AnyEvent( ), obs );
- algorithm->ThrowEventsOn( );
- algorithm->SetInput( input_image );
- algorithm->SetNeighborhoodOrder( 1 );
- algorithm->SetStopAtOneFront( stop_at_one_front );
- algorithm->Update( );
-
- // One last interaction
- window->Render( );
- interactor->Start( );
-
- return( 0 );
-}
-
-// eof - $RCSfile$