X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=lib%2Ffpa%2FImage%2FAlgorithm.hxx;h=98592f63d21c375268ff7d1e5fa68ae56f2dd550;hb=fe01e92d9bce3519fa2a0936b6180ca7b057a87a;hp=0ae9b90f993aa5bb0af9b31c11af088795151edc;hpb=c4efafee513539e9a58c4a8b8369450ada1df5d8;p=FrontAlgorithms.git diff --git a/lib/fpa/Image/Algorithm.hxx b/lib/fpa/Image/Algorithm.hxx index 0ae9b90..98592f6 100644 --- a/lib/fpa/Image/Algorithm.hxx +++ b/lib/fpa/Image/Algorithm.hxx @@ -14,8 +14,10 @@ TMarks* fpa::Image::Algorithm< _TInputImage, _TOutputImage, _TMarksInterface, _TSeedsInterface >:: GetMarks( ) { - dynamic_cast< TMarks* >( - this->itk::ProcessObject::GetOutput( this->m_MarksIdx ) + return( + dynamic_cast< TMarks* >( + this->itk::ProcessObject::GetOutput( this->m_MarksIdx ) + ) ); } @@ -27,8 +29,10 @@ TMarks* fpa::Image::Algorithm< _TInputImage, _TOutputImage, _TMarksInterface, _TSeedsInterface >:: GetMarks( ) const { - dynamic_cast< const TMarks* >( - this->itk::ProcessObject::GetOutput( this->m_MarksIdx ) + return( + dynamic_cast< const TMarks* >( + this->itk::ProcessObject::GetOutput( this->m_MarksIdx ) + ) ); } @@ -51,6 +55,42 @@ fpa::Image::Algorithm< _TInputImage, _TOutputImage, _TMarksInterface, _TSeedsInt { } +// ------------------------------------------------------------------------- +template< class _TInputImage, class _TOutputImage, class _TMarksInterface, class _TSeedsInterface > +typename +fpa::Image::Algorithm< _TInputImage, _TOutputImage, _TMarksInterface, _TSeedsInterface >:: +TNodes fpa::Image::Algorithm< _TInputImage, _TOutputImage, _TMarksInterface, _TSeedsInterface >:: +_UnifySeeds( ) +{ + const TInputImage* input = this->GetInput( ); + typename TInputImage::RegionType region = input->GetRequestedRegion( ); + TSeeds seeds = this->GetSeeds( ); + TNodes nodes; + + typename TSeeds::iterator sIt = seeds.begin( ); + for( ; sIt != seeds.end( ); ++sIt ) + { + TNode node; + if( sIt->IsPoint ) + input->TransformPhysicalPointToIndex( sIt->Point, sIt->Vertex ); + else + input->TransformIndexToPhysicalPoint( sIt->Vertex, sIt->Point ); + if( region.IsInside( sIt->Vertex ) ) + { + sIt->IsUnified = true; + node.Vertex = sIt->Vertex; + node.Parent = node.Vertex; + node.FrontId = nodes.size( ) + 1; + nodes.insert( node ); + } + else + sIt->IsUnified = false; + + } // rof + + return( nodes ); +} + // ------------------------------------------------------------------------- template< class _TInputImage, class _TOutputImage, class _TMarksInterface, class _TSeedsInterface > void