]> Creatis software - FrontAlgorithms.git/blobdiff - lib/fpa/Filters/Image/RandomWalker.hxx
...
[FrontAlgorithms.git] / lib / fpa / Filters / Image / RandomWalker.hxx
index ef858b597acf65d177a826b7b1a678dd9d9b9d12..664e7d7e83710f8f9b2790ca520783b3a94438a4 100644 (file)
 #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$