#ifndef __fpa__Image__SkeletonFilter__h__
#define __fpa__Image__SkeletonFilter__h__
+#include <map>
+
#include <itkProcessObject.h>
#include <itkSignedMaurerDistanceMapImageFilter.h>
+
#include <fpa/Image/Dijkstra.h>
#include <fpa/Image/Skeleton.h>
-/*
- #include <functional>
- #include <map>
-
-
- #include <fpa/Image/MinimumSpanningTree.h>
-
- #include <itkMinimumMaximumImageCalculator.h>
- #include <fpa/Image/Functors/Dijkstra/Invert.h>
-*/
-
namespace fpa
{
namespace Image
dijkstra->Update( );
// Compute end-points
+ const _TMST* mst = dijkstra->GetMinimumSpanningTree( );
std::vector< TIndex > end_points;
this->_EndPoints(
- end_points,
- this->m_DistanceMap->GetOutput( ),
- dijkstra->GetMinimumSpanningTree( ),
- dijkstra->GetSkeletonQueue( )
+ end_points, this->m_DistanceMap->GetOutput( ),
+ mst, dijkstra->GetSkeletonQueue( )
);
+
+ // Create branches
+ TSkeleton* sk = this->GetOutput( );
+ typename std::vector< TIndex >::const_iterator eIt = end_points.begin( );
+ std::map< TIndex, unsigned long, typename TIndex::LexicographicCompare > tags;
+ unsigned long t = 1;
+ for( ; eIt != end_points.end( ); ++eIt )
+ {
+ // Tag path
+ TIndex it = *eIt;
+ TIndex p = mst->GetParent( it );
+ while( it != p )
+ {
+ tags[ it ] = t;
+ it = p;
+ p = mst->GetParent( it );
+
+ } // elihw
+ // TODO: More on it
+
+ } // rof
}
// -------------------------------------------------------------------------