]> Creatis software - FrontAlgorithms.git/blobdiff - plugins/fpa/ExtractEndPointsAndBifurcationsFromMinimumSpanningTree.cxx
...
[FrontAlgorithms.git] / plugins / fpa / ExtractEndPointsAndBifurcationsFromMinimumSpanningTree.cxx
index 997fa49f06250d315c65c84223aee85021a87919..ea2c37abfeb6cd77b9fc72216658165817bfe5f5 100644 (file)
@@ -1,10 +1,9 @@
 #include "ExtractEndPointsAndBifurcationsFromMinimumSpanningTree.h"
-#include "MinimumSpanningTree.h"
 
+#include <fpa_Instances/Backtracking.h>
 #include <cpPlugins/Image.h>
-#include <fpa/Image/ExtractEndPointsAndBifurcationsFromMinimumSpanningTree.h>
-#include <fpa/Base/ExtractEndPointsAndBifurcationsFromMinimumSpanningTree.hxx>
-#include <fpa/Image/ExtractEndPointsAndBifurcationsFromMinimumSpanningTree.hxx>
+#include <cpPlugins/ImageIndexesContainer.h>
+#include <plugins/fpa/ImageSkeleton.h>
 
 // -------------------------------------------------------------------------
 fpaPlugins::ExtractEndPointsAndBifurcationsFromMinimumSpanningTree::
@@ -14,9 +13,10 @@ ExtractEndPointsAndBifurcationsFromMinimumSpanningTree( )
   this->_AddInput( "CostsImage" );
   this->_AddInput( "DistanceMap" );
   this->_AddInput( "MST" );
-  this->_AddOutput< cpPlugins::DataObject >( "EndPoints" );
-  this->_AddOutput< cpPlugins::DataObject >( "Bifurcations" );
-  this->_AddOutput< cpPlugins::DataObject >( "Collisions" );
+  this->_AddOutput< cpPlugins::ImageIndexesContainer >( "EndPoints" );
+  this->_AddOutput< cpPlugins::ImageIndexesContainer >( "Bifurcations" );
+  this->_AddOutput< cpPlugins::ImageIndexesContainer >( "Collisions" );
+  this->_AddOutput< fpaPlugins::ImageSkeleton >( "Skeleton" );
 
   this->m_Parameters.ConfigureAsBool( "SquaredDistanceMap" );
   this->m_Parameters.SetBool( "SquaredDistanceMap", false );
@@ -29,40 +29,30 @@ fpaPlugins::ExtractEndPointsAndBifurcationsFromMinimumSpanningTree::
 }
 
 // -------------------------------------------------------------------------
-std::string fpaPlugins::ExtractEndPointsAndBifurcationsFromMinimumSpanningTree::
+void 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 );
+  auto image = this->GetInputData< itk::DataObject >( "CostsImage" );
+  cpPlugins_Image_Demangle_Pixel_AllFloats     ( _GD0, image, 2 );
+  else cpPlugins_Image_Demangle_Pixel_AllFloats( _GD0, image, 3 );
+  else this->_Error( "Invalid input costs." );
 }
 
 // -------------------------------------------------------------------------
 template< class _TImage >
-std::string fpaPlugins::ExtractEndPointsAndBifurcationsFromMinimumSpanningTree::
+void 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 >( );
+  auto dmap = this->GetInputData< _TImage >( "DistanceMap" );
   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 >( );
+    this->_Error( "Distance map does not have the same type as the costs image." );
+  auto mst = this->GetInputData< _TMST >( "MST" );
   if( mst == NULL )
-    return(
-      "fpaPlugins::ExtractEndPointsAndBifurcationsFromMinimumSpanningTree: No valid input tree."
-      );
+    this->_Error( "No valid input tree." );
 
   // Create filter and connect inputs
   _TFilter* filter = this->_CreateITK< _TFilter >( );
@@ -74,10 +64,10 @@ _GD0( _TImage* image )
     );
   filter->Update( );
 
-  this->GetOutputData( "EndPoints" )->SetITK( filter->GetEndPoints( ) );
-  this->GetOutputData( "Bifurcations" )->SetITK( filter->GetBifurcations( ) );
-  this->GetOutputData( "Collisions" )->SetITK( filter->GetCollisions( ) );
-  return( "" );
+  this->GetOutput( "EndPoints" )->SetITK( filter->GetEndPoints( ) );
+  this->GetOutput( "Bifurcations" )->SetITK( filter->GetBifurcations( ) );
+  this->GetOutput( "Collisions" )->SetITK( filter->GetCollisions( ) );
+  this->GetOutput( "Skeleton" )->SetITK( filter->GetSkeleton( ) );
 }
 
 // eof - $RCSfile$