#include "ImageDijkstra.h" #include "MinimumSpanningTree.h" #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( ) { } // ------------------------------------------------------------------------- void fpaPlugins::ImageDijkstra:: _GenerateData( ) { auto image = this->GetInputData< itk::DataObject >( "Input" ); cpPlugins_Image_Demangle_Pixel_AllScalars ( _GD0, image, 2 ); else cpPlugins_Image_Demangle_Pixel_AllScalars( _GD0, image, 3 ); else this->_Error( "No valid input image." ); } // ------------------------------------------------------------------------- template< class _TImage > void fpaPlugins::ImageDijkstra:: _GD0( _TImage* image ) { typedef float _TPixel; typedef itk::Image< _TPixel, _TImage::ImageDimension > _TOutImage; typedef fpa::Image::Dijkstra< _TImage, _TOutImage > _TFilter; typedef typename _TFilter::TResult _TCost; typedef itk::FunctionBase< _TCost, _TCost > _TCostFunctor; typedef typename _TFilter::TMinimumSpanningTree _TMST; auto base_functor = this->GetInputData< itk::LightObject >( "CostFunctor" ); _TCostFunctor* functor = NULL; if( base_functor != NULL ) { functor = dynamic_cast< _TCostFunctor* >( base_functor ); if( functor == NULL ) this->_Error( "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->GetOutput( "MST" )->SetITK( filter->GetMinimumSpanningTree( ) ); } // eof - $RCSfile$