From: Leonardo Flórez-Valencia Date: Wed, 15 Feb 2017 03:10:00 +0000 (-0500) Subject: ... X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=commitdiff_plain;h=6edab8657371ef0c8468142c5ec489b8e5255844;hp=e9083d9f5f381f258f994fa9bbbe39a897f97c5b;p=FrontAlgorithms.git ... --- diff --git a/examples/Skeleton_00.cxx b/examples/Skeleton_00.cxx index 5ddb5e4..9351c86 100644 --- a/examples/Skeleton_00.cxx +++ b/examples/Skeleton_00.cxx @@ -3,6 +3,7 @@ #include #include #include +#include // ------------------------------------------------------------------------- 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 ); } diff --git a/lib/fpa/Image/SkeletonFilter.hxx b/lib/fpa/Image/SkeletonFilter.hxx index d8dc66a..bf63d89 100644 --- a/lib/fpa/Image/SkeletonFilter.hxx +++ b/lib/fpa/Image/SkeletonFilter.hxx @@ -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 } // -------------------------------------------------------------------------