--- /dev/null
+// =========================================================================
+// @author Leonardo Florez Valencia
+// @email florez-l@javeriana.edu.co
+// =========================================================================
+#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
+fpa::Filters::Image::RandomWalker< _TInputImage, _TInputLabels, _TCostsImage, _TTraits >::
+TCostsImage*
+fpa::Filters::Image::RandomWalker< _TInputImage, _TInputLabels, _TCostsImage, _TTraits >::
+GetOutputCosts( )
+{
+ return( this->GetOutput( ) );
+}
+
+// -------------------------------------------------------------------------
+template< class _TInputImage, class _TInputLabels, class _TCostsImage, class _TTraits >
+const typename
+fpa::Filters::Image::RandomWalker< _TInputImage, _TInputLabels, _TCostsImage, _TTraits >::
+TCostsImage*
+fpa::Filters::Image::RandomWalker< _TInputImage, _TInputLabels, _TCostsImage, _TTraits >::
+GetOutputCosts( ) const
+{
+ return( this->GetOutput( ) );
+}
+
+// -------------------------------------------------------------------------
+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( )
+{
+ return( this->GetMarks( ) );
+}
+
+// -------------------------------------------------------------------------
+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
+{
+ return( this->GetMarks( ) );
+}
+
+// -------------------------------------------------------------------------
+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( )
+{
+ return( this->GetInput( ) );
+}
+
+// -------------------------------------------------------------------------
+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
+{
+ return( this->GetInput( ) );
+}
+
+// -------------------------------------------------------------------------
+template< class _TInputImage, class _TInputLabels, class _TCostsImage, class _TTraits >
+void
+fpa::Filters::Image::RandomWalker< _TInputImage, _TInputLabels, _TCostsImage, _TTraits >::
+SetInputImage( TInputImage* image )
+{
+ this->SetInput( image );
+}
+
+// -------------------------------------------------------------------------
+template< class _TInputImage, class _TInputLabels, class _TCostsImage, class _TTraits >
+fpa::Filters::Image::RandomWalker< _TInputImage, _TInputLabels, _TCostsImage, _TTraits >::
+RandomWalker( )
+ : Superclass( )
+{
+ fpaFilterInputConfigureMacro( InputLabels, TInputLabels );
+}
+
+// -------------------------------------------------------------------------
+template< class _TInputImage, class _TInputLabels, class _TCostsImage, class _TTraits >
+fpa::Filters::Image::RandomWalker< _TInputImage, _TInputLabels, _TCostsImage, _TTraits >::
+~RandomWalker( )
+{
+}
+
+// -------------------------------------------------------------------------
+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$