]> Creatis software - FrontAlgorithms.git/blob - lib/fpaPlugins/ImageDijkstra.cxx
...
[FrontAlgorithms.git] / lib / fpaPlugins / ImageDijkstra.cxx
1 #include "ImageDijkstra.h"
2
3 #include <cpPlugins/Interface/Image.h>
4 #include <fpaPlugins/MinimumSpanningTree.h>
5
6 #include <fpa/Image/Dijkstra.h>
7 #include <fpa/Base/Functors/InvertCostFunction.h>
8
9 // -------------------------------------------------------------------------
10 fpaPlugins::ImageDijkstra::
11 ImageDijkstra( )
12   : Superclass( )
13 {
14   this->_AddOutput< fpaPlugins::MinimumSpanningTree >( "MinimumSpanningTree" );
15 }
16
17 // -------------------------------------------------------------------------
18 fpaPlugins::ImageDijkstra::
19 ~ImageDijkstra( )
20 {
21 }
22
23 // -------------------------------------------------------------------------
24 std::string fpaPlugins::ImageDijkstra::
25 _GenerateData( )
26 {
27   auto input =
28     this->GetInputData< cpPlugins::Interface::Image >( "Input" );
29   itk::DataObject* image = NULL;
30   std::string r = "";
31   cpPlugins_Image_Demangle_AllScalarTypes( 2, input, image, r, _GD0 );
32   else cpPlugins_Image_Demangle_AllScalarTypes( 3, input, image, r, _GD0 );
33   else r = "fpaPlugins::ImageDijkstra: Input image type not supported.";
34   return( r );
35 }
36
37 // -------------------------------------------------------------------------
38 template< class I >
39 std::string fpaPlugins::ImageDijkstra::
40 _GD0( itk::DataObject* data )
41 {
42   typedef typename I::PixelType                             _TOutPixel;
43   typedef itk::Image< _TOutPixel, I::ImageDimension >       _TOut;
44   typedef fpa::Image::Dijkstra< I, _TOut >                  _TFilter;
45   typedef typename _TFilter::TResult                        _TCost;
46   typedef fpa::Base::Functors::InvertCostFunction< _TCost > _TCostFunctor;
47   typedef typename _TFilter::TMinimumSpanningTree           _TMST;
48
49   // Create filter
50   _TFilter* filter = this->_ConfigureFilter< _TFilter >( );
51
52   // Connect cost functor
53   typename _TCostFunctor::Pointer functor = _TCostFunctor::New( );
54   filter->SetConversionFunction( functor );
55
56   // Go!!!
57   this->_ExecuteFilter( filter );
58
59   // Connect remaining output
60   auto mst =
61     this->GetOutputData< fpaPlugins::MinimumSpanningTree >( "MinimumSpanningTree" );
62   mst->SetITK( filter->GetMinimumSpanningTree( ) );
63   return( "" );
64 }
65
66 // eof - $RCSfile$