--- /dev/null
+// =========================================================================
+// @author Leonardo Florez Valencia
+// @email florez-l@javeriana.edu.co
+// =========================================================================
+#ifndef __fpa__Filters__Image__SeedsFromLabelsInterface__hxx__
+#define __fpa__Filters__Image__SeedsFromLabelsInterface__hxx__
+
+#include <itkImage.h>
+#include <itkImageRegionConstIteratorWithIndex.h>
+
+// -------------------------------------------------------------------------
+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$