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