]> Creatis software - FrontAlgorithms.git/blob - lib/fpa/Image/RegionGrowWithMultipleThresholds.h
409b18bb90895d8e65c4a70b303f604f6be3891e
[FrontAlgorithms.git] / lib / fpa / Image / RegionGrowWithMultipleThresholds.h
1 #ifndef __FPA__IMAGE__REGIONGROWWITHMULTIPLETHRESHOLDS__H__
2 #define __FPA__IMAGE__REGIONGROWWITHMULTIPLETHRESHOLDS__H__
3
4 #include <map>
5 #include <set>
6 #include <fpa/Image/RegionGrowWithMultipleCriteria.h>
7 #include <fpa/Image/Functors/RegionGrowThresholdFunction.h>
8
9 namespace fpa
10 {
11   namespace Image
12   {
13     /**
14      * @param I Input image type
15      */
16     template< class I >
17     class RegionGrowWithMultipleThresholds
18       : public RegionGrowWithMultipleCriteria< I >
19     {
20     public:
21       typedef RegionGrowWithMultipleThresholds    Self;
22       typedef RegionGrowWithMultipleCriteria< I > Superclass;
23       typedef itk::SmartPointer< Self >           Pointer;
24       typedef itk::SmartPointer< const Self >     ConstPointer;
25
26       typedef typename I::PixelType TPixel;
27
28       typedef std::map< TPixel, unsigned long >        THistogram;
29       typedef typename Superclass::TBaseAlgorithm      TBaseAlgorithm;
30       typedef typename Superclass::TMembershipFunction TMembershipFunction;
31       typedef typename Superclass::TFunctions          TFunctions;
32
33       typedef std::set< TPixel >                                   TThresholds;
34       typedef fpa::Image::Functors::RegionGrowThresholdFunction< I > TFunction;
35
36     protected:
37       typedef typename TBaseAlgorithm::_TNode _TNode;
38
39     public:
40       itkNewMacro( Self );
41       itkTypeMacro( RegionGrowWithMultipleThresholds, RegionGrow );
42
43       itkGetConstMacro( DifferenceThreshold, double );
44       itkSetMacro( DifferenceThreshold, double );
45
46     public:
47       void AddThreshold( const TPixel& v );
48       void AddThresholds(
49         const TPixel& t0,
50         const TPixel& t1,
51         const unsigned int& s
52         );
53
54     protected:
55       RegionGrowWithMultipleThresholds( );
56       virtual ~RegionGrowWithMultipleThresholds( );
57
58       virtual void _BeforeMainLoop( );
59       virtual void _AfterMainLoop( );
60       virtual void _AfterLoop( );
61       virtual bool _UpdateResult( _TNode& n );
62       virtual void _Mark( const _TNode& n );
63       virtual bool _CheckStopCondition( );
64
65     private:
66       RegionGrowWithMultipleThresholds( const Self& ); // Not impl.
67       void operator=( const Self& );                   // Not impl.
68
69     protected:
70       TThresholds m_Thresholds;
71       double m_DifferenceThreshold;
72       THistogram m_Histogram;
73       unsigned long m_TotalCount;
74       double m_LastDiff;
75       bool m_StopForced;
76       TPixel m_StopThreshold;
77     };
78
79   } // ecapseman
80
81 } // ecapseman
82
83 #include <fpa/Image/RegionGrowWithMultipleThresholds.hxx>
84
85 #endif // __FPA__IMAGE__REGIONGROWWITHMULTIPLETHRESHOLDS__H__
86
87 // eof - $RCSfile$