]> Creatis software - FrontAlgorithms.git/blob - plugins/fpa/ExtractEndPointsAndBifurcationsFromMinimumSpanningTree.cxx
793493b6f69847b2d821530744b4f36ff65bebc1
[FrontAlgorithms.git] / plugins / fpa / ExtractEndPointsAndBifurcationsFromMinimumSpanningTree.cxx
1 #include "ExtractEndPointsAndBifurcationsFromMinimumSpanningTree.h"
2
3 #include <fpa_Instances/Backtracking.h>
4 #include <cpPlugins/Image.h>
5 #include <cpPlugins/ImageIndexesContainer.h>
6
7 // -------------------------------------------------------------------------
8 fpaPlugins::ExtractEndPointsAndBifurcationsFromMinimumSpanningTree::
9 ExtractEndPointsAndBifurcationsFromMinimumSpanningTree( )
10   : Superclass( )
11 {
12   this->_AddInput( "CostsImage" );
13   this->_AddInput( "DistanceMap" );
14   this->_AddInput( "MST" );
15   this->_AddOutput< cpPlugins::ImageIndexesContainer >( "EndPoints" );
16   this->_AddOutput< cpPlugins::ImageIndexesContainer >( "Bifurcations" );
17   this->_AddOutput< cpPlugins::ImageIndexesContainer >( "Collisions" );
18
19   this->m_Parameters.ConfigureAsBool( "SquaredDistanceMap" );
20   this->m_Parameters.SetBool( "SquaredDistanceMap", false );
21 }
22
23 // -------------------------------------------------------------------------
24 fpaPlugins::ExtractEndPointsAndBifurcationsFromMinimumSpanningTree::
25 ~ExtractEndPointsAndBifurcationsFromMinimumSpanningTree( )
26 {
27 }
28
29 // -------------------------------------------------------------------------
30 std::string fpaPlugins::ExtractEndPointsAndBifurcationsFromMinimumSpanningTree::
31 _GenerateData( )
32 {
33   auto image = this->GetInputData( "CostsImage" )->GetITK< itk::DataObject >( );
34   std::string   r = cpPlugin_Image_Demangle_Pixel_Dim( _GD0, image, float, 2 );
35   if( r != "" ) r = cpPlugin_Image_Demangle_Pixel_Dim( _GD0, image, double, 2 );
36   if( r != "" ) r = cpPlugin_Image_Demangle_Pixel_Dim( _GD0, image, float, 3 );
37   if( r != "" ) r = cpPlugin_Image_Demangle_Pixel_Dim( _GD0, image, double, 3 );
38   return( r );
39 }
40
41 // -------------------------------------------------------------------------
42 template< class _TImage >
43 std::string fpaPlugins::ExtractEndPointsAndBifurcationsFromMinimumSpanningTree::
44 _GD0( _TImage* image )
45 {
46   typedef fpa::Image::MinimumSpanningTree< _TImage::ImageDimension > _TMST;
47   typedef fpa::Image::ExtractEndPointsAndBifurcationsFromMinimumSpanningTree< _TImage, _TMST > _TFilter;
48
49   // Check input objects' integrity
50   if( image == NULL )
51     return(
52       "fpaPlugins::ExtractEndPointsAndBifurcationsFromMinimumSpanningTree: No valid input costs image."
53       );
54   auto dmap = this->GetInputData( "DistanceMap" )->GetITK< _TImage >( );
55   if( dmap == NULL )
56     return(
57       "fpaPlugins::ExtractEndPointsAndBifurcationsFromMinimumSpanningTree: Distance map does not have the same type as the costs image."
58       );
59   auto mst = this->GetInputData( "MST" )->GetITK< _TMST >( );
60   if( mst == NULL )
61     return(
62       "fpaPlugins::ExtractEndPointsAndBifurcationsFromMinimumSpanningTree: No valid input tree."
63       );
64
65   // Create filter and connect inputs
66   _TFilter* filter = this->_CreateITK< _TFilter >( );
67   filter->SetCostsImage( image );
68   filter->SetDistanceMap( dmap );
69   filter->SetMinimumSpanningTree( mst );
70   filter->SetSquaredDistanceMap(
71     this->m_Parameters.GetBool( "SquaredDistanceMap" )
72     );
73   filter->Update( );
74
75   this->GetOutputData( "EndPoints" )->SetITK( filter->GetEndPoints( ) );
76   this->GetOutputData( "Bifurcations" )->SetITK( filter->GetBifurcations( ) );
77   this->GetOutputData( "Collisions" )->SetITK( filter->GetCollisions( ) );
78   return( "" );
79 }
80
81 // eof - $RCSfile$