1 // =========================================================================
2 // @author Leonardo Florez Valencia
3 // @email florez-l@javeriana.edu.co
4 // =========================================================================
5 #ifndef __fpa__Filters__Image__LabelsSeedFilter__hxx__
6 #define __fpa__Filters__Image__LabelsSeedFilter__hxx__
8 #include <itkImageRegionConstIteratorWithIndex.h>
10 // -------------------------------------------------------------------------
11 template< class _TFilter, class _TInputLabels >
12 fpa::Filters::Image::LabelsSeedFilter< _TFilter, _TInputLabels >::
16 fpaFilterInputConfigureMacro( InputLabels, TInputLabels );
19 // -------------------------------------------------------------------------
20 template< class _TFilter, class _TInputLabels >
21 fpa::Filters::Image::LabelsSeedFilter< _TFilter, _TInputLabels >::
26 // -------------------------------------------------------------------------
27 template< class _TFilter, class _TInputLabels >
28 const itk::DataObject*
29 fpa::Filters::Image::LabelsSeedFilter< _TFilter, _TInputLabels >::
30 _GetReferenceInput( ) const
32 return( this->GetInputLabels( ) );
35 // -------------------------------------------------------------------------
36 template< class _TFilter, class _TInputLabels >
37 void fpa::Filters::Image::LabelsSeedFilter< _TFilter, _TInputLabels >::
38 _PrepareSeeds( const itk::DataObject* input )
40 // Input object is a labelled image?
41 const TInputLabels* labels = dynamic_cast< const TInputLabels* >( input );
44 this->m_UnifiedSeeds.clear( );
46 // Iterate over labels
47 typedef itk::ImageRegionConstIteratorWithIndex< TInputLabels > _TIt;
48 typename TInputLabels::RegionType reg = labels->GetRequestedRegion( );
49 _TIt lIt( labels, reg );
50 for( lIt.GoToBegin( ); !lIt.IsAtEnd( ); ++lIt )
55 for( unsigned int d = 0; d < Self::Dimension; ++d )
57 for( int s = -1; s <= 1; s += 2 )
59 TVertex neigh = lIt.GetIndex( );
61 if( reg.IsInside( neigh ) )
62 is_seed |= ( labels->GetPixel( neigh ) == 0 );
68 // Add pixel as seed or already marked
70 node.Vertex = lIt.GetIndex( );
71 node.Parent = lIt.GetIndex( );
72 node.FrontId = lIt.Get( );
73 node.Value = TOutputValue( 0 );
76 this->_Mark( node.Vertex, node.FrontId );
77 this->_UpdateOutputValue( node );
80 this->m_UnifiedSeeds.insert( node );
89 #endif // __fpa__Filters__Image__LabelsSeedFilter__hxx__