1 #include "ExtractEndPointsAndBifurcationsFromMinimumSpanningTree.h"
3 #include <fpa_Instances/Backtracking.h>
4 #include <cpPlugins/Image.h>
5 #include <cpPlugins/ImageIndexesContainer.h>
6 #include <plugins/fpa/ImageSkeleton.h>
8 // -------------------------------------------------------------------------
9 fpaPlugins::ExtractEndPointsAndBifurcationsFromMinimumSpanningTree::
10 ExtractEndPointsAndBifurcationsFromMinimumSpanningTree( )
13 this->_AddInput( "CostsImage" );
14 this->_AddInput( "DistanceMap" );
15 this->_AddInput( "MST" );
16 this->_AddOutput< cpPlugins::ImageIndexesContainer >( "EndPoints" );
17 this->_AddOutput< cpPlugins::ImageIndexesContainer >( "Bifurcations" );
18 this->_AddOutput< cpPlugins::ImageIndexesContainer >( "Collisions" );
19 this->_AddOutput< fpaPlugins::ImageSkeleton >( "Skeleton" );
21 this->m_Parameters.ConfigureAsBool( "SquaredDistanceMap" );
22 this->m_Parameters.SetBool( "SquaredDistanceMap", false );
25 // -------------------------------------------------------------------------
26 fpaPlugins::ExtractEndPointsAndBifurcationsFromMinimumSpanningTree::
27 ~ExtractEndPointsAndBifurcationsFromMinimumSpanningTree( )
31 // -------------------------------------------------------------------------
32 void fpaPlugins::ExtractEndPointsAndBifurcationsFromMinimumSpanningTree::
35 auto image = this->GetInputData< itk::DataObject >( "CostsImage" );
36 cpPlugins_Image_Demangle_Pixel_AllFloats ( _GD0, image, 2 );
37 else cpPlugins_Image_Demangle_Pixel_AllFloats( _GD0, image, 3 );
38 else this->_Error( "Invalid input costs." );
41 // -------------------------------------------------------------------------
42 template< class _TImage >
43 void 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
50 auto dmap = this->GetInputData< _TImage >( "DistanceMap" );
52 this->_Error( "Distance map does not have the same type as the costs image." );
53 auto mst = this->GetInputData< _TMST >( "MST" );
55 this->_Error( "No valid input tree." );
57 // Create filter and connect inputs
58 _TFilter* filter = this->_CreateITK< _TFilter >( );
59 filter->SetCostsImage( image );
60 filter->SetDistanceMap( dmap );
61 filter->SetMinimumSpanningTree( mst );
62 filter->SetSquaredDistanceMap(
63 this->m_Parameters.GetBool( "SquaredDistanceMap" )
67 this->GetOutput( "EndPoints" )->SetITK( filter->GetEndPoints( ) );
68 this->GetOutput( "Bifurcations" )->SetITK( filter->GetBifurcations( ) );
69 this->GetOutput( "Collisions" )->SetITK( filter->GetCollisions( ) );
70 this->GetOutput( "Skeleton" )->SetITK( filter->GetSkeleton( ) );