1 #include "ImageDijkstra.h"
2 #include "MinimumSpanningTree.h"
4 #include <cpPlugins/Image.h>
5 #include <fpa_Instances/Filters.h>
6 #include <fpa/Image/Functors/RegionGrowAllBelongsFunction.h>
8 #include <fpa/Base/Algorithm.hxx>
9 #include <fpa/Base/Dijkstra.hxx>
10 #include <fpa/Image/Algorithm.hxx>
11 #include <fpa/Image/Dijkstra.hxx>
12 #include <fpa/VTK/Image2DObserver.hxx>
13 #include <fpa/VTK/Image3DObserver.hxx>
15 // -------------------------------------------------------------------------
16 fpaPlugins::ImageDijkstra::
20 this->_AddInput( "CostFunctor", false );
21 this->_AddOutput< fpaPlugins::MinimumSpanningTree >( "MST" );
22 this->m_Parameters.ConfigureAsBool( "FillNodeQueue" );
23 this->m_Parameters.SetBool( "FillNodeQueue", false );
26 // -------------------------------------------------------------------------
27 fpaPlugins::ImageDijkstra::
32 // -------------------------------------------------------------------------
33 std::string fpaPlugins::ImageDijkstra::
36 auto image = this->GetInputData( "Input" )->GetITK< itk::DataObject >( );
37 std::string cpPlugin_Image_Demangle_Pixel_AllScalars( r, _GD0, image, 2 );
38 if( r != "" ) cpPlugin_Image_Demangle_Pixel_AllScalars( r, _GD0, image, 3 );
42 // -------------------------------------------------------------------------
43 template< class _TImage >
44 std::string fpaPlugins::ImageDijkstra::
45 _GD0( _TImage* image )
47 typedef fpa::Image::Dijkstra< _TImage, _TImage > _TFilter;
48 typedef typename _TFilter::TResult _TCost;
49 typedef itk::FunctionBase< _TCost, _TCost > _TCostFunctor;
50 typedef typename _TFilter::TMinimumSpanningTree _TMST;
53 return( "fpaPlugins::ImageDijkstra: Invalid image type." );
56 this->GetInputData( "CostFunctor" )->GetITK< itk::LightObject >( );
57 _TCostFunctor* functor = NULL;
58 if( base_functor != NULL )
60 functor = dynamic_cast< _TCostFunctor* >( base_functor );
62 return( "fpaPlugins::ImageDijkstra: Given cost functor is invalid." );
67 _TFilter* filter = this->_ConfigureFilter< _TFilter >( );
68 filter->SetFillNodeQueue( this->m_Parameters.GetBool( "FillNodeQueue" ) );
69 filter->SetConversionFunction( functor );
72 this->_ExecuteFilter( filter );
74 // Connect remaining output
75 this->GetOutputData( "Output" )->SetITK( filter->GetOutput( ) );
76 this->GetOutputData( "MST" )->SetITK( filter->GetMinimumSpanningTree( ) );