]> Creatis software - FrontAlgorithms.git/blob - plugins/fpa/ImageDijkstra.cxx
44f5822e4ebbb05bbde2146a243315309e4858d6
[FrontAlgorithms.git] / plugins / fpa / ImageDijkstra.cxx
1 #include "ImageDijkstra.h"
2 #include "MinimumSpanningTree.h"
3
4 #include <cpPlugins/Image.h>
5 #include <fpa/Image/Dijkstra.h>
6 #include <fpa/Base/Dijkstra.hxx>
7 #include <fpa/Image/Dijkstra.hxx>
8 #include <fpa/Base/Algorithm.hxx>
9 #include <fpa/Image/Algorithm.hxx>
10 #include <fpa/Base/Functors/InvertCostFunction.h>
11
12 // -------------------------------------------------------------------------
13 fpaPlugins::ImageDijkstra::
14 ImageDijkstra( )
15   : Superclass( )
16 {
17   this->_AddInput( "CostFunctor", false );
18   this->_AddOutput< fpaPlugins::MinimumSpanningTree >( "MST" );
19   this->m_Parameters.ConfigureAsBool( "FillNodeQueue" );
20   this->m_Parameters.SetBool( "FillNodeQueue", false );
21 }
22
23 // -------------------------------------------------------------------------
24 fpaPlugins::ImageDijkstra::
25 ~ImageDijkstra( )
26 {
27 }
28
29 // -------------------------------------------------------------------------
30 std::string fpaPlugins::ImageDijkstra::
31 _GenerateData( )
32 {
33   auto image = this->GetInputData( "Input" )->GetITK< itk::DataObject >( );
34   std::string   cpPlugin_Image_Demangle_Pixel_AllScalars( r, _GD0, image, 2 );
35   if( r != "" ) cpPlugin_Image_Demangle_Pixel_AllScalars( r, _GD0, image, 3 );
36   return( r );
37 }
38
39 // -------------------------------------------------------------------------
40 template< class _TImage >
41 std::string fpaPlugins::ImageDijkstra::
42 _GD0( _TImage* image )
43 {
44   typedef fpa::Image::Dijkstra< _TImage, _TImage > _TFilter;
45   typedef typename _TFilter::TResult               _TCost;
46   typedef itk::FunctionBase< _TCost, _TCost >      _TCostFunctor;
47   typedef typename _TFilter::TMinimumSpanningTree  _TMST;
48
49   if( image == NULL )
50     return( "fpaPlugins::ImageDijkstra: Invalid image type." );
51
52   auto base_functor =
53     this->GetInputData( "CostFunctor" )->GetITK< itk::LightObject >( );
54   _TCostFunctor* functor = NULL;
55   if( base_functor != NULL )
56   {
57     functor = dynamic_cast< _TCostFunctor* >( base_functor );
58     if( functor == NULL )
59       return( "fpaPlugins::ImageDijkstra: Given cost functor is invalid." );
60
61   } // fi
62   
63   // Create filter
64   _TFilter* filter = this->_ConfigureFilter< _TFilter >( );
65   filter->SetFillNodeQueue( this->m_Parameters.GetBool( "FillNodeQueue" ) );
66   filter->SetConversionFunction( functor );
67
68   // Go!!!
69   this->_ExecuteFilter( filter );
70
71   // Connect remaining output
72   this->GetOutputData( "Output" )->SetITK( filter->GetOutput( ) );
73   this->GetOutputData( "MST" )->SetITK( filter->GetMinimumSpanningTree( ) );
74   return( "" );
75 }
76
77 // eof - $RCSfile$