]> Creatis software - clitk.git/blob - itk/clitkDecomposeThroughErosionImageFilter.h
3c9ceac3770b9f1531b858f21336f0bdc1cd9d4f
[clitk.git] / itk / clitkDecomposeThroughErosionImageFilter.h
1 #ifndef clitkDecomposeThroughErosionImageFilter_h
2 #define clitkDecomposeThroughErosionImageFilter_h
3
4 /* =================================================
5  * @file   clitkDecomposeThroughErosionImageFilter.h
6  * @author 
7  * @date   
8  * 
9  * @brief 
10  * 
11  ===================================================*/
12
13
14 // clitk include
15 #include "clitkIO.h"
16 #include "clitkCommon.h"
17 #include "clitkSetBackgroundImageFilter.h"
18
19 //itk include
20 #include "itkImageToImageFilter.h"
21 #include "itkBinaryThresholdImageFilter.h"
22 #include "itkBinaryErodeImageFilter.h"
23 #include "itkStatisticsImageFilter.h"
24 #include "itkConnectedComponentImageFilter.h"
25 #include "itkCastImageFilter.h"
26 #include "itkBinaryBallStructuringElement.h"
27 #include "itkRelabelComponentImageFilter.h"
28
29 namespace clitk 
30 {
31
32   template <class InputImageType, class OutputImageType>
33   class ITK_EXPORT DecomposeThroughErosionImageFilter :
34     public itk::ImageToImageFilter<InputImageType, OutputImageType>
35   {
36   public:
37     //----------------------------------------
38     // ITK
39     //----------------------------------------
40     typedef DecomposeThroughErosionImageFilter                                                 Self;
41     typedef itk::ImageToImageFilter<InputImageType, OutputImageType>  Superclass;
42     typedef itk::SmartPointer<Self>                                   Pointer;
43     typedef itk::SmartPointer<const Self>                             ConstPointer;
44    
45     // Method for creation through the object factory
46     itkNewMacro(Self);  
47
48     // Run-time type information (and related methods)
49     itkTypeMacro( DecomposeThroughErosionImageFilter, ImageToImageFilter );
50
51     /** Dimension of the domain space. */
52     itkStaticConstMacro(InputImageDimension, unsigned int, Superclass::InputImageDimension);
53     itkStaticConstMacro(OutputImageDimension, unsigned int, Superclass::OutputImageDimension);
54
55     //----------------------------------------
56     // Typedefs
57     //----------------------------------------
58     typedef typename OutputImageType::RegionType OutputImageRegionType;
59     typedef int InternalPixelType;
60     typedef typename InputImageType::PixelType InputPixelType;
61     typedef typename OutputImageType::PixelType OutputPixelType;
62     typedef typename InputImageType::SizeType SizeType;
63
64     //----------------------------------------
65     // Set & Get
66     //----------------------------------------    
67     itkBooleanMacro(Verbose);
68     itkSetMacro( Verbose, bool);
69     itkGetConstReferenceMacro( Verbose, bool);
70     itkBooleanMacro(FullyConnected);
71     itkSetMacro( FullyConnected, bool);
72     itkGetConstReferenceMacro( FullyConnected, bool);
73     itkSetMacro( Lower, InputPixelType);
74     itkGetConstMacro( Lower, InputPixelType);
75     itkSetMacro( Upper, InputPixelType);
76     itkGetConstMacro( Upper, InputPixelType);
77     itkSetMacro( Inside, InternalPixelType);
78     itkGetConstMacro( Inside, InternalPixelType);  
79     itkSetMacro( Outside, InternalPixelType);
80     itkGetConstMacro( Outside, InternalPixelType);  
81     itkSetMacro( ErosionPaddingValue, OutputPixelType);
82     itkGetConstMacro( ErosionPaddingValue, OutputPixelType);  
83     void SetRadius ( const SizeType& s){ m_Radius=s; this->Modified();}
84     SizeType GetRadius(void){return m_Radius;}
85     itkSetMacro( NumberOfNewLabels, unsigned int);
86     itkGetConstMacro( NumberOfNewLabels, unsigned int);
87     itkSetMacro( MinimumObjectSize, unsigned int);
88     itkGetConstMacro( MinimumObjectSize, unsigned int);
89     itkSetMacro( MinimumNumberOfIterations, unsigned int);
90     itkGetConstMacro( MinimumNumberOfIterations, unsigned int);
91
92   protected:
93
94     //----------------------------------------  
95     // Constructor & Destructor
96     //----------------------------------------  
97     DecomposeThroughErosionImageFilter();
98     ~DecomposeThroughErosionImageFilter() {};
99
100     //----------------------------------------  
101     // Update
102     //----------------------------------------  
103     // Generate Data
104     void GenerateData(void);
105     void AllocateOutput(){;}
106
107     //     // Threaded Generate Data
108     //     void BeforeThreadedGenerateData(void );
109     //     void ThreadedGenerateData(const OutputImageRegionType & outputRegionForThread, int threadId );
110     //     void AfterThreadedGenerateData(void );
111     //     // Override defaults
112     //     virtual void GenerateInputRequestedRegion();
113     //     virtual void GenerateOutputInformation (void);
114     //     virtual void EnlargeOutputRequestedRegion(DataObject *data);
115     //     void AllocateOutputs();
116     //----------------------------------------  
117     // Data members
118     //----------------------------------------
119     bool m_Verbose;
120     bool m_FullyConnected;
121     InputPixelType m_Lower;
122     InputPixelType m_Upper;
123     OutputPixelType m_ErosionPaddingValue;
124     InputPixelType m_Inside;
125     InputPixelType m_Outside;
126     SizeType m_Radius;
127     unsigned int m_NumberOfNewLabels;
128     unsigned int m_MinimumObjectSize;
129     unsigned int m_MinimumNumberOfIterations;
130
131   };
132
133
134 } // end namespace clitk
135
136 #ifndef ITK_MANUAL_INSTANTIATION
137 #include "clitkDecomposeThroughErosionImageFilter.txx"
138 #endif
139
140 #endif // #define clitkDecomposeThroughErosionImageFilter_h
141
142