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