]> Creatis software - FrontAlgorithms.git/commitdiff
...
authorLeonardo Flórez-Valencia <florez-l@javeriana.edu.co>
Thu, 6 Jul 2017 16:46:36 +0000 (11:46 -0500)
committerLeonardo Flórez-Valencia <florez-l@javeriana.edu.co>
Thu, 6 Jul 2017 16:46:36 +0000 (11:46 -0500)
lib/fpa/Base/Algorithm.h
lib/fpa/Base/Algorithm.hxx
lib/fpa/Base/MarksInterface.h
lib/fpa/Base/Mori.h
lib/fpa/Base/Mori.hxx
lib/fpa/Base/RegionGrow.h
lib/fpa/Base/RegionGrow.hxx
lib/fpa/Image/Algorithm.h
lib/fpa/Image/Algorithm.hxx
tests/image/RegionGrow_Tautology.cxx

index 43f7a08c647fc9de4a77f37d21330d7e388aaf0e..5a02d6ebc2e0843a0e6d0bdb1132983c3c22a173 100644 (file)
@@ -99,8 +99,8 @@ namespace fpa
       virtual TInputValue _GetInputValue( const TVertex& v ) const = 0;
       virtual TOutputValue _GetOutputValue( const TVertex& v ) const = 0;
 
-      virtual bool _ComputeOutputValue( TNode& n ) = 0;
-      virtual void _UpdateOutputValue( const TNode& n ) = 0;
+      virtual void _ComputeOutputValue( TNode& n ) = 0;
+      virtual void _UpdateOutputValue( TNode& n ) = 0;
       virtual void _QueueClear( ) = 0;
       virtual void _QueuePush( const TNode& node ) = 0;
       virtual unsigned long _QueueSize( ) const = 0;
index 3a8b2d04aca27f44155f6112afc7575be1308bef..26729aaa37e77fdad63c16d4d207fa7bf66e9ba7 100644 (file)
@@ -139,12 +139,13 @@ GenerateData( )
     this->InvokeEvent( TEvent( node.Vertex, node.FrontId, false ) );
     if( !( this->_IsMarked( node.Vertex ) ) )
     {
-      // Mark it
-      if( this->_Mark( node.Vertex, node.FrontId ) )
-      {
-        // Update output value
-        this->_UpdateOutputValue( node );
+      // Update output value and mark vertex
+      this->_UpdateOutputValue( node );
+      this->_Mark( node.Vertex, node.FrontId );
 
+      // The actual node was effectively marked?
+      if( node.FrontId > 0 )
+      {
         // Add neighborhood
         TNeighborhood neighbors = this->_GetNeighbors( node.Vertex );
         typename TNeighborhood::const_iterator nIt = neighbors.begin( );
@@ -167,12 +168,9 @@ GenerateData( )
             nnode.Vertex = *nIt;
             nnode.Parent = node.Vertex;
             nnode.FrontId = node.FrontId;
-            if( this->_ComputeOutputValue( nnode ) )
-            {
-              this->_QueuePush( nnode );
-              this->InvokeEvent( TEvent( nnode.Vertex, nnode.FrontId, true ) );
-
-            } // fi
+            this->_ComputeOutputValue( nnode );
+            this->_QueuePush( nnode );
+            this->InvokeEvent( TEvent( nnode.Vertex, nnode.FrontId, true ) );
 
           } // fi
           ++nIt;
index 3b9976571ee0d1a543c97d6786133566f3fd2928..96444575d59e50bbbf27b1fa47752f6f8bc01669 100644 (file)
@@ -27,7 +27,7 @@ namespace fpa
 
       virtual bool _IsMarked( const TVertex& v ) const = 0;
       virtual unsigned long _GetMark( const TVertex& v ) const = 0;
-      virtual bool _Mark( const TVertex& v, unsigned long frontId ) = 0;
+      virtual void _Mark( const TVertex& v, unsigned long frontId ) = 0;
 
       virtual void _InitMarks( unsigned long nSeeds );
       virtual bool _Collisions( const TVertex& a, const TVertex& b );
index 6863278c7afe939f9c84c8af8538327bf86709f0..ef8d7cc475d7e286e2392b394bbd6c7dcb494f76 100644 (file)
@@ -72,7 +72,8 @@ namespace fpa
       virtual void _BeforeGenerateData( ) override;
       virtual void _AfterGenerateData( ) override;
       virtual void _FinishOneLoop( ) override;
-      virtual bool _ComputeOutputValue( TNode& n ) override;
+      virtual void _ComputeOutputValue( TNode& n ) override;
+      virtual void _UpdateOutputValue( TNode& n ) override;
       virtual void _QueueClear( ) override;
       virtual TNode _QueuePop( ) override;
       virtual void _QueuePush( const TNode& node ) override;
index f0141448ef11996a484e35fe68201d0c6b8dcbb2..548d755983b58756b471339c92f842444e10814a 100644 (file)
@@ -114,7 +114,6 @@ _AfterGenerateData( )
     std::cout << int( sIt->first ) << " " << int( sIt->second.first ) << " " << sIt->second.second << std::endl;
 
   } // rof
-  std::cerr << ( this->m_CurrentThreshold != this->m_Thresholds.end( ) ) << std::endl;
 }
 
 // -------------------------------------------------------------------------
@@ -126,7 +125,6 @@ _FinishOneLoop( )
   {
     this->m_Signal[ this->m_Signal.size( ) + 1 ] =
       TSignalData( *this->m_CurrentThreshold, this->m_Count );
-    std::cerr << *( this->m_CurrentThreshold ) << std::endl;
     this->m_CurrentThreshold++;
     this->m_CurrentQueue = ( this->m_CurrentQueue + 1 ) % 2;
     if( this->m_CurrentThreshold != this->m_Thresholds.end( ) )
@@ -142,22 +140,35 @@ _FinishOneLoop( )
 
 // -------------------------------------------------------------------------
 template< class _TAlgorithm >
-bool fpa::Base::Mori< _TAlgorithm >::
+void fpa::Base::Mori< _TAlgorithm >::
 _ComputeOutputValue( TNode& n )
+{
+  // Do nothing!!!
+}
+
+// -------------------------------------------------------------------------
+template< class _TAlgorithm >
+void fpa::Base::Mori< _TAlgorithm >::
+_UpdateOutputValue( TNode& n )
 {
   TInputValue value = this->_GetInputValue( n.Vertex );
   bool inside = this->m_Predicate->Evaluate( value );
-  n.Value = this->m_InsideValue;
   if( !inside )
   {
+    n.Value = this->m_InitValue;
     n.FrontId++;
     this->m_Queues[ ( this->m_CurrentQueue + 1 ) % 2 ].push_back( n );
+    n.FrontId = 0;
   }
   else
+  {
+    n.Value = this->m_InsideValue;
     this->m_Count++;
-  return( inside );
+
+  } // fi
+  this->Superclass::_UpdateOutputValue( n );
 }
-  
+
 // -------------------------------------------------------------------------
 template< class _TAlgorithm >
 void fpa::Base::Mori< _TAlgorithm >::
@@ -201,7 +212,7 @@ _PrepareSeeds( TNodes& nodes )
 {
   typename TNodes::iterator nIt = nodes.begin( );
   for( ; nIt != nodes.end( ); ++nIt )
-    nIt->Value = this->m_InsideValue;
+    nIt->Value = this->m_InitValue;
 }
 
 #endif // __fpa__Base__Mori__hxx__
index 28657d6614f371b971f969078993b886ac536dca..8d7439f74e8a6e065e9730e17588445b01885572 100644 (file)
@@ -63,7 +63,8 @@ namespace fpa
       RegionGrow( );
       virtual ~RegionGrow( );
 
-      virtual bool _ComputeOutputValue( TNode& n ) override;
+      virtual void _ComputeOutputValue( TNode& n ) override;
+      virtual void _UpdateOutputValue( TNode& n ) override;
       virtual void _QueueClear( ) override;
       virtual TNode _QueuePop( ) override;
       virtual void _QueuePush( const TNode& node ) override;
index 503222c1fc7d9ec6f6c770d7ba74dfd764f6f66a..bf0a862e23b36ee15e3bb512003c4d8f35a44245 100644 (file)
@@ -90,8 +90,16 @@ fpa::Base::RegionGrow< _TAlgorithm >::
 
 // -------------------------------------------------------------------------
 template< class _TAlgorithm >
-bool fpa::Base::RegionGrow< _TAlgorithm >::
+void fpa::Base::RegionGrow< _TAlgorithm >::
 _ComputeOutputValue( TNode& n )
+{
+  // Do nothing!!!
+}
+
+// -------------------------------------------------------------------------
+template< class _TAlgorithm >
+void fpa::Base::RegionGrow< _TAlgorithm >::
+_UpdateOutputValue( TNode& n )
 {
   TInputValue value = this->_GetInputValue( n.Vertex );
   bool inside = false;
@@ -99,8 +107,14 @@ _ComputeOutputValue( TNode& n )
     inside = this->m_ValuePredicate->Evaluate( value );
   if( this->m_VertexPredicate.IsNotNull( ) )
     inside &= this->m_VertexPredicate->Evaluate( n.Vertex );
-  n.Value = ( inside )? this->m_InsideValue: this->m_InitValue;
-  return( inside );
+  if( !inside )
+  {
+    n.Value = this->m_InitValue;
+    n.FrontId = 0;
+  }
+  else
+    n.Value = this->m_InsideValue;
+  this->Superclass::_UpdateOutputValue( n );
 }
 
 // -------------------------------------------------------------------------
@@ -145,7 +159,7 @@ _PrepareSeeds( TNodes& nodes )
 {
   typename TNodes::iterator nIt = nodes.begin( );
   for( ; nIt != nodes.end( ); ++nIt )
-    nIt->Value = this->m_InsideValue;
+    nIt->Value = this->m_InitValue;
 }
 
 #endif // __fpa__Base__RegionGrow__hxx__
index 12a2f9140994434a9ac85ef1c2b4854f81b5fdc5..58dc5eee8c1649e1fd5bba48bc623036593d6e19 100644 (file)
@@ -64,10 +64,10 @@ namespace fpa
       virtual TNeighborhood _GetNeighbors( const TVertex& v ) const override;
       virtual TInputValue _GetInputValue( const TVertex& v ) const override;
       virtual TOutputValue _GetOutputValue( const TVertex& v ) const override;
-      virtual void _UpdateOutputValue( const TNode& n ) override;
+      virtual void _UpdateOutputValue( TNode& n ) override;
       virtual bool _IsMarked( const TVertex& v ) const override;
       virtual unsigned long _GetMark( const TVertex& v ) const override;
-      virtual bool _Mark( const TVertex& v, unsigned long frontId ) override;
+      virtual void _Mark( const TVertex& v, unsigned long frontId ) override;
 
     private:
       // Purposely not implemented.
index a94f13130a128e20cc7619aede6c215c88af6f64..ba3497f738629f57f09e381616353650b44eb9ac 100644 (file)
@@ -181,7 +181,7 @@ _GetOutputValue( const TVertex& v ) const
 template< class _TInputImage, class _TOutputImage, class _TMarksInterface, class _TSeedsInterface >
 void
 fpa::Image::Algorithm< _TInputImage, _TOutputImage, _TMarksInterface, _TSeedsInterface >::
-_UpdateOutputValue( const TNode& n )
+_UpdateOutputValue( TNode& n )
 {
   this->GetOutput( )->SetPixel( n.Vertex, n.Value );
 }
@@ -206,12 +206,11 @@ _GetMark( const TVertex& v ) const
 
 // -------------------------------------------------------------------------
 template< class _TInputImage, class _TOutputImage, class _TMarksInterface, class _TSeedsInterface >
-bool
+void
 fpa::Image::Algorithm< _TInputImage, _TOutputImage, _TMarksInterface, _TSeedsInterface >::
 _Mark( const TVertex& v, unsigned long frontId )
 {
   this->GetMarks( )->SetPixel( v, TFrontId( frontId ) );
-  return( true );
 }
 
 #endif // __fpa__Image__Algorithm__hxx__
index d19969b735bb7a034066f9ff9e8fd5895ed43ceb..db60d0a726f9031ff61149d092fcc57d41fa4f9c 100644 (file)
@@ -44,7 +44,7 @@ int main( int argc, char* argv[] )
   filter->SetOutsideValue( 0 );
 
   // Get all seeds
-  for( int i = 6; i < argc; i += 2 )
+  for( int i = 5; i < argc; i += 2 )
   {
     if( i + 1 < argc )
     {