]> Creatis software - FrontAlgorithms.git/blob - plugins/fpa/ExtractEndPointsAndBifurcationsFromMinimumSpanningTree.cxx
73fbad0c95e7e2c05508bfde2e6f521dd15f9119
[FrontAlgorithms.git] / plugins / fpa / ExtractEndPointsAndBifurcationsFromMinimumSpanningTree.cxx
1 #include "ExtractEndPointsAndBifurcationsFromMinimumSpanningTree.h"
2
3 #include <fpa_Instances/Backtracking.h>
4 #include <cpPlugins/Image.h>
5 #include <cpPlugins/ImageIndexesContainer.h>
6 #include <plugins/fpa/ImageSkeleton.h>
7
8 // -------------------------------------------------------------------------
9 fpaPlugins::ExtractEndPointsAndBifurcationsFromMinimumSpanningTree::
10 ExtractEndPointsAndBifurcationsFromMinimumSpanningTree( )
11   : Superclass( )
12 {
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" );
20
21   this->m_Parameters.ConfigureAsBool( "SquaredDistanceMap" );
22   this->m_Parameters.SetBool( "SquaredDistanceMap", false );
23 }
24
25 // -------------------------------------------------------------------------
26 fpaPlugins::ExtractEndPointsAndBifurcationsFromMinimumSpanningTree::
27 ~ExtractEndPointsAndBifurcationsFromMinimumSpanningTree( )
28 {
29 }
30
31 // -------------------------------------------------------------------------
32 void fpaPlugins::ExtractEndPointsAndBifurcationsFromMinimumSpanningTree::
33 _GenerateData( )
34 {
35   auto image = this->GetInputData( "CostsImage" )->GetITK< itk::DataObject >( );
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." );
39 }
40
41 // -------------------------------------------------------------------------
42 template< class _TImage >
43 void fpaPlugins::ExtractEndPointsAndBifurcationsFromMinimumSpanningTree::
44 _GD0( _TImage* image )
45 {
46   typedef fpa::Image::MinimumSpanningTree< _TImage::ImageDimension > _TMST;
47   typedef fpa::Image::ExtractEndPointsAndBifurcationsFromMinimumSpanningTree< _TImage, _TMST > _TFilter;
48
49   // Check input objects' integrity
50   auto dmap = this->GetInputData( "DistanceMap" )->GetITK< _TImage >( );
51   if( dmap == NULL )
52     this->_Error( "Distance map does not have the same type as the costs image." );
53   auto mst = this->GetInputData( "MST" )->GetITK< _TMST >( );
54   if( mst == NULL )
55     this->_Error( "No valid input tree." );
56
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" )
64     );
65   filter->Update( );
66
67   this->GetOutputData( "EndPoints" )->SetITK( filter->GetEndPoints( ) );
68   this->GetOutputData( "Bifurcations" )->SetITK( filter->GetBifurcations( ) );
69   this->GetOutputData( "Collisions" )->SetITK( filter->GetCollisions( ) );
70   this->GetOutputData( "Skeleton" )->SetITK( filter->GetSkeleton( ) );
71 }
72
73 // eof - $RCSfile$