00001
00020 #ifndef INC_SPATMOD_IMAGEFILTERMORPHOLOGY_H
00021 #define INC_SPATMOD_IMAGEFILTERMORPHOLOGY_H
00022
00023 #ifndef INC_SPATMOD_IMAGEFILTER_H
00024 #include <spatmod/imagefilter.h>
00025 #endif
00026
00027 #ifndef INC_SPATMOD_IMAGEBUFFER_H
00028 #include <spatmod/imagebuffer.h>
00029 #endif
00030
00031 #ifndef INC_MI32_MIMATRIX_H
00032 #include <mi32/mimatrix.h>
00033 #endif
00034
00035 namespace SPATMOD {
00036 namespace IMAGE {
00037
00038
00039
00040 #if 0
00041 enum MORPHOLOGY_TYPE {
00042 TYPE_Dilation = 0,
00043 TYPE_Erosion,
00044 TYPE_Opening,
00045 TYPE_Closing,
00046 TYPE_HitMiss,
00047 TYPE_BoundExtract,
00048 TYPE_Fill,
00049 TYPE_Connected,
00050
00051 TYPE_ConvexHull,
00052 TYPE_Thin,
00053 TYPE_Thick,
00054 TYPE_Skeleton,
00055 TYPE_Prune,
00056
00057 TYPE_Clump,
00058 TYPE_Sieve,
00059
00060 TYPE_Difference,
00061 TYPE_Intersection,
00062 TYPE_Compliment
00063 };
00064 #endif
00065
00069 class FILTER_MORPHOLOGY : public FILTER {
00070 public:
00071
00073 enum SHAPE {
00074 SHAPE_ShortLine = 0,
00075 SHAPE_Diagonal,
00076 SHAPE_LongLine,
00077 SHAPE_Plus,
00078 SHAPE_Square,
00079 SHAPE_Tee
00080 };
00081
00083 enum ROTATION {
00084 ROTATION_0 = 0,
00085 ROTATION_90 = 90,
00086 ROTATION_180 = 180,
00087 ROTATION_270 = 270
00088 };
00089
00091 virtual ~FILTER_MORPHOLOGY ();
00092
00093 static void BuildElementMatrix (
00094 MIMATRIX& matrix,
00095 INT32 NumRows,
00096 INT32 NumCols,
00097 SHAPE shape,
00098 double OnValue,
00099 double OffValue = 0.0,
00100 ROTATION rotation = ROTATION_0
00101 );
00102
00107 void SetElementMatrix (
00108 const MIMATRIX& matrix
00109 ) { m_Matrix = matrix; }
00110
00115 void SetElementMatrix (
00116 INT32 NumRows,
00117 INT32 NumCols,
00118 SHAPE shape,
00119 double OnValue,
00120 double OffValue = 0.0,
00121 ROTATION rotation = ROTATION_0
00122 ) { BuildElementMatrix(m_Matrix, NumRows, NumCols, shape, OnValue, OffValue, rotation); }
00123
00124 protected:
00125
00127 FILTER_MORPHOLOGY (
00128 STAGE *pInputStage,
00129 bool TakeOwnership
00130 );
00131
00132 const MIMATRIX& GetMatrix (
00133 ) const { return m_Matrix; }
00134
00135
00136
00137 private:
00138 #ifndef GENERATING_DOXYGEN_OUTPUT
00139
00140
00141 FILTER_MORPHOLOGY (const FILTER_MORPHOLOGY&);
00142 FILTER_MORPHOLOGY& operator= (const FILTER_MORPHOLOGY&);
00143
00144 MIMATRIX m_Matrix;
00145 #endif // GENERATING_DOXYGEN_OUTPUT
00146
00147 };
00148
00152 class FILTER_MORPHOLOGY_DILATION : public FILTER_MORPHOLOGY {
00153 public:
00154
00156 FILTER_MORPHOLOGY_DILATION (
00157 STAGE *pInputStage,
00158 bool TakeOwnership
00159 );
00160
00162 virtual ~FILTER_MORPHOLOGY_DILATION ();
00163
00164 protected:
00165
00166
00167
00168 virtual ERRVALUE v_Initialize ();
00169
00170 virtual ERRVALUE v_PullBegin (const SECTION_ITERATOR& iterator);
00171
00172 virtual ERRVALUE v_PullSubSection (const SECTION& section, BUFFER& target);
00173
00174 private:
00175 #ifndef GENERATING_DOXYGEN_OUTPUT
00176
00177
00178 FILTER_MORPHOLOGY_DILATION (const FILTER_MORPHOLOGY_DILATION&);
00179 FILTER_MORPHOLOGY_DILATION& operator= (const FILTER_MORPHOLOGY_DILATION&);
00180
00181 SAMPLEITERATOR* m_itInput;
00182 SIMPLE_ARRAY<UINT8*> m_pValidInput;
00183 SIMPLE_ARRAY<const UINT8*> m_pInput;
00184 #endif // GENERATING_DOXYGEN_OUTPUT
00185
00186 };
00187
00191 class FILTER_MORPHOLOGY_EROSION : public FILTER_MORPHOLOGY {
00192 public:
00193
00195 FILTER_MORPHOLOGY_EROSION (
00196 STAGE *pInputStage,
00197 bool TakeOwnership
00198 );
00199
00201 virtual ~FILTER_MORPHOLOGY_EROSION ();
00202
00203 protected:
00204
00205
00206
00207 virtual ERRVALUE v_Initialize ();
00208
00209 virtual ERRVALUE v_PullBegin (const SECTION_ITERATOR& iterator);
00210
00211 virtual ERRVALUE v_PullSubSection (const SECTION& section, BUFFER& target);
00212
00213 private:
00214 #ifndef GENERATING_DOXYGEN_OUTPUT
00215
00216
00217 FILTER_MORPHOLOGY_EROSION (const FILTER_MORPHOLOGY_EROSION&);
00218 FILTER_MORPHOLOGY_EROSION& operator= (const FILTER_MORPHOLOGY_EROSION&);
00219
00220 SAMPLEITERATOR* m_itInput;
00221 SIMPLE_ARRAY<UINT8*> m_pValidInput;
00222 SIMPLE_ARRAY<const UINT8*> m_pInput;
00223 #endif // GENERATING_DOXYGEN_OUTPUT
00224
00225 };
00226
00231 class FILTER_MORPHOLOGY_OPENING : public FILTER_MORPHOLOGY {
00232 public:
00233
00235 FILTER_MORPHOLOGY_OPENING (
00236 STAGE *pInputStage,
00237 bool TakeOwnership
00238 );
00239
00241 virtual ~FILTER_MORPHOLOGY_OPENING ();
00242
00243 protected:
00244
00245
00246
00247 virtual ERRVALUE v_Initialize ();
00248
00249 virtual ERRVALUE v_PullSubSection (const SECTION& section, BUFFER& target);
00250
00251 private:
00252 #ifndef GENERATING_DOXYGEN_OUTPUT
00253
00254
00255 FILTER_MORPHOLOGY_OPENING (const FILTER_MORPHOLOGY_OPENING&);
00256 FILTER_MORPHOLOGY_OPENING& operator= (const FILTER_MORPHOLOGY_OPENING&);
00257
00258 MIMATRIX m_Matrix;
00259 #endif // GENERATING_DOXYGEN_OUTPUT
00260
00261 };
00262
00263
00268 class FILTER_MORPHOLOGY_CLOSING : public FILTER_MORPHOLOGY {
00269 public:
00270
00272 FILTER_MORPHOLOGY_CLOSING (
00273 STAGE *pInputStage,
00274 bool TakeOwnership
00275 );
00276
00278 virtual ~FILTER_MORPHOLOGY_CLOSING ();
00279
00280 protected:
00281
00282
00283
00284 virtual ERRVALUE v_Initialize ();
00285
00286 virtual ERRVALUE v_PullSubSection (const SECTION& section, BUFFER& target);
00287
00288 private:
00289 #ifndef GENERATING_DOXYGEN_OUTPUT
00290
00291
00292 FILTER_MORPHOLOGY_CLOSING (const FILTER_MORPHOLOGY_CLOSING&);
00293 FILTER_MORPHOLOGY_CLOSING& operator= (const FILTER_MORPHOLOGY_CLOSING&);
00294
00295 MIMATRIX m_Matrix;
00296 #endif // GENERATING_DOXYGEN_OUTPUT
00297
00298 };
00299
00300
00301
00302 }
00303 }
00304
00305 #endif // INC_SPATMOD_IMAGEFILTERMORPHOLOGY_H
00306