#include "ExtractEndPointsAndBifurcationsFromMinimumSpanningTree.h" #include #include #include // ------------------------------------------------------------------------- fpaPlugins::ExtractEndPointsAndBifurcationsFromMinimumSpanningTree:: ExtractEndPointsAndBifurcationsFromMinimumSpanningTree( ) : Superclass( ) { this->_AddInput( "CostsImage" ); this->_AddInput( "DistanceMap" ); this->_AddInput( "MST" ); this->_AddOutput< cpPlugins::ImageIndexesContainer >( "EndPoints" ); this->_AddOutput< cpPlugins::ImageIndexesContainer >( "Bifurcations" ); this->_AddOutput< cpPlugins::ImageIndexesContainer >( "Collisions" ); this->m_Parameters.ConfigureAsBool( "SquaredDistanceMap" ); this->m_Parameters.SetBool( "SquaredDistanceMap", false ); } // ------------------------------------------------------------------------- fpaPlugins::ExtractEndPointsAndBifurcationsFromMinimumSpanningTree:: ~ExtractEndPointsAndBifurcationsFromMinimumSpanningTree( ) { } // ------------------------------------------------------------------------- std::string fpaPlugins::ExtractEndPointsAndBifurcationsFromMinimumSpanningTree:: _GenerateData( ) { auto image = this->GetInputData( "CostsImage" )->GetITK< itk::DataObject >( ); std::string r = cpPlugin_Image_Demangle_Pixel_Dim( _GD0, image, float, 2 ); if( r != "" ) r = cpPlugin_Image_Demangle_Pixel_Dim( _GD0, image, double, 2 ); if( r != "" ) r = cpPlugin_Image_Demangle_Pixel_Dim( _GD0, image, float, 3 ); if( r != "" ) r = cpPlugin_Image_Demangle_Pixel_Dim( _GD0, image, double, 3 ); return( r ); } // ------------------------------------------------------------------------- template< class _TImage > std::string fpaPlugins::ExtractEndPointsAndBifurcationsFromMinimumSpanningTree:: _GD0( _TImage* image ) { typedef fpa::Image::MinimumSpanningTree< _TImage::ImageDimension > _TMST; typedef fpa::Image::ExtractEndPointsAndBifurcationsFromMinimumSpanningTree< _TImage, _TMST > _TFilter; // Check input objects' integrity if( image == NULL ) return( "fpaPlugins::ExtractEndPointsAndBifurcationsFromMinimumSpanningTree: No valid input costs image." ); auto dmap = this->GetInputData( "DistanceMap" )->GetITK< _TImage >( ); if( dmap == NULL ) return( "fpaPlugins::ExtractEndPointsAndBifurcationsFromMinimumSpanningTree: Distance map does not have the same type as the costs image." ); auto mst = this->GetInputData( "MST" )->GetITK< _TMST >( ); if( mst == NULL ) return( "fpaPlugins::ExtractEndPointsAndBifurcationsFromMinimumSpanningTree: No valid input tree." ); // Create filter and connect inputs _TFilter* filter = this->_CreateITK< _TFilter >( ); filter->SetCostsImage( image ); filter->SetDistanceMap( dmap ); filter->SetMinimumSpanningTree( mst ); filter->SetSquaredDistanceMap( this->m_Parameters.GetBool( "SquaredDistanceMap" ) ); filter->Update( ); this->GetOutputData( "EndPoints" )->SetITK( filter->GetEndPoints( ) ); this->GetOutputData( "Bifurcations" )->SetITK( filter->GetBifurcations( ) ); this->GetOutputData( "Collisions" )->SetITK( filter->GetCollisions( ) ); return( "" ); } // eof - $RCSfile$