1 #include "ExtractEndPointsAndBifurcationsFromMinimumSpanningTree.h"
3 #include <fpa_Instances/Backtracking.h>
4 #include <cpPlugins/Image.h>
5 #include <cpPlugins/ImageIndexesContainer.h>
7 // -------------------------------------------------------------------------
8 fpaPlugins::ExtractEndPointsAndBifurcationsFromMinimumSpanningTree::
9 ExtractEndPointsAndBifurcationsFromMinimumSpanningTree( )
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" );
19 this->m_Parameters.ConfigureAsBool( "SquaredDistanceMap" );
20 this->m_Parameters.SetBool( "SquaredDistanceMap", false );
23 // -------------------------------------------------------------------------
24 fpaPlugins::ExtractEndPointsAndBifurcationsFromMinimumSpanningTree::
25 ~ExtractEndPointsAndBifurcationsFromMinimumSpanningTree( )
29 // -------------------------------------------------------------------------
30 std::string fpaPlugins::ExtractEndPointsAndBifurcationsFromMinimumSpanningTree::
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 );
41 // -------------------------------------------------------------------------
42 template< class _TImage >
43 std::string fpaPlugins::ExtractEndPointsAndBifurcationsFromMinimumSpanningTree::
44 _GD0( _TImage* image )
46 typedef fpa::Image::MinimumSpanningTree< _TImage::ImageDimension > _TMST;
47 typedef fpa::Image::ExtractEndPointsAndBifurcationsFromMinimumSpanningTree< _TImage, _TMST > _TFilter;
49 // Check input objects' integrity
52 "fpaPlugins::ExtractEndPointsAndBifurcationsFromMinimumSpanningTree: No valid input costs image."
54 auto dmap = this->GetInputData( "DistanceMap" )->GetITK< _TImage >( );
57 "fpaPlugins::ExtractEndPointsAndBifurcationsFromMinimumSpanningTree: Distance map does not have the same type as the costs image."
59 auto mst = this->GetInputData( "MST" )->GetITK< _TMST >( );
62 "fpaPlugins::ExtractEndPointsAndBifurcationsFromMinimumSpanningTree: No valid input tree."
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" )
75 this->GetOutputData( "EndPoints" )->SetITK( filter->GetEndPoints( ) );
76 this->GetOutputData( "Bifurcations" )->SetITK( filter->GetBifurcations( ) );
77 this->GetOutputData( "Collisions" )->SetITK( filter->GetCollisions( ) );