summaryrefslogtreecommitdiff
path: root/2005/i/robert/src/ovision/see/hotelling.hh
diff options
context:
space:
mode:
Diffstat (limited to '2005/i/robert/src/ovision/see/hotelling.hh')
-rw-r--r--2005/i/robert/src/ovision/see/hotelling.hh59
1 files changed, 47 insertions, 12 deletions
diff --git a/2005/i/robert/src/ovision/see/hotelling.hh b/2005/i/robert/src/ovision/see/hotelling.hh
index e3ac8bb..8acf3b3 100644
--- a/2005/i/robert/src/ovision/see/hotelling.hh
+++ b/2005/i/robert/src/ovision/see/hotelling.hh
@@ -27,39 +27,74 @@
#include "oconfig.hh"
+class Hpoint
+{
+ double p_[2];
+ public:
+ Hpoint () {p_[0]=0; p_[1]=0;}
+ Hpoint (const int i, const int j) {set (i, j);}
+ inline double operator [] (const unsigned i) const {return i<2?p_[i]:0;}
+ inline Hpoint& operator = (Hpoint &h)
+ {
+ if (&h != this)
+ {
+ h.p_[0] = p_[0];
+ h.p_[1] = p_[1];
+ }
+ return *this;
+ }
+ inline void set (const double i, const double j)
+ {p_[0]=i; p_[1]=j;}
+ inline void norm ()
+ {
+ double n = sqrt (p_[0]*p_[0] + p_[1]*p_[1]);
+ p_[0] /= n; p_[1] /= n;
+ }
+};
+
/// Detecte l'orientation principale d'une masse de données
class Hotelling
{
/// Classe oconfig
OConfig *oconfig_;
/// Matrice de covariance
- uint8_t covMatrix_[2][2];
+ double covMatrix_[2][2];
/// Données à traitées ajustées
- uint8_t *data_[2];
+ Hpoint *data_;
/// Nombre d'échantillons de données
unsigned dataSize_;
/// Moyenne de la première et deuxième composante
- int meanX_, meanY_;
+ double meanX_, meanY_;
+ /// EigenValues
+ double val1_, val2_;
/// EigenVectors
- uint8_t e1_[2], e2_[2];
+ Hpoint e1_, e2_;
public:
/// Constructeur
- Hotelling (const std::vector<uint8_t[2]> &dataList);
+ Hotelling (const std::vector<Hpoint> &dataList);
/// Destructeur
~Hotelling (void);
+ /// Affiche la matrice de covariance
+ void showCovMatrix () const;
+ /// Affiche les eigenvectors
+ void showEigenVectors () const;
+ /// Calcul des eigenvectors
+ void eigenVectors ();
/// Accessors
- void getEigenVectors (uint8_t* &e1, uint8_t* &e2)
- {e1 = e1_; e2 = e2_;}
- void getPCA (uint8_t* &pca) {pca = e1_;}
+ void getPC (Hpoint &pca);
+ void getPC (double &x, double &y);
private:
+ /// Calcul des eigenvalues
+ void eigenValues ();
+ /// Calcul de la variance
+ double cov (const unsigned i, const unsigned j);
/// Calcul de la matrice de covariance
- uint8_t* cov ();
+ void covMatrix ();
/// Calcul de la moyenne
- void mean (const std::vector<uint8_t[2]> &dataList);
- /// Calcul des eigenvectors
- void eigenVectors ();
+ void mean (const std::vector<Hpoint> &dataList);
};
+
#endif // hotelling_h