]> Creatis software - FrontAlgorithms.git/blobdiff - lib/fpa/Image/ExtractEndPointsAndBifurcationsFromMinimumSpanningTree.hxx
...
[FrontAlgorithms.git] / lib / fpa / Image / ExtractEndPointsAndBifurcationsFromMinimumSpanningTree.hxx
index 16d03e83ce3aa2e2bb5551f98b5feb0fc186cbc7..3e7a32bcac72602428bb2d21565b9cd2a20ee4f9 100644 (file)
@@ -30,6 +30,23 @@ GetDistanceMap( )
     );
 }
 
+// -------------------------------------------------------------------------
+template< class _TImage, class _TMST >
+typename
+fpa::Image::ExtractEndPointsAndBifurcationsFromMinimumSpanningTree< _TImage, _TMST >::
+TSkeleton*
+fpa::Image::ExtractEndPointsAndBifurcationsFromMinimumSpanningTree< _TImage, _TMST >::
+GetSkeleton( )
+{
+  return(
+    dynamic_cast< TSkeleton* >(
+      this->itk::ProcessObject::GetOutput(
+        this->GetNumberOfRequiredOutputs( ) - 1
+        )
+      )
+    );
+}
+
 // -------------------------------------------------------------------------
 template< class _TImage, class _TMST >
 void
@@ -56,6 +73,10 @@ ExtractEndPointsAndBifurcationsFromMinimumSpanningTree( )
     m_SquaredDistanceMap( false )
 {
   this->SetNumberOfRequiredInputs( 3 );
+  unsigned int nOuts = this->GetNumberOfRequiredOutputs( );
+  this->SetNumberOfRequiredOutputs( nOuts + 1 );
+  typename TSkeleton::Pointer sk = TSkeleton::New( );
+  this->itk::ProcessObject::SetNthOutput( nOuts, sk.GetPointer( ) );
 }
 
 // -------------------------------------------------------------------------
@@ -71,8 +92,8 @@ void
 fpa::Image::ExtractEndPointsAndBifurcationsFromMinimumSpanningTree< _TImage, _TMST >::
 GenerateData( )
 {
+  // Create auxiliary objects
   auto image = this->GetCostsImage( );
-
   this->m_MarkImage = TMarkImage::New( );
   this->m_MarkImage->SetLargestPossibleRegion( image->GetLargestPossibleRegion( ) );
   this->m_MarkImage->SetRequestedRegion( image->GetRequestedRegion( ) );
@@ -82,7 +103,6 @@ GenerateData( )
   this->m_MarkImage->SetSpacing( image->GetSpacing( ) );
   this->m_MarkImage->Allocate( );
   this->m_MarkImage->FillBuffer( 0 );
-
   this->m_SkeletonImage = TMarkImage::New( );
   this->m_SkeletonImage->SetLargestPossibleRegion( image->GetLargestPossibleRegion( ) );
   this->m_SkeletonImage->SetRequestedRegion( image->GetRequestedRegion( ) );
@@ -93,7 +113,15 @@ GenerateData( )
   this->m_SkeletonImage->Allocate( );
   this->m_SkeletonImage->FillBuffer( 0 );
 
+  // Real execution
   this->Superclass::GenerateData( );
+
+  // Build skeleton
+  auto sk = this->GetSkeleton( );
+  sk->SetMinimumSpanningTree( this->GetMinimumSpanningTree( ) );
+  auto bIt = this->m_Branches.begin( );
+  for( ; bIt != this->m_Branches.end( ); ++bIt )
+    sk->AddBranch( bIt->first, bIt->second );
 }
 
 // -------------------------------------------------------------------------