#include "ImageDijkstra.h" #include "MinimumSpanningTree.h" #include #include #include #include #include #include #include // ------------------------------------------------------------------------- fpaPlugins::ImageDijkstra:: ImageDijkstra( ) : Superclass( ) { this->_AddInput( "CostFunctor", false ); this->_AddOutput< fpaPlugins::MinimumSpanningTree >( "MST" ); this->m_Parameters.ConfigureAsBool( "FillNodeQueue" ); this->m_Parameters.SetBool( "FillNodeQueue", false ); } // ------------------------------------------------------------------------- fpaPlugins::ImageDijkstra:: ~ImageDijkstra( ) { } // ------------------------------------------------------------------------- std::string fpaPlugins::ImageDijkstra:: _GenerateData( ) { auto image = this->GetInputData( "Input" )->GetITK< itk::DataObject >( ); std::string cpPlugin_Image_Demangle_Pixel_AllScalars( r, _GD0, image, 2 ); if( r != "" ) cpPlugin_Image_Demangle_Pixel_AllScalars( r, _GD0, image, 3 ); return( r ); } // ------------------------------------------------------------------------- template< class _TImage > std::string fpaPlugins::ImageDijkstra:: _GD0( _TImage* image ) { typedef fpa::Image::Dijkstra< _TImage, _TImage > _TFilter; typedef typename _TFilter::TResult _TCost; typedef itk::FunctionBase< _TCost, _TCost > _TCostFunctor; typedef typename _TFilter::TMinimumSpanningTree _TMST; if( image == NULL ) return( "fpaPlugins::ImageDijkstra: Invalid image type." ); auto base_functor = this->GetInputData( "CostFunctor" )->GetITK< itk::LightObject >( ); _TCostFunctor* functor = NULL; if( base_functor != NULL ) { functor = dynamic_cast< _TCostFunctor* >( base_functor ); if( functor == NULL ) return( "fpaPlugins::ImageDijkstra: Given cost functor is invalid." ); } // fi // Create filter _TFilter* filter = this->_ConfigureFilter< _TFilter >( ); filter->SetFillNodeQueue( this->m_Parameters.GetBool( "FillNodeQueue" ) ); filter->SetConversionFunction( functor ); // Go!!! this->_ExecuteFilter( filter ); // Connect remaining output this->GetOutputData( "Output" )->SetITK( filter->GetOutput( ) ); this->GetOutputData( "MST" )->SetITK( filter->GetMinimumSpanningTree( ) ); return( "" ); } // eof - $RCSfile$