00001
00030 #ifndef INC_SPATMOD_IMAGEFILTERFUSION_H
00031 #define INC_SPATMOD_IMAGEFILTERFUSION_H
00032
00033 #ifndef INC_SPATMOD_IMAGEFILTER_H
00034 #include <spatmod/imagefilter.h>
00035 #endif
00036
00037 #ifndef INC_SPATMOD_IMAGEBUFFER_H
00038 #include <spatmod/imagebuffer.h>
00039 #endif
00040
00041 class MIMATRIX;
00042
00043 namespace SPATMOD {
00044 namespace IMAGE {
00045
00046
00047
00055 class FILTER_FUSION : public FILTER {
00056 public:
00057
00058
00059 virtual ~FILTER_FUSION ();
00060
00061 protected:
00062
00064 FILTER_FUSION (
00065 STAGE *pImageHighRes,
00066 STAGE *pImageLowRes,
00067 bool TakeOwnership
00068 );
00069
00070
00071
00072 virtual ERRVALUE v_Initialize ();
00073
00074 virtual ERRVALUE v_PullBegin (const SECTION_ITERATOR& iterator);
00075
00076 private:
00077 #ifndef GENERATING_DOXYGEN_OUTPUT
00078
00079
00080 FILTER_FUSION (const FILTER_FUSION&);
00081 FILTER_FUSION& operator= (const FILTER_FUSION&);
00082 #endif // GENERATING_DOXYGEN_OUTPUT
00083
00084 };
00085
00086
00087
00089 class FILTER_FUSION_BROVEY : public FILTER_FUSION {
00090 public:
00091
00093 FILTER_FUSION_BROVEY (
00094 STAGE *pImageHighRes,
00095 STAGE *pImageLowRes,
00096 bool TakeOwnership
00097 );
00098
00099
00100 virtual ~FILTER_FUSION_BROVEY ();
00101
00102 private:
00103 #ifndef GENERATING_DOXYGEN_OUTPUT
00104
00105
00106 virtual ERRVALUE v_Initialize ();
00107 virtual ERRVALUE v_PullSubSection (const SECTION& SubSection, BUFFER& buffer);
00108
00109
00110 FILTER_FUSION_BROVEY (const FILTER_FUSION_BROVEY&);
00111 FILTER_FUSION_BROVEY& operator= (const FILTER_FUSION_BROVEY&);
00112
00113 #endif // GENERATING_DOXYGEN_OUTPUT
00114 };
00115
00116
00117
00119 class FILTER_FUSION_TEXTUREPCA : public FILTER_FUSION {
00120 public:
00121
00123 FILTER_FUSION_TEXTUREPCA (
00124 STAGE *pImageHighRes,
00125 STAGE *pImageLowRes,
00126 bool TakeOwnership
00127 );
00128
00129
00130 virtual ~FILTER_FUSION_TEXTUREPCA ();
00131
00132 private:
00133 #ifndef GENERATING_DOXYGEN_OUTPUT
00134
00135 MIMATRIX *m_pEigenFwdPC;
00136 MIMATRIX *m_pEigenInvPC;
00137 double m_Weight;
00138
00139 ERRVALUE ComputeHighResTexturePCA (const SECTION& TotalSection);
00140
00141
00142 virtual ERRVALUE v_Initialize ();
00143 virtual ERRVALUE v_PullBegin (const SECTION_ITERATOR& iterator);
00144 virtual ERRVALUE v_PullSubSection (const SECTION& SubSection, BUFFER& buffer);
00145
00146
00147 FILTER_FUSION_TEXTUREPCA (const FILTER_FUSION_TEXTUREPCA&);
00148 FILTER_FUSION_TEXTUREPCA& operator= (const FILTER_FUSION_TEXTUREPCA&);
00149
00150 #endif // GENERATING_DOXYGEN_OUTPUT
00151 };
00152
00153
00154
00156 class FILTER_FUSION_MODHIS : public FILTER_FUSION {
00157 public:
00158
00160 FILTER_FUSION_MODHIS (
00161 STAGE *pImageHighRes,
00162 STAGE *pImageLowRes,
00163 bool TakeOwnership,
00164 double MaxHighRes,
00165 double MaxRGB
00166 );
00167
00168
00169 virtual ~FILTER_FUSION_MODHIS ();
00170
00172 void SetIntensityProportion (
00173 double proportion
00174 );
00175
00177 void SetSaturationBoost (
00178 double SaturationBoost
00179 );
00180
00183 void SetSaturationMax (
00184 double MaxSaturation
00185 );
00186
00188 void SetUseEffectiveColorIntensity (
00189 bool UseEffectiveColorIntensity
00190 ) { m_UseEffectiveColorIntensity = UseEffectiveColorIntensity; }
00191
00192 private:
00193 #ifndef GENERATING_DOXYGEN_OUTPUT
00194
00195 double m_ScaleBI1;
00196 double m_ScaleBI2;
00197 double m_PowSaturationBoost;
00198 double m_MaxHighRes;
00199 double m_MaxRGB;
00200 double m_MaxSaturation;
00201 double *m_fH;
00202 double *m_fAA;
00203 double *m_fAS;
00204 double *m_baseA;
00205 double *m_baseS;
00206 bool m_UseEffectiveColorIntensity;
00207
00208
00209 virtual ERRVALUE v_Initialize ();
00210 virtual ERRVALUE v_PullSubSection (const SECTION& SubSection, BUFFER& buffer);
00211
00212
00213 FILTER_FUSION_MODHIS (const FILTER_FUSION_MODHIS&);
00214 FILTER_FUSION_MODHIS& operator= (const FILTER_FUSION_MODHIS&);
00215
00216 #endif // GENERATING_DOXYGEN_OUTPUT
00217 };
00218
00219
00220
00222 class FILTER_FUSION_BASICHIS : public FILTER_FUSION {
00223 public:
00224
00226 FILTER_FUSION_BASICHIS (
00227 STAGE *pImageHighRes,
00228 STAGE *pImageLowRes,
00229 bool TakeOwnership,
00230 double MaxHighRes,
00231 double MaxRGB,
00232 bool HighResDoesModulate
00233 );
00234
00235
00236 virtual ~FILTER_FUSION_BASICHIS ();
00237
00238 private:
00239 #ifndef GENERATING_DOXYGEN_OUTPUT
00240
00241 double m_MaxHighRes;
00242 double m_MaxRGB;
00243 bool m_HighResDoesModulate;
00244
00245
00246 virtual ERRVALUE v_Initialize ();
00247 virtual ERRVALUE v_PullSubSection (const SECTION& SubSection, BUFFER& buffer);
00248
00249
00250 FILTER_FUSION_BASICHIS (const FILTER_FUSION_BASICHIS&);
00251 FILTER_FUSION_BASICHIS& operator= (const FILTER_FUSION_BASICHIS&);
00252
00253 #endif // GENERATING_DOXYGEN_OUTPUT
00254 };
00255
00256
00257
00259 class FILTER_FUSION_BASICHBS : public FILTER_FUSION {
00260 public:
00261
00263 FILTER_FUSION_BASICHBS (
00264 STAGE *pImageHighRes,
00265 STAGE *pImageLowRes,
00266 bool TakeOwnership,
00267 double MaxHighRes,
00268 double MaxRGB,
00269 bool HighResDoesModulate
00270 );
00271
00272
00273 virtual ~FILTER_FUSION_BASICHBS ();
00274
00275 private:
00276 #ifndef GENERATING_DOXYGEN_OUTPUT
00277
00278 double m_MaxHighRes;
00279 double m_MaxRGB;
00280 bool m_HighResDoesModulate;
00281
00282
00283 virtual ERRVALUE v_Initialize ();
00284 virtual ERRVALUE v_PullSubSection (const SECTION& SubSection, BUFFER& buffer);
00285
00286
00287 FILTER_FUSION_BASICHBS (const FILTER_FUSION_BASICHBS&);
00288 FILTER_FUSION_BASICHBS& operator= (const FILTER_FUSION_BASICHBS&);
00289
00290 #endif // GENERATING_DOXYGEN_OUTPUT
00291 };
00292
00293
00294
00295 }
00296 }
00297
00298 #endif // INC_SPATMOD_IMAGEFILTERFUSION_H
00299