]> Creatis software - FrontAlgorithms.git/commitdiff
...
authorLeonardo Flórez-Valencia <leonardo.florez@gmail.com>
Wed, 15 Feb 2017 03:10:00 +0000 (22:10 -0500)
committerLeonardo Flórez-Valencia <leonardo.florez@gmail.com>
Wed, 15 Feb 2017 03:10:00 +0000 (22:10 -0500)
examples/Skeleton_00.cxx
lib/fpa/Image/SkeletonFilter.hxx

index 5ddb5e48919cc4442f40458d009ccf579c933df7..9351c8644a7b412a618afb50b762065ab4b104f7 100644 (file)
@@ -3,6 +3,7 @@
 #include <itkSignedMaurerDistanceMapImageFilter.h>
 #include <itkMinimumMaximumImageCalculator.h>
 #include <fpa/Image/SkeletonFilter.h>
+#include <cpExtensions/Algorithms/SkeletonWriter.h>
 
 // -------------------------------------------------------------------------
 typedef itk::Image< double, 2 >                                   TImage;
@@ -10,19 +11,22 @@ typedef itk::ImageFileReader< TImage >                            TReader;
 typedef itk::SignedMaurerDistanceMapImageFilter< TImage, TImage > TDMap;
 typedef itk::MinimumMaximumImageCalculator< TImage >              TMinMax;
 typedef fpa::Image::SkeletonFilter< TImage >                      TFilter;
+typedef TFilter::TSkeleton                                        TSkeleton;
+typedef cpExtensions::Algorithms::SkeletonWriter< TSkeleton >     TWriter;
 
 // -------------------------------------------------------------------------
 int main( int argc, char* argv[] )
 {
-  if( argc < 2 )
+  if( argc < 3 )
   {
     std::cerr
       << "Usage: " << argv[ 0 ]
-      << " input_filename" << std::endl;
+      << " input_filename output_filename" << std::endl;
     return( 1 );
 
   } // fi
   std::string in_fname = argv[ 1 ];
+  std::string out_fname = argv[ 2 ];
 
   TReader::Pointer reader = TReader::New( );
   reader->SetFileName( in_fname );
@@ -43,6 +47,11 @@ int main( int argc, char* argv[] )
   filter->AddSeed( minmax->GetIndexOfMaximum( ), 0 );
   filter->Update( );
 
+  TWriter::Pointer writer = TWriter::New( );
+  writer->SetInput( filter->GetSkeleton( ) );
+  writer->SetFileName( out_fname );
+  writer->Update( );
+
   return( 0 );
 }
 
index d8dc66a1f0841216b02c7ddeeeba8ee941a5ddac..bf63d8971b463daa5071f5b30bc472629228b5b8 100644 (file)
@@ -132,7 +132,6 @@ _EndPoints( std::vector< TIndex >& end_points, _TAdjacencies& A )
       continue;
     marks->SetPixel( n.second, 1 );
     end_points.push_back( n.second );
-    std::cout << this->m_SkeletonQueue.size( ) << std::endl;
 
     // Mark path
     TIndex it = n.second;
@@ -155,71 +154,67 @@ template< class _TImage >
 void fpa::Image::SkeletonFilter< _TImage >::
 _Skeleton( const std::vector< TIndex >& end_points, _TAdjacencies& A )
 {
-  std::cout << end_points.size( ) << " " << A.size( ) << std::endl;
-
-  /* TODO
-     typedef itk::Image< unsigned long, Self::Dimension > _TTagsImage;
-     typedef typename TMST::TPath _TPath;
-
-     auto mst = this->GetMinimumSpanningTree( );
-     auto skeleton = this->GetSkeleton( );
-
-     // Tag branches
-     typename _TTagsImage::Pointer tags = _TTagsImage::New( );
-     tags->SetLargestPossibleRegion( mst->GetLargestPossibleRegion( ) );
-     tags->SetRequestedRegion( mst->GetRequestedRegion( ) );
-     tags->SetBufferedRegion( mst->GetBufferedRegion( ) );
-     tags->Allocate( );
-     tags->FillBuffer( 0 );
-     for( auto eIt = end_points.begin( ); eIt != end_points.end( ); ++eIt )
-     {
-     TIndex it = *eIt;
-     TIndex p = mst->GetParent( it );
-     while( it != p )
-     {
-     tags->SetPixel( it, tags->GetPixel( it ) + 1 );
-     it = p;
-     p = mst->GetParent( it );
-
-     } // elihw
-     tags->SetPixel( it, tags->GetPixel( it ) + 1 );
-
-     } // rof
-
-     // Build paths (branches)
-     for( auto eIt = end_points.begin( ); eIt != end_points.end( ); ++eIt )
-     {
-     TIndex it = *eIt;
-     TIndex p = mst->GetParent( it );
-     TIndex sIdx = *eIt;
-     typename _TPath::Pointer path = _TPath::New( );
-     path->SetReferenceImage( mst );
-     while( it != p )
-     {
-     if( tags->GetPixel( sIdx ) != tags->GetPixel( it ) )
-     {
-     // Ok, a new branch has been added
-     path->AddVertex( it );
-     skeleton->AddBranch( path );
-
-     // Update a new starting index
-     path = _TPath::New( );
-     path->SetReferenceImage( mst );
-     sIdx = it;
-     }
-     else
-     path->AddVertex( it );
-     it = p;
-     p = mst->GetParent( it );
-
-     } // elihw
-
-     // Finally, add last branch
-     path->AddVertex( it );
-     skeleton->AddBranch( path );
-
-     } // rof
-  */
+  typedef itk::Image< unsigned long, Self::Dimension > _TTagsImage;
+  typedef typename TMST::TPath _TPath;
+
+  auto mst = this->GetMinimumSpanningTree( );
+  auto skeleton = this->GetSkeleton( );
+
+  // Tag branches
+  typename _TTagsImage::Pointer tags = _TTagsImage::New( );
+  tags->SetLargestPossibleRegion( mst->GetLargestPossibleRegion( ) );
+  tags->SetRequestedRegion( mst->GetRequestedRegion( ) );
+  tags->SetBufferedRegion( mst->GetBufferedRegion( ) );
+  tags->Allocate( );
+  tags->FillBuffer( 0 );
+  for( auto eIt = end_points.begin( ); eIt != end_points.end( ); ++eIt )
+  {
+    TIndex it = *eIt;
+    TIndex p = mst->GetParent( it );
+    while( it != p )
+    {
+      tags->SetPixel( it, tags->GetPixel( it ) + 1 );
+      it = p;
+      p = mst->GetParent( it );
+
+    } // elihw
+    tags->SetPixel( it, tags->GetPixel( it ) + 1 );
+
+  } // rof
+
+  // Build paths (branches)
+  for( auto eIt = end_points.begin( ); eIt != end_points.end( ); ++eIt )
+  {
+    TIndex it = *eIt;
+    TIndex p = mst->GetParent( it );
+    TIndex sIdx = *eIt;
+    typename _TPath::Pointer path = _TPath::New( );
+    path->SetReferenceImage( mst );
+    while( it != p )
+    {
+      if( tags->GetPixel( sIdx ) != tags->GetPixel( it ) )
+      {
+        // Ok, a new branch has been added
+        path->AddVertex( it );
+        skeleton->AddBranch( path );
+
+        // Update a new starting index
+        path = _TPath::New( );
+        path->SetReferenceImage( mst );
+        sIdx = it;
+      }
+      else
+        path->AddVertex( it );
+      it = p;
+      p = mst->GetParent( it );
+
+    } // elihw
+
+    // Finally, add last branch
+    path->AddVertex( it );
+    skeleton->AddBranch( path );
+
+  } // rof
 }
 
 // -------------------------------------------------------------------------