);
}
+// -------------------------------------------------------------------------
+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
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( ) );
}
// -------------------------------------------------------------------------
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( ) );
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( ) );
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 );
}
// -------------------------------------------------------------------------