]> Creatis software - FrontAlgorithms.git/blobdiff - lib/fpa/Image/Algorithm.hxx
...
[FrontAlgorithms.git] / lib / fpa / Image / Algorithm.hxx
index 98592f63d21c375268ff7d1e5fa68ae56f2dd550..43ebeb0af9da0affc72c892300b2d5ee6e7b3f9d 100644 (file)
@@ -7,11 +7,9 @@
 #define __fpa__Image__Algorithm__hxx__
 
 // -------------------------------------------------------------------------
-template< class _TInputImage, class _TOutputImage, class _TMarksInterface, class _TSeedsInterface >
-typename
-fpa::Image::Algorithm< _TInputImage, _TOutputImage, _TMarksInterface, _TSeedsInterface >::
-TMarks*
-fpa::Image::Algorithm< _TInputImage, _TOutputImage, _TMarksInterface, _TSeedsInterface >::
+template< class _TTraits >
+typename fpa::Image::Algorithm< _TTraits >::TMarks*
+fpa::Image::Algorithm< _TTraits >::
 GetMarks( )
 {
   return(
@@ -22,11 +20,9 @@ GetMarks( )
 }
 
 // -------------------------------------------------------------------------
-template< class _TInputImage, class _TOutputImage, class _TMarksInterface, class _TSeedsInterface >
-const typename
-fpa::Image::Algorithm< _TInputImage, _TOutputImage, _TMarksInterface, _TSeedsInterface >::
-TMarks*
-fpa::Image::Algorithm< _TInputImage, _TOutputImage, _TMarksInterface, _TSeedsInterface >::
+template< class _TTraits >
+const typename fpa::Image::Algorithm< _TTraits >::TMarks*
+fpa::Image::Algorithm< _TTraits >::
 GetMarks( ) const
 {
   return(
@@ -37,8 +33,8 @@ GetMarks( ) const
 }
 
 // -------------------------------------------------------------------------
-template< class _TInputImage, class _TOutputImage, class _TMarksInterface, class _TSeedsInterface >
-fpa::Image::Algorithm< _TInputImage, _TOutputImage, _TMarksInterface, _TSeedsInterface >::
+template< class _TTraits >
+fpa::Image::Algorithm< _TTraits >::
 Algorithm( )
   : Superclass( ),
     m_NeigborhoodOrder( 1 )
@@ -49,22 +45,21 @@ Algorithm( )
 }
 
 // -------------------------------------------------------------------------
-template< class _TInputImage, class _TOutputImage, class _TMarksInterface, class _TSeedsInterface >
-fpa::Image::Algorithm< _TInputImage, _TOutputImage, _TMarksInterface, _TSeedsInterface >::
+template< class _TTraits >
+fpa::Image::Algorithm< _TTraits >::
 ~Algorithm( )
 {
 }
 
 // -------------------------------------------------------------------------
-template< class _TInputImage, class _TOutputImage, class _TMarksInterface, class _TSeedsInterface >
-typename
-fpa::Image::Algorithm< _TInputImage, _TOutputImage, _TMarksInterface, _TSeedsInterface >::
-TNodes fpa::Image::Algorithm< _TInputImage, _TOutputImage, _TMarksInterface, _TSeedsInterface >::
+template< class _TTraits >
+typename fpa::Image::Algorithm< _TTraits >::TNodes
+fpa::Image::Algorithm< _TTraits >::
 _UnifySeeds( )
 {
   const TInputImage* input = this->GetInput( );
   typename TInputImage::RegionType region = input->GetRequestedRegion( );
-  TSeeds seeds = this->GetSeeds( );
+  TSeeds& seeds = this->GetSeeds( );
   TNodes nodes;
 
   typename TSeeds::iterator sIt = seeds.begin( );
@@ -80,21 +75,23 @@ _UnifySeeds( )
       sIt->IsUnified = true;
       node.Vertex = sIt->Vertex;
       node.Parent = node.Vertex;
-      node.FrontId = nodes.size( ) + 1;
+      if( sIt->FrontId == 0 )
+        node.FrontId = nodes.size( ) + 1;
+      else
+        node.FrontId = sIt->FrontId;
       nodes.insert( node );
     }
     else
       sIt->IsUnified = false;
-      
+
   } // rof
 
   return( nodes );
 }
 
 // -------------------------------------------------------------------------
-template< class _TInputImage, class _TOutputImage, class _TMarksInterface, class _TSeedsInterface >
-void
-fpa::Image::Algorithm< _TInputImage, _TOutputImage, _TMarksInterface, _TSeedsInterface >::
+template< class _TTraits >
+void fpa::Image::Algorithm< _TTraits >::
 _ConfigureOutput( const TOutputValue& v )
 {
   const TInputImage* in = this->GetInput( );
@@ -121,10 +118,9 @@ _ConfigureOutput( const TOutputValue& v )
 }
 
 // -------------------------------------------------------------------------
-template< class _TInputImage, class _TOutputImage, class _TMarksInterface, class _TSeedsInterface >
-typename
-fpa::Image::Algorithm< _TInputImage, _TOutputImage, _TMarksInterface, _TSeedsInterface >::
-TNeighborhood fpa::Image::Algorithm< _TInputImage, _TOutputImage, _TMarksInterface, _TSeedsInterface >::
+template< class _TTraits >
+typename fpa::Image::Algorithm< _TTraits >::TNeighborhood
+fpa::Image::Algorithm< _TTraits >::
 _GetNeighbors( const TVertex& v ) const
 {
   typename TInputImage::RegionType region =
@@ -154,61 +150,53 @@ _GetNeighbors( const TVertex& v ) const
 }
 
 // -------------------------------------------------------------------------
-template< class _TInputImage, class _TOutputImage, class _TMarksInterface, class _TSeedsInterface >
-typename
-fpa::Image::Algorithm< _TInputImage, _TOutputImage, _TMarksInterface, _TSeedsInterface >::
-TInputValue
-fpa::Image::Algorithm< _TInputImage, _TOutputImage, _TMarksInterface, _TSeedsInterface >::
+template< class _TTraits >
+typename fpa::Image::Algorithm< _TTraits >::TInputValue
+fpa::Image::Algorithm< _TTraits >::
 _GetInputValue( const TVertex& v ) const
 {
   return( this->GetInput( )->GetPixel( v ) );
 }
 
 // -------------------------------------------------------------------------
-template< class _TInputImage, class _TOutputImage, class _TMarksInterface, class _TSeedsInterface >
-typename
-fpa::Image::Algorithm< _TInputImage, _TOutputImage, _TMarksInterface, _TSeedsInterface >::
-TOutputValue fpa::Image::Algorithm< _TInputImage, _TOutputImage, _TMarksInterface, _TSeedsInterface >::
+template< class _TTraits >
+typename fpa::Image::Algorithm< _TTraits >::TOutputValue
+fpa::Image::Algorithm< _TTraits >::
 _GetOutputValue( const TVertex& v ) const
 {
   return( this->GetOutput( )->GetPixel( v ) );
 }
 
 // -------------------------------------------------------------------------
-template< class _TInputImage, class _TOutputImage, class _TMarksInterface, class _TSeedsInterface >
-void
-fpa::Image::Algorithm< _TInputImage, _TOutputImage, _TMarksInterface, _TSeedsInterface >::
-_UpdateOutputValue( const TNode& n )
+template< class _TTraits >
+void fpa::Image::Algorithm< _TTraits >::
+_UpdateOutputValue( TNode& n )
 {
   this->GetOutput( )->SetPixel( n.Vertex, n.Value );
 }
 
 // -------------------------------------------------------------------------
-template< class _TInputImage, class _TOutputImage, class _TMarksInterface, class _TSeedsInterface >
-bool
-fpa::Image::Algorithm< _TInputImage, _TOutputImage, _TMarksInterface, _TSeedsInterface >::
+template< class _TTraits >
+bool fpa::Image::Algorithm< _TTraits >::
 _IsMarked( const TVertex& v ) const
 {
   return( this->GetMarks( )->GetPixel( v ) > 0 );
 }
 
 // -------------------------------------------------------------------------
-template< class _TInputImage, class _TOutputImage, class _TMarksInterface, class _TSeedsInterface >
-unsigned long
-fpa::Image::Algorithm< _TInputImage, _TOutputImage, _TMarksInterface, _TSeedsInterface >::
+template< class _TTraits >
+unsigned long fpa::Image::Algorithm< _TTraits >::
 _GetMark( const TVertex& v ) const
 {
   return( ( unsigned long )( this->GetMarks( )->GetPixel( v ) ) );
 }
 
 // -------------------------------------------------------------------------
-template< class _TInputImage, class _TOutputImage, class _TMarksInterface, class _TSeedsInterface >
-bool
-fpa::Image::Algorithm< _TInputImage, _TOutputImage, _TMarksInterface, _TSeedsInterface >::
+template< class _TTraits >
+void fpa::Image::Algorithm< _TTraits >::
 _Mark( const TVertex& v, unsigned long frontId )
 {
   this->GetMarks( )->SetPixel( v, TFrontId( frontId ) );
-  return( true );
 }
 
 #endif // __fpa__Image__Algorithm__hxx__