Main Page | Namespace List | Class Hierarchy | Class List | Directories | File List | Namespace Members | Class Members

gaussian.h

00001 // Copyright (C) 1998-1999  Jean-Marc Valin
00002 #ifndef GAUSSIAN_H
00003 #define GAUSSIAN_H
00004 
00005 #include <iostream>
00006 #include <string>
00007 #include "covariance.h"
00008 #include "ObjectParser.h"
00009 #include "misc.h"
00010 #include "Vector.h"
00011 #include "covariance_set.h"
00012 #include "mean.h"
00013 #include "mean_set.h"
00014 
00015 
00016 namespace FD {
00017 
00018 class GMM;
00019 
00021 class Gaussian : public Object
00022 {
00023 protected:
00025    RCPtr<Mean> mean;
00026    //RCPtr<Vector<float> > mean;
00027 
00029    RCPtr<Covariance> covariance;
00030 
00032    int            accum_count;
00033 
00035    int            dimension;
00036 
00038    bool using_meanID;
00039    
00041    bool using_covarianceID;
00042    
00044    int meanID;
00045 
00047    int covarianceID;
00048 
00049 public:
00051    Gaussian() 
00052       : dimension(0) 
00053       , using_meanID(false)
00054       , using_covarianceID(false)
00055    {}
00056 
00057    Gaussian(std::istream &in) {in >> *this;}
00058 
00061    Gaussian(int dim, Covariance *(*cov_new)(int))
00062       : mean(new Mean (dim,0.0))
00063       //: mean(new Vector<float> (dim,0.0))
00064       , covariance(cov_new (dim))
00065       , accum_count(0)
00066       , dimension(dim)
00067       , using_meanID(false)
00068       , using_covarianceID(false)
00069    {}
00070 
00071    Gaussian(int dim, int _meanID, int _covarianceID)
00072       : accum_count(0)
00073       , dimension(dim)
00074       , using_meanID(true)
00075       , using_covarianceID(true)
00076       , meanID(_meanID)
00077       , covarianceID(_covarianceID)
00078    {}
00079 
00081    Gaussian(const Gaussian &g) 
00082       : mean(new Mean (*g.mean))
00083       //: mean(new Vector<float> (*g.mean))
00084       , covariance(g.covariance->copy())
00085       , accum_count (g.accum_count)
00086       , dimension (g.dimension)
00087       , using_meanID(false)
00088       , using_covarianceID(false)
00089    {}
00090 
00092    ~Gaussian();
00093       
00095    int getDimension() const  { return dimension; }
00096 
00098    Mean &getMean() const  { return *mean; }
00099 
00101    Covariance &getCovariance() const { return *covariance; }
00102 
00104    void to_real();
00105 
00107    int get_accum_count() const {return accum_count;} 
00108 
00110    double mahalanobis(const float * fr) const
00111    {
00112       return covariance->mahalanobisDistance(fr,&(*mean)[0]);
00113    }
00114 
00116    double mahalanobis(const float * fr, Covariance *cov) const
00117    {
00118       return cov->mahalanobisDistance(fr,&(*mean)[0]);
00119    }
00120 
00122    double euclidian(const float * fr) const
00123    {
00124       double dist=0;
00125       for (unsigned int i=0;i<dimension;i++)
00126       {
00127          dist+=FD::sqr<double>(fr[i]-(*mean)[i]);
00128       }
00129       //cerr << "det: " << covariance->getDeterminant() << endl;
00130       return dist;
00131    }
00132 
00134    void accum_frame(const float * fr)
00135    {
00136       mean->accumFrame(fr);
00137       covariance->accumFrame(fr);
00138       accum_count++;
00139    }
00140 
00142    void reset_to_accum_mode()
00143    {
00144       accum_count=0;
00145       covariance->reset();
00146       mean->resetToAccum();
00147    }
00148 
00149    void toIDsUsing (MeanSet &means, CovarianceSet & covariances);
00150 
00151    void toPtrsUsing (const MeanSet &means, const CovarianceSet & covariances);
00152 
00154    void printOn(std::ostream &out = std::cout) const;
00155 
00157    void readFrom (std::istream &in=std::cin);
00158 
00159    friend std::istream &operator >> (std::istream &in, Gaussian &gauss);
00160    friend class GMM;
00161 };
00162 
00163 std::istream &operator >> (std::istream &in, Gaussian &gauss);
00164 
00165 }//namespace FD
00166 #endif

Generated on Wed Oct 5 14:28:55 2005 for FlowDesigner by  doxygen 1.4.4