#include "ImageDijkstra.h" #include #include #include // ------------------------------------------------------------------------- fpaPlugins::ImageDijkstra:: ImageDijkstra( ) : Superclass( ) { this->_AddInput( "Input" ); this->_AddInput( "Seeds" ); this->_MakeOutput< cpPlugins::Interface::Image >( "Output" ); this->m_Parameters->ConfigureAsBool( "VisualDebug" ); this->m_Parameters->ConfigureAsBool( "StopAtOneFront" ); /* this->m_Parameters->ConfigureAsReal( "InsideValue" ); this->m_Parameters->ConfigureAsReal( "OutsideValue" ); // TODO: this->m_Parameters->ConfigureAsPointList( "Seeds" ); */ this->m_Parameters->SetBool( "VisualDebug", false ); this->m_Parameters->SetBool( "StopAtOneFront", false ); /* this->m_Parameters->SetReal( "InsideValue", 1 ); this->m_Parameters->SetReal( "OutsideValue", 0 ); */ std::vector< std::string > orders; orders.push_back( "1" ); orders.push_back( "2" ); this->m_Parameters->ConfigureAsChoices( "NeighborhoodOrder", orders ); this->m_Parameters->SetSelectedChoice( "NeighborhoodOrder", "1" ); } // ------------------------------------------------------------------------- fpaPlugins::ImageDijkstra:: ~ImageDijkstra( ) { } // ------------------------------------------------------------------------- std::string fpaPlugins::ImageDijkstra:: _GenerateData( ) { cpPlugins::Interface::Image* input = this->GetInput< cpPlugins::Interface::Image >( "Input" ); if( input == NULL ) return( "fpaPlugins::ImageDijkstra: No input image." ); itk::DataObject* image = NULL; std::string r = ""; cpPlugins_Image_Demangle_AllScalarTypes( 2, input, image, r, _GD0 ); else cpPlugins_Image_Demangle_AllScalarTypes( 3, input, image, r, _GD0 ); else r = "fpaPlugins::ImageDijkstra: Input image type not supported."; return( r ); } // ------------------------------------------------------------------------- template< class I > std::string fpaPlugins::ImageDijkstra:: _GD0( itk::DataObject* data ) { /* TODO typedef unsigned char _TOutPixel; typedef itk::Image< _TOutPixel, I::ImageDimension > _TOut; typedef fpa::Image::Dijkstra< I, _TOut > _TFilter; typedef typename _TFilter::TGrowingFunction _TFunctor; typedef typename I::PointType _TPoint; cpPlugins::Interface::PointList* seeds = this->GetInput< cpPlugins::Interface::PointList >( "Seeds" ); if( seeds == NULL ) return( "fpaPlugins::ImageDijkstra: No given seeds." ); I* image = dynamic_cast< I* >( data ); // Create filter and connect input _TFilter* filter = this->_CreateITK< _TFilter >( ); filter->SetInput( image ); // Connect grow functor (or create a tautology) typename _TFunctor::Pointer functor; cpPlugins::Interface::DataObject* functor_wrapper = this->GetInput< cpPlugins::Interface::DataObject >( "GrowFunction" ); if( functor_wrapper != NULL ) functor = functor_wrapper->GetITK< _TFunctor >( ); if( functor.IsNull( ) ) functor = fpa::Image::Functors::DijkstraAllBelongsFunction< I >::New( ); filter->SetGrowingFunction( functor ); // Set numeric parameters Superclass::TParameters* params = this->m_Parameters; std::string order = params->GetSelectedChoice( "NeighborhoodOrder" ); filter->SetNeighborhoodOrder( order[ 0 ] - '0' ); filter->SetStopAtOneFront( params->GetBool( "StopAtOneFront" ) ); filter->SetInsideValue( _TOutPixel( params->GetReal( "InsideValue" ) ) ); filter->SetOutsideValue( _TOutPixel( params->GetReal( "OutsideValue" ) ) ); // Assign seeds for( unsigned int s = 0; s < seeds->GetNumberOfPoints( ); ++s ) { _TPoint pnt = seeds->GetPoint< _TPoint >( s ); typename I::IndexType idx; if( image->TransformPhysicalPointToIndex( pnt, idx ) ) filter->AddSeed( idx, 0 ); } // rof // Connect visual debugger // TODO: this->m_Parameters->ConfigureAsBool( "VisualDebug", false ); // Go!!! filter->Update( ); // Connect output cpPlugins::Interface::Image* out = this->GetOutput< cpPlugins::Interface::Image >( "Output" ); if( out != NULL ) { out->SetITK< _TOut >( filter->GetOutput( ) ); return( "" ); } else return( "fpaPlugins::ImageDijkstra: output not correctly created." ); */ return( "" ); } // eof - $RCSfile$