]> Creatis software - FrontAlgorithms.git/blob - lib/fpaPlugins/ImageDijkstra.cxx
46ff8d3dfee1a7827055001568e120041c4d4d40
[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 = this->GetInputData( "Input" );
28   itk::DataObject* image = NULL;
29   std::string r = "";
30   cpPlugins_Image_Demangle_AllScalarTypes( 2, input, image, r, _GD0 );
31   else cpPlugins_Image_Demangle_AllScalarTypes( 3, input, image, r, _GD0 );
32   else r = "fpaPlugins::ImageDijkstra: Input image type not supported.";
33   return( r );
34 }
35
36 // -------------------------------------------------------------------------
37 template< class I >
38 std::string fpaPlugins::ImageDijkstra::
39 _GD0( itk::DataObject* data )
40 {
41   typedef typename I::PixelType                             _TOutPixel;
42   typedef itk::Image< _TOutPixel, I::ImageDimension >       _TOut;
43   typedef fpa::Image::Dijkstra< I, _TOut >                  _TFilter;
44   typedef typename _TFilter::TResult                        _TCost;
45   typedef fpa::Base::Functors::InvertCostFunction< _TCost > _TCostFunctor;
46   typedef typename _TFilter::TMinimumSpanningTree           _TMST;
47
48   // Create filter
49   _TFilter* filter = this->_ConfigureFilter< _TFilter >( );
50
51   // Connect cost functor
52   typename _TCostFunctor::Pointer functor = _TCostFunctor::New( );
53   filter->SetConversionFunction( functor );
54
55   // Go!!!
56   this->_ExecuteFilter( filter );
57
58   // Connect remaining output
59   auto mst = this->GetOutputData( "MinimumSpanningTree" );
60   mst->SetITK( filter->GetMinimumSpanningTree( ) );
61   return( "" );
62 }
63
64 // eof - $RCSfile$