Main Page   Class Hierarchy   Compound List   File List   Compound Members   File Members  

equalization.h

Go to the documentation of this file.
00001 
00025 #ifndef __INANNA_EQUALIZER_H__
00026 #define __INANNA_EQUALIZER_H__
00027 
00028 #include <magic/mobject.h>
00029 #include <magic/mmath.h>
00030 #include <magic/mmatrix.h>
00031 #include <magic/mpararr.h>
00032 #include <magic/mtextstream.h>
00033 
00034 // XML format ios flag
00035 extern int xmlflag;
00036 
00037 
00038 
00040 //                 -----                  | o                               //
00041 //                 |                 ___  |   ___  ___                      //
00042 //                 |---   __  |   |  ___| | |   / /   ) |/\                 //
00043 //                 |     /  \ |   | (   | | |  /  |---  |                   //
00044 //                 |____ \__|  \__!  \__| | | /__  \__  |                   //
00045 //                          |                                               //
00047 
00055 class Equalizer : public Object {
00056     decl_dynamic (Equalizer);
00057   public:
00058                         Equalizer       () {mHandleMissing=false;}
00059                         Equalizer       (const Equalizer& o) {mHandleMissing=o.mHandleMissing;}
00060     
00071     virtual void        analyze         (const Vector& vec, bool additive=false) {MUST_OVERLOAD}
00072 
00078     virtual void        equalize        (Vector& vec) const  {MUST_OVERLOAD}
00079 
00082     virtual void        unequalize      (Vector& vec) const {MUST_OVERLOAD}
00083 
00088     virtual Equalizer*  clone           () const  {MUST_OVERLOAD; return NULL;}
00089 
00091     virtual TextOStream&    operator>>		(TextOStream&) const {MUST_OVERLOAD; return sout;}
00092 
00096     virtual void        handleMissing   (bool enable=true) {mHandleMissing=enable;}
00097 
00098   protected:
00099     bool    mHandleMissing;
00100 };
00101 
00102 
00103 
00105 //          |   | o                                      -----               //
00106 //          |   |    ____  |                  ___        |                   //
00107 //          |---| | (     -+-  __   ___  |/\  ___| |/|/| |---   __           //
00108 //          |   | |  \__   |  /  \ (   \ |   (   | | | | |     /  \          //
00109 //          |   | | ____)   \ \__/  ---/ |    \__| | | | |____ \__|          //
00110 //                                  __/                           |          //
00112 
00115 class HistogramEq : public Equalizer {
00116     decl_dynamic (HistogramEq);
00117   public:
00118                             HistogramEq (int precision=100000, double floor=0.0, double ceiling=1.0);
00119                             HistogramEq (const HistogramEq& orig);
00120     virtual HistogramEq*    clone       () const {return new HistogramEq (*this);}
00121     
00122     virtual void            analyze     (const Vector& vec, bool additive=false);
00123     virtual void            equalize    (Vector& vec) const;
00124     virtual void            unequalize  (Vector& vec) const;
00125     
00127     virtual TextOStream&    operator>>	(TextOStream&) const;
00128 
00129   private:
00130     static int      determineDomain (float x, int precision, float lowBound, float upBound);
00131     void            finalize        ();
00132     void            analyze2        (const Vector& vec);
00133 
00134     double          mLowBound;  // Bound in the unequalized data
00135     double          mUpBound;   // Bound in the unequalized data
00136     double          mMin;       // Desired lower bound in the equalized data
00137     double          mMax;       // Desired upper bound in the equalized data
00138     Array<Vector>   mData;      // Accumulated additive analysis data
00139     Vector          mHistogram; // Histogram formed by analysis
00140 };
00141 
00142 
00143 
00145 //           ----                         o             -----               //
00146 //          |      ___         ____  ____    ___    _   |                   //
00147 //          | ---  ___| |   | (     (     |  ___| |/ \  |---   __           //
00148 //          |   \ (   | |   |  \__   \__  | (   | |   | |     /  \          //
00149 //          |___/  \__|  \__! ____) ____) |  \__| |   | |____ \__|          //
00150 //                                                               |          //
00152 
00155 class GaussianEq : public Equalizer {
00156     decl_dynamic (GaussianEq);
00157   public:
00158                         GaussianEq  (double avg=0.0, double stddev=0.0) {mAverage=0; mStdDev=0;}
00159                         GaussianEq  (const GaussianEq& orig);
00160     virtual GaussianEq* clone       () const {return new GaussianEq (*this);}
00161     
00162     virtual void        analyze     (const Vector& vec, bool additive=false);
00163     virtual void        equalize    (Vector& vec) const;
00164     virtual void        unequalize  (Vector& vec) const;
00165 
00166   private:
00167     double  mAverage;
00168     double  mStdDev;
00169 };
00170 
00171 
00172 
00174 //                 |   | o                       -----                      //
00175 //                 |\ /|     _          ___      |                          //
00176 //                 | V | | |/ \  |/|/|  ___| \ / |---   __                  //
00177 //                 | | | | |   | | | | (   |  X  |     /  \                 //
00178 //                 |   | | |   | | | |  \__| / \ |____ \__|                 //
00179 //                                                        |                 //
00181 
00184 class MinmaxEq : public Equalizer {
00185     decl_dynamic (MinmaxEq);
00186   public:
00187                         MinmaxEq    (double trgMin=0.0, double trgMax=1.0);
00188                         MinmaxEq    (const MinmaxEq& orig);
00189     virtual MinmaxEq*   clone       () const {return new MinmaxEq (*this);}
00190     
00191     virtual void        analyze     (const Vector& vec, bool additive=false);
00192     virtual void        equalize    (Vector& vec) const;
00193     virtual void        unequalize  (Vector& vec) const;
00194     
00196     virtual TextOStream&    operator>>	(TextOStream& out) const;
00197 
00199     virtual TextIStream&    operator<<	(TextIStream& in);
00200     
00201   private:
00202     double  mTrgMin;
00203     double  mTrgMax;
00204     double  mDataMin;
00205     double  mDataMax;
00206 };
00207 
00208 
00209 
00211 //    |   |               o     -----                  | o                  //
00212 //    |\ /|  ___   |            |                 ___  |   ___  ___         //
00213 //    | V |  ___| -+- |/\ | \ / |---   __  |   |  ___| | |   / /   ) |/\    //
00214 //    | | | (   |  |  |   |  X  |     /  \ |   | (   | | |  /  |---  |      //
00215 //    |   |  \__|   \ |   | / \ |____ \__|  \__!  \__| | | /__  \__  |      //
00216 //                                       |                                  //
00218 
00220 class MatrixEqualizer : public Equalizer {
00221     decl_dynamic (MatrixEqualizer);
00222   public:
00223 
00234                         MatrixEqualizer     (Equalizer* prototype=NULL);
00235 
00243     void                analyze             (const Matrix& mat, bool additive=false);
00244 
00248     void                equalize            (Matrix& mat) const;
00249 
00253     void                unequalize          (Matrix& mat) const;
00254 
00259     const Equalizer&    getPlane            (int plane) const {return *mPlaneEqualizers.getp(plane);}
00260 
00262     int                 planes              () const {return mPlaneEqualizers.size();}
00263     
00265     virtual TextOStream&    operator>>	(TextOStream& out) const;
00266 
00268     virtual TextIStream&    operator<<	(TextIStream& in);
00269 
00270     virtual void        handleMissing   (bool enable=true);
00271     
00272   private:
00273     void                bothEqualize        (Matrix& mat, bool uneq) const;
00274 
00276     Array<Equalizer>    mPlaneEqualizers;
00277 };
00278 
00280 
00284 Equalizer* readEqualizer (TextIStream& in);
00285 
00286 #endif
00287 

Generated on Thu Feb 10 20:06:44 2005 for Inanna by doxygen1.2.18