#ifndef __fpa__Filters__Image__RandomWalker__hxx__
#define __fpa__Filters__Image__RandomWalker__hxx__
-#include <itkImageRegionConstIteratorWithIndex.h>
-
// -------------------------------------------------------------------------
-template< class _TInputImage, class _TInputLabels, class _TCostsImage, class _TTraits >
+template< class _TInputImage, class _TLabelImage, class _TCost, class _TTraits >
typename
-fpa::Filters::Image::RandomWalker< _TInputImage, _TInputLabels, _TCostsImage, _TTraits >::
-TCostsImage*
-fpa::Filters::Image::RandomWalker< _TInputImage, _TInputLabels, _TCostsImage, _TTraits >::
-GetOutputCosts( )
+fpa::Filters::Image::RandomWalker< _TInputImage, _TLabelImage, _TCost, _TTraits >::
+TInputImage*
+fpa::Filters::Image::RandomWalker< _TInputImage, _TLabelImage, _TCost, _TTraits >::
+GetInputImage( )
{
- return( this->GetOutput( ) );
+ return( this->GetInput( ) );
}
// -------------------------------------------------------------------------
-template< class _TInputImage, class _TInputLabels, class _TCostsImage, class _TTraits >
+template< class _TInputImage, class _TLabelImage, class _TCost, class _TTraits >
const typename
-fpa::Filters::Image::RandomWalker< _TInputImage, _TInputLabels, _TCostsImage, _TTraits >::
-TCostsImage*
-fpa::Filters::Image::RandomWalker< _TInputImage, _TInputLabels, _TCostsImage, _TTraits >::
-GetOutputCosts( ) const
+fpa::Filters::Image::RandomWalker< _TInputImage, _TLabelImage, _TCost, _TTraits >::
+TInputImage*
+fpa::Filters::Image::RandomWalker< _TInputImage, _TLabelImage, _TCost, _TTraits >::
+GetInputImage( ) const
{
- return( this->GetOutput( ) );
+ return( this->GetInput( ) );
}
// -------------------------------------------------------------------------
-template< class _TInputImage, class _TInputLabels, class _TCostsImage, class _TTraits >
-typename
-fpa::Filters::Image::RandomWalker< _TInputImage, _TInputLabels, _TCostsImage, _TTraits >::
-TOutputLabels*
-fpa::Filters::Image::RandomWalker< _TInputImage, _TInputLabels, _TCostsImage, _TTraits >::
-GetOutputLabels( )
+template< class _TInputImage, class _TLabelImage, class _TCost, class _TTraits >
+void
+fpa::Filters::Image::RandomWalker< _TInputImage, _TLabelImage, _TCost, _TTraits >::
+SetInputImage( const TInputImage* i )
{
- return( this->GetMarks( ) );
+ this->SetInput( i );
}
// -------------------------------------------------------------------------
-template< class _TInputImage, class _TInputLabels, class _TCostsImage, class _TTraits >
-const typename
-fpa::Filters::Image::RandomWalker< _TInputImage, _TInputLabels, _TCostsImage, _TTraits >::
-TOutputLabels*
-fpa::Filters::Image::RandomWalker< _TInputImage, _TInputLabels, _TCostsImage, _TTraits >::
-GetOutputLabels( ) const
+template< class _TInputImage, class _TLabelImage, class _TCost, class _TTraits >
+typename
+fpa::Filters::Image::RandomWalker< _TInputImage, _TLabelImage, _TCost, _TTraits >::
+TCostsImage*
+fpa::Filters::Image::RandomWalker< _TInputImage, _TLabelImage, _TCost, _TTraits >::
+GetOutputCosts( )
{
- return( this->GetMarks( ) );
+ return( this->GetOutput( ) );
}
// -------------------------------------------------------------------------
-template< class _TInputImage, class _TInputLabels, class _TCostsImage, class _TTraits >
-typename
-fpa::Filters::Image::RandomWalker< _TInputImage, _TInputLabels, _TCostsImage, _TTraits >::
-TInputImage*
-fpa::Filters::Image::RandomWalker< _TInputImage, _TInputLabels, _TCostsImage, _TTraits >::
-GetInputImage( )
+template< class _TInputImage, class _TLabelImage, class _TCost, class _TTraits >
+const typename
+fpa::Filters::Image::RandomWalker< _TInputImage, _TLabelImage, _TCost, _TTraits >::
+TCostsImage*
+fpa::Filters::Image::RandomWalker< _TInputImage, _TLabelImage, _TCost, _TTraits >::
+GetOutputCosts( ) const
{
- return( this->GetInput( ) );
+ return( this->GetOutput( ) );
}
// -------------------------------------------------------------------------
-template< class _TInputImage, class _TInputLabels, class _TCostsImage, class _TTraits >
-const typename
-fpa::Filters::Image::RandomWalker< _TInputImage, _TInputLabels, _TCostsImage, _TTraits >::
-TInputImage*
-fpa::Filters::Image::RandomWalker< _TInputImage, _TInputLabels, _TCostsImage, _TTraits >::
-GetInputImage( ) const
+template< class _TInputImage, class _TLabelImage, class _TCost, class _TTraits >
+typename
+fpa::Filters::Image::RandomWalker< _TInputImage, _TLabelImage, _TCost, _TTraits >::
+TLabelImage*
+fpa::Filters::Image::RandomWalker< _TInputImage, _TLabelImage, _TCost, _TTraits >::
+GetOutputLabels( )
{
- return( this->GetInput( ) );
+ return( this->GetMarks( ) );
}
// -------------------------------------------------------------------------
-template< class _TInputImage, class _TInputLabels, class _TCostsImage, class _TTraits >
-void
-fpa::Filters::Image::RandomWalker< _TInputImage, _TInputLabels, _TCostsImage, _TTraits >::
-SetInputImage( TInputImage* image )
+template< class _TInputImage, class _TLabelImage, class _TCost, class _TTraits >
+const typename
+fpa::Filters::Image::RandomWalker< _TInputImage, _TLabelImage, _TCost, _TTraits >::
+TLabelImage*
+fpa::Filters::Image::RandomWalker< _TInputImage, _TLabelImage, _TCost, _TTraits >::
+GetOutputLabels( ) const
{
- this->SetInput( image );
+ return( this->GetMarks( ) );
}
// -------------------------------------------------------------------------
-template< class _TInputImage, class _TInputLabels, class _TCostsImage, class _TTraits >
-fpa::Filters::Image::RandomWalker< _TInputImage, _TInputLabels, _TCostsImage, _TTraits >::
+template< class _TInputImage, class _TLabelImage, class _TCost, class _TTraits >
+fpa::Filters::Image::RandomWalker< _TInputImage, _TLabelImage, _TCost, _TTraits >::
RandomWalker( )
: Superclass( )
{
- fpaFilterInputConfigureMacro( InputLabels, TInputLabels );
+ fpaFilterInputConfigureMacro( InputLabels, _TLabelImage );
}
// -------------------------------------------------------------------------
-template< class _TInputImage, class _TInputLabels, class _TCostsImage, class _TTraits >
-fpa::Filters::Image::RandomWalker< _TInputImage, _TInputLabels, _TCostsImage, _TTraits >::
+template< class _TInputImage, class _TLabelImage, class _TCost, class _TTraits >
+fpa::Filters::Image::RandomWalker< _TInputImage, _TLabelImage, _TCost, _TTraits >::
~RandomWalker( )
{
}
// -------------------------------------------------------------------------
-template< class _TInputImage, class _TInputLabels, class _TCostsImage, class _TTraits >
+template< class _TInputImage, class _TLabelImage, class _TCost, class _TTraits >
const itk::DataObject*
-fpa::Filters::Image::RandomWalker< _TInputImage, _TInputLabels, _TCostsImage, _TTraits >::
+fpa::Filters::Image::RandomWalker< _TInputImage, _TLabelImage, _TCost, _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$