Changeset 97 for foam/trunk/vision


Ignore:
Timestamp:
08/03/2009 01:42:48 PM (11 years ago)
Author:
dave
Message:

added the eigen spaces and the rest of the data associated with this, faces, etc

Location:
foam/trunk/vision/src
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • foam/trunk/vision/src/Matrix.h

    r96 r97  
    9494        void SetRowVector(unsigned int r, const Vector<T> &row); 
    9595        void SetColVector(unsigned int c, const Vector<T> &col); 
    96           
     96        void NormaliseRows(); 
     97        void NormaliseCols(); 
     98 
    9799        void Print() const; 
    98100        void SetAll(T s); 
     
    119121        Matrix CropCols(unsigned int s, unsigned int e); 
    120122 
    121         void Save(FILE *f); 
     123        void Save(FILE *f) const; 
    122124        void Load(FILE *f); 
    123125 
     
    230232Matrix<T> Matrix<T>::Transposed() const 
    231233{ 
    232         Matrix<T> copy(*this); 
     234        Matrix<T> copy(m_Cols,m_Rows); 
    233235        for (unsigned int i=0; i<m_Rows; i++) 
    234236        { 
    235237                for (unsigned int j=0; j<m_Cols; j++) 
    236238                { 
    237                         copy[i][j]=(*this)[j][i]; 
     239                        copy[j][i]=(*this)[i][j]; 
    238240                } 
    239241        } 
     
    255257Matrix<T> Matrix<T>::operator+(const Matrix &other) const 
    256258{ 
    257         assert(m_Rows=other.m_Rows); 
    258         assert(m_Cols=other.m_Cols); 
     259        assert(m_Rows==other.m_Rows); 
     260        assert(m_Cols==other.m_Cols); 
    259261         
    260262        Matrix<T> ret(m_Rows,m_Cols); 
     
    272274Matrix<T> Matrix<T>::operator-(const Matrix &other) const 
    273275{ 
    274         assert(m_Rows=other.m_Rows); 
    275         assert(m_Cols=other.m_Cols); 
     276        assert(m_Rows==other.m_Rows); 
     277        assert(m_Cols==other.m_Cols); 
    276278         
    277279        Matrix<T> ret(m_Rows,m_Cols); 
     
    530532 
    531533template<class T> 
    532 void Matrix<T>::Save(FILE* f) 
     534void Matrix<T>::NormaliseRows() 
     535{ 
     536        for(unsigned int i=0; i<m_Rows; i++) 
     537        { 
     538                SetRowVector(i,GetRowVector(i).Normalised()); 
     539        } 
     540} 
     541 
     542template<class T> 
     543void Matrix<T>::NormaliseCols() 
     544{ 
     545        for(unsigned int i=0; i<m_Cols; i++) 
     546        { 
     547                SetColVector(i,GetColVector(i).Normalised()); 
     548        } 
     549} 
     550 
     551template<class T> 
     552void Matrix<T>::Save(FILE* f) const 
    533553{ 
    534554        int version = 1;         
     
    638658         
    639659        assert(j.Inverted()==k); 
     660                 
     661        Matrix<float> l(2,2); 
     662        l[0][0]=3; 
     663        l[0][1]=3; 
     664        l[1][0]=0; 
     665        l[1][1]=0; 
     666         
     667        Matrix<float> n(2,2); 
     668        n[0][0]=2; 
     669        n[0][1]=2; 
     670        n[1][0]=0; 
     671        n[1][1]=0; 
     672         
     673        n*=l; 
     674         
     675        Matrix<float> o(4,4); 
     676        o.Zero(); 
     677        o[0][0]=1; 
     678        o[1][1]=1; 
     679        o[2][2]=1; 
     680        o[3][3]=1; 
     681         
     682        j*=k; 
     683        assert(j==o); 
     684 
     685        { 
     686                Matrix<float> a(2,3); 
     687                Matrix<float> b(3,2); 
     688                 
     689                a[0][0]=1; a[0][1]=2; a[0][2]=3; 
     690                a[1][0]=4; a[1][1]=5; a[1][2]=6; 
     691 
     692                b[0][0]=2; b[0][1]=3; 
     693                b[1][0]=-1; b[1][1]=1; 
     694                b[2][0]=1; b[2][1]=2; 
     695                 
     696                Matrix<float> result(2,2); 
     697                result[0][0]=3; result[0][1]=11; 
     698                result[1][0]=9; result[1][1]=29; 
     699                 
     700                assert(a*b==result); 
     701        } 
     702         
    640703} 
    641704 
  • foam/trunk/vision/src/PCA.cpp

    r96 r97  
    5151         
    5252        // allocate the transform matrix (this is where it'll run out of memory) 
    53         cerr<<"Allocating "<<m_FeatureSize*m_FeatureSize*sizeof(float)/1024/1024.0<<" megs for covariance matrix"<<endl; 
     53        float size= m_FeatureSize*m_FeatureSize*sizeof(float)/1024/1024.0; 
     54        if (size>1) 
     55        { 
     56                cerr<<"Allocating "<<size<<" megs for covariance matrix"<<endl; 
     57        } 
    5458        m_EigenTransform = Matrix<float>(m_FeatureSize,m_FeatureSize); 
    5559        m_EigenTransform.Zero(); 
     
    9296} 
    9397 
    94 void PCA::Save(FILE *f) 
     98void PCA::Save(FILE *f) const 
    9599{ 
    96100        int version = 2; 
     
    158162         
    159163        pca.Calculate(); 
    160                  
     164         
     165         
    161166        in[0]=.69; in[1]=.49; 
    162167        Vector<float> out = pca.Project(in); 
    163168        assert(feq(out[0],-0.82797f) && feq(out[1],-0.175115f)); 
     169 
     170        PCA pcasub(2); 
     171         
     172        in[0]=-0.677; in[1]=-0.735; 
     173        pcasub.AddFeature(in); 
     174        in[0]=0; in[1]=0; 
     175        pcasub.AddFeature(in); 
     176        in[0]=0.677; in[1]=0.735; 
     177        pcasub.AddFeature(in); 
     178         
     179        pcasub.Calculate(); 
     180        pca.Mult(pca);   
     181         
    164182         
    165183} 
  • foam/trunk/vision/src/PCA.h

    r96 r97  
    5050        const Vector<float> &GetEigenValues() const { return m_EigenValues; } 
    5151        const Matrix<float> &GetEigenTransform() const { return m_EigenTransform; } 
     52        Matrix<float> &EigenTransform() { return m_EigenTransform; } 
    5253        const FeatureVec &GetFeatures() const { return m_Features; } 
    5354        const Vector<float> &GetMean() const { return m_Mean; } 
     
    5758         
    5859        void Load(FILE *f); 
    59         void Save(FILE *f); 
     60        void Save(FILE *f) const; 
    6061         
    6162private:         
  • foam/trunk/vision/src/Vector.h

    r91 r97  
    6060        T DistanceFrom(const Vector &other) const; 
    6161        T Magnitude() const; 
     62        Vector Normalised() const; 
    6263 
    6364        Vector &operator=(const Vector &other); 
     
    7576        Vector &operator/=(T v); 
    7677         
    77         void Save(FILE *f); 
     78        void Save(FILE *f) const; 
    7879        void Load(FILE *f); 
    7980         
     
    186187 
    187188template<class T> 
     189Vector<T> Vector<T>::Normalised() const 
     190{ 
     191        Vector<T> ret(*this); 
     192        ret/=ret.Magnitude(); 
     193        return ret; 
     194} 
     195 
     196template<class T> 
    188197Vector<T> Vector<T>::operator+(const Vector &other) const 
    189198{ 
     
    329338 
    330339template<class T> 
    331 void Vector<T>::Save(FILE* f) 
     340void Vector<T>::Save(FILE* f) const 
    332341{ 
    333342        int version = 1;         
Note: See TracChangeset for help on using the changeset viewer.