X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=lib%2Ffpa%2FFilters%2FImage%2FSeedsFromLabelsInterface.hxx;fp=lib%2Ffpa%2FFilters%2FImage%2FSeedsFromLabelsInterface.hxx;h=8f58ba439b42e8030cd66891302e1d4cf9e1874c;hb=bd89a1af0c14ed2ac0afeca923103de54283cbaf;hp=0000000000000000000000000000000000000000;hpb=a8ac405fe1422bc0792a810f7f0693096a22c20e;p=FrontAlgorithms.git diff --git a/lib/fpa/Filters/Image/SeedsFromLabelsInterface.hxx b/lib/fpa/Filters/Image/SeedsFromLabelsInterface.hxx new file mode 100644 index 0000000..8f58ba4 --- /dev/null +++ b/lib/fpa/Filters/Image/SeedsFromLabelsInterface.hxx @@ -0,0 +1,84 @@ +// ========================================================================= +// @author Leonardo Florez Valencia +// @email florez-l@javeriana.edu.co +// ========================================================================= +#ifndef __fpa__Filters__Image__SeedsFromLabelsInterface__hxx__ +#define __fpa__Filters__Image__SeedsFromLabelsInterface__hxx__ + +#include +#include + +// ------------------------------------------------------------------------- +template< class _TTraits > +fpa::Filters::Image::SeedsFromLabelsInterface< _TTraits >:: +SeedsFromLabelsInterface( itk::ProcessObject* f ) + : Superclass( f ) +{ +} + +// ------------------------------------------------------------------------- +template< class _TTraits > +fpa::Filters::Image::SeedsFromLabelsInterface< _TTraits >:: +~SeedsFromLabelsInterface( ) +{ +} + +// ------------------------------------------------------------------------- +template< class _TTraits > +void fpa::Filters::Image::SeedsFromLabelsInterface< _TTraits >:: +_PrepareSeeds( const itk::DataObject* reference ) +{ + // Input object is a labelled image? + typedef typename _TTraits::TMark _TMark; + typedef itk::Image< _TMark, _TTraits::Dimension > _TLabelImage; + const _TLabelImage* labels = + dynamic_cast< const _TLabelImage* >( reference ); + if( labels != NULL ) + { + this->m_UnifiedSeeds.clear( ); + + // Iterate over labels + typedef itk::ImageRegionConstIteratorWithIndex< _TLabelImage > _TIt; + typename _TLabelImage::RegionType reg = labels->GetRequestedRegion( ); + _TIt lIt( labels, reg ); + for( lIt.GoToBegin( ); !lIt.IsAtEnd( ); ++lIt ) + { + if( lIt.Get( ) > 0 ) + { + bool is_seed = false; + for( unsigned int d = 0; d < _TTraits::Dimension; ++d ) + { + for( int s = -1; s <= 1; s += 2 ) + { + TVertex neigh = lIt.GetIndex( ); + neigh[ d ] += s; + if( reg.IsInside( neigh ) ) + is_seed |= ( labels->GetPixel( neigh ) == 0 ); + + } // rof + + } // rof + + // Add pixel as seed or already marked + TNode node; + node.Vertex = lIt.GetIndex( ); + node.Parent = lIt.GetIndex( ); + node.FrontId = lIt.Get( ); + node.Value = TOutputValue( 0 ); + if( !is_seed ) + { + this->_AssignOutputValue( node ); + this->_Mark( node ); + } + else + this->m_UnifiedSeeds.insert( node ); + + } // fi + + } // rof + + } // fi +} + +#endif // __fpa__Filters__Image__SeedsFromLabelsInterface__hxx__ +// eof - $RCSfile$