]> Creatis software - FrontAlgorithms.git/blobdiff - lib/fpa/Image/RegionGrowWithMultipleThresholds.h
...
[FrontAlgorithms.git] / lib / fpa / Image / RegionGrowWithMultipleThresholds.h
index 11066fe6027eab286e91848eaa7476cb5aa4deb6..f538e7bb49734f4bcbf9508a5e404269982bc211 100644 (file)
@@ -2,7 +2,9 @@
 #define __FPA__IMAGE__REGIONGROWWITHMULTIPLETHRESHOLDS__H__
 
 #include <map>
-#include <fpa/Image/RegionGrow.h>
+#include <set>
+#include <fpa/Image/RegionGrowWithMultipleCriteria.h>
+#include <fpa/Image/Functors/RegionGrowThresholdFunction.h>
 
 namespace fpa
 {
@@ -13,18 +15,23 @@ namespace fpa
      */
     template< class I >
     class RegionGrowWithMultipleThresholds
-      : public RegionGrow< I >
+      : public RegionGrowWithMultipleCriteria< I >
     {
     public:
-      typedef RegionGrowWithMultipleThresholds Self;
-      typedef RegionGrow< I >                  Superclass;
-      typedef itk::SmartPointer< Self >        Pointer;
-      typedef itk::SmartPointer< const Self >  ConstPointer;
+      typedef RegionGrowWithMultipleThresholds    Self;
+      typedef RegionGrowWithMultipleCriteria< I > Superclass;
+      typedef itk::SmartPointer< Self >           Pointer;
+      typedef itk::SmartPointer< const Self >     ConstPointer;
 
       typedef typename I::PixelType TPixel;
 
-      typedef std::map< TPixel, unsigned long > THistogram;
-      typedef typename Superclass::TBaseAlgorithm TBaseAlgorithm;
+      typedef std::map< TPixel, unsigned long >        THistogram;
+      typedef typename Superclass::TBaseAlgorithm      TBaseAlgorithm;
+      typedef typename Superclass::TMembershipFunction TMembershipFunction;
+      typedef typename Superclass::TFunctions          TFunctions;
+
+      typedef std::set< TPixel >                                   TThresholds;
+      typedef fpa::Image::Functors::RegionGrowThresholdFunction< I > TFunction;
 
     protected:
       typedef typename TBaseAlgorithm::_TNode _TNode;
@@ -33,37 +40,56 @@ namespace fpa
       itkNewMacro( Self );
       itkTypeMacro( RegionGrowWithMultipleThresholds, RegionGrow );
 
-      itkGetConstMacro( DerivativeThreshold, double );
-      itkSetMacro( DerivativeThreshold, double );
+      itkGetConstMacro( InsideValue, TPixel );
+      itkGetConstMacro( OutsideValue, TPixel );
+      itkGetConstMacro( DifferenceThreshold, double );
+
+      itkSetMacro( InsideValue, TPixel );
+      itkSetMacro( OutsideValue, TPixel );
+      itkSetMacro( DifferenceThreshold, double );
 
     public:
       void AddThreshold( const TPixel& v );
       void AddThresholds(
-        const TPixel& t0, const TPixel& t1,
-        const unsigned int& samples
+        const TPixel& t0,
+        const TPixel& t1,
+        const unsigned int& s
         );
 
     protected:
       RegionGrowWithMultipleThresholds( );
       virtual ~RegionGrowWithMultipleThresholds( );
 
-      virtual bool _UpdateResult( _TNode& n );
+      virtual void _BeforeMainLoop( );
+      virtual void _AfterMainLoop( );
       virtual void _AfterLoop( );
+      virtual bool _UpdateResult( _TNode& n );
+      virtual void _Mark( const _TNode& n );
+      virtual bool _CheckStopCondition( );
 
     private:
       RegionGrowWithMultipleThresholds( const Self& ); // Not impl.
       void operator=( const Self& );                   // Not impl.
 
     protected:
-      double m_DerivativeThreshold;
+      TThresholds m_Thresholds;
+      TPixel m_InsideValue;
+      TPixel m_OutsideValue;
+      double m_DifferenceThreshold;
       THistogram m_Histogram;
+      unsigned long m_TotalCount;
+      double m_LastDiff;
+      bool m_StopForced;
+      TPixel m_StopThreshold;
     };
 
   } // ecapseman
 
 } // ecapseman
 
+#ifndef ITK_MANUAL_INSTANTIATION
 #include <fpa/Image/RegionGrowWithMultipleThresholds.hxx>
+#endif // ITK_MANUAL_INSTANTIATION
 
 #endif // __FPA__IMAGE__REGIONGROWWITHMULTIPLETHRESHOLDS__H__