#ifndef __fpa__Filters__Image__RandomWalker__hxx__
#define __fpa__Filters__Image__RandomWalker__hxx__
-#include <itkImageRegionConstIteratorWithIndex.h>
-
// -------------------------------------------------------------------------
template< class _TInputImage, class _TInputLabels, class _TCostsImage, class _TTraits >
typename
RandomWalker( )
: Superclass( )
{
- fpaFilterInputConfigureMacro( InputLabels, TInputLabels );
}
// -------------------------------------------------------------------------
{
}
-// -------------------------------------------------------------------------
-template< class _TInputImage, class _TInputLabels, class _TCostsImage, class _TTraits >
-const itk::DataObject*
-fpa::Filters::Image::RandomWalker< _TInputImage, _TInputLabels, _TCostsImage, _TTraits >::
-_GetReferenceInput( ) const
-{
- return( this->GetInputLabels( ) );
-}
-
-// -------------------------------------------------------------------------
-template< class _TInputImage, class _TInputLabels, class _TCostsImage, class _TTraits >
-void
-fpa::Filters::Image::RandomWalker< _TInputImage, _TInputLabels, _TCostsImage, _TTraits >::
-_PrepareSeeds( const itk::DataObject* input )
-{
- // Input object is a labelled image?
- const TInputLabels* labels = dynamic_cast< const TInputLabels* >( input );
- if( labels != NULL )
- {
- this->m_UnifiedSeeds.clear( );
-
- // Iterate over labels
- typedef itk::ImageRegionConstIteratorWithIndex< TInputLabels > _TIt;
- typename TInputLabels::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 < Self::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->_Mark( node.Vertex, node.FrontId );
- this->_UpdateOutputValue( node );
- }
- else
- this->m_UnifiedSeeds.insert( node );
-
- } // fi
-
- } // rof
-
- } // fi
-}
-
#endif // __fpa__Filters__Image__RandomWalker__hxx__
// eof - $RCSfile$