Changeset 94 for foam/trunk/vision


Ignore:
Timestamp:
07/23/2009 01:04:04 PM (11 years ago)
Author:
dave
Message:

added face classifier application, not working yet

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

Legend:

Unmodified
Added
Removed
  • foam/trunk/vision/src/Classifier.cpp

    r86 r94  
    2929} 
    3030 
    31 void Classifier::AddFeature(int group, const Vector<float> &v)  
     31void Classifier::AddFeatureToGroup(int group, const Vector<float> &v)  
    3232{  
    3333        assert(v.Size()==m_FeatureSize); 
    3434        m_Features[group].push_back(v);  
     35        // possibly overkill to do this each time we add a new feature... 
     36        CalcGroupMeans(); 
    3537} 
    3638 
     
    5052        m_Mean/=m_FeatureSize; 
    5153} 
     54 
     55void Classifier::CalcGroupMeans() 
     56{ 
     57        for (FeatureMap::iterator i=m_Features.begin(); 
     58                i!=m_Features.end(); ++i) 
     59        { 
     60                Vector<float> mean; 
     61                for (FeatureVec::iterator vi = i->second.begin(); vi!=i->second.end(); ++vi) 
     62                { 
     63                        mean+=*vi; 
     64                } 
     65                mean/=i->second.size(); 
     66                m_GroupMeans[i->first]=mean; 
     67        } 
     68} 
     69 
  • foam/trunk/vision/src/Classifier.h

    r90 r94  
    3232        ~Classifier(); 
    3333         
    34         void AddFeature(int group, const Vector<float> &f); 
    35         virtual int Classify(const Vector<float> &f) = 0; 
     34        virtual void AddFeature(int group, const Vector<float> &f) = 0; 
     35        virtual int Classify(const Vector<float> &f, float &error) = 0; 
    3636         
    3737protected: 
     38         
    3839        void CalcMean(); 
    39          
     40        void CalcGroupMeans(); 
     41        void AddFeatureToGroup(int group, const Vector<float> &f); 
     42 
    4043        typedef std::vector<Vector<float> > FeatureVec; 
    4144        typedef std::map<int,FeatureVec> FeatureMap; 
     
    4750 
    4851        Vector<float> m_Mean; 
    49          
     52        std::map<int,Vector<float> > m_GroupMeans; 
    5053}; 
    5154 
  • foam/trunk/vision/src/Image.cpp

    r93 r94  
    171171        cvReleaseImage(&m_Image); 
    172172        m_Image=newimage; 
     173} 
     174 
     175Image Image::SubImage(int x, int y, int w, int h) 
     176{ 
     177        CvRect roi; 
     178        roi.x=x; 
     179        roi.y=y; 
     180        roi.width=w; 
     181        roi.height=h; 
     182        IplImage *newimage; 
     183        cvSetImageROI(m_Image,roi); 
     184        newimage = cvCreateImage( cvSize(roi.width, roi.height), m_Image->depth, m_Image->nChannels ); 
     185        cvCopy(m_Image,newimage); 
     186        cvReleaseImage(&m_Image); 
     187        return newimage; 
    173188} 
    174189 
  • foam/trunk/vision/src/Image.h

    r90 r94  
    2525{ 
    2626public: 
     27        Image() : m_Image(NULL) {} 
    2728        Image(int w, int h, int d, int c); 
    2829        Image(const std::string &filename); 
     
    4243        void Crop(int x, int y, int w, int h); 
    4344        Image Scale(int w, int h); 
     45        Image SubImage(int x, int y, int w, int h); 
    4446 
    4547        // Paste an image into this one 
  • foam/trunk/vision/src/PCA.cpp

    r90 r94  
    7777} 
    7878 
    79 Vector<float> PCA::Project(Vector<float> v) 
     79Vector<float> PCA::Project(Vector<float> v) const 
    8080{ 
    8181        return m_EigenTransform*v; 
    8282} 
    8383         
    84 Vector<float> PCA::Synth(Vector<float> v) 
     84Vector<float> PCA::Synth(Vector<float> v) const 
    8585{ 
    8686        return m_Mean+m_EigenTransform.VecMulTransposed(v); 
  • foam/trunk/vision/src/PCA.h

    r90 r94  
    4141        void Compress(unsigned int s, unsigned int e); 
    4242         
    43         Vector<float> Project(Vector<float> v); 
    44         Vector<float> Synth(Vector<float> v); 
     43        Vector<float> Project(Vector<float> v) const; 
     44        Vector<float> Synth(Vector<float> v) const; 
    4545 
    4646        static void RunTests(); 
    4747 
    48         const Vector<float> &GetEigenValues() { return m_EigenValues; } 
    49         const Matrix<float> &GetEigenTransform() { return m_EigenTransform; } 
    50         const FeatureVec &GetFeatures() { return m_Features; } 
    51         const Vector<float> &GetMean() { return m_Mean; } 
     48        const Vector<float> &GetEigenValues() const { return m_EigenValues; } 
     49        const Matrix<float> &GetEigenTransform() const { return m_EigenTransform; } 
     50        const FeatureVec &GetFeatures() const { return m_Features; } 
     51        const Vector<float> &GetMean() const { return m_Mean; } 
     52        unsigned int GetFeatureSize() const { return m_FeatureSize; } 
    5253         
    5354         
  • foam/trunk/vision/src/PCAClassifier.cpp

    r89 r94  
    1515// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. 
    1616 
     17#include <cfloat> 
    1718#include "PCAClassifier.h" 
    1819 
    19 PCAClassifier::PCAClassifier(unsigned int FeatureSize) : 
    20 Classifier(FeatureSize) 
     20using namespace std; 
     21 
     22PCAClassifier::PCAClassifier(const PCA &pca) : 
     23Classifier(pca.GetFeatureSize()), 
     24m_PCA(pca) 
    2125{ 
    2226} 
     
    2630} 
    2731 
     32void PCAClassifier::AddFeature(int group, const Vector<float> &f) 
     33{ 
     34        AddFeatureToGroup(group, m_PCA.Project(f)); 
     35} 
    2836 
     37int PCAClassifier::Classify(const Vector<float> &f, float &error) 
     38{ 
     39        Vector<float> params=m_PCA.Project(f); 
     40 
     41        // find the closest point in all the group means 
     42        error = FLT_MAX; 
     43        int ret=-1; 
     44        for (map<int,Vector<float> >::iterator i=m_GroupMeans.begin();  
     45                i!=m_GroupMeans.end(); ++i) 
     46        { 
     47                float d=params.DistanceFrom(i->second); 
     48                if (d<error) 
     49                { 
     50                        ret=i->first; 
     51                        error=d; 
     52                } 
     53        } 
     54         
     55        return ret; 
     56} 
     57 
     58void PCAClassifier::Refresh() 
     59{ 
     60         
     61} 
     62 
  • foam/trunk/vision/src/PCAClassifier.h

    r89 r94  
    2121#include "Matrix.h" 
    2222#include "Classifier.h" 
     23#include "PCA.h" 
    2324 
    2425#ifndef FOAM_PCA_CLASSIFIER 
     
    2829{ 
    2930public: 
    30         PCAClassifier(unsigned int FeatureSize); 
     31        PCAClassifier(const PCA &pca); 
    3132        ~PCAClassifier(); 
    32                  
     33         
     34        // take image vectors in internally uses pca space parameters 
     35        virtual void AddFeature(int group, const Vector<float> &f); 
     36        virtual int Classify(const Vector<float> &f, float &error); 
     37 
    3338private: 
    34          
    35          
     39        void Refresh(); 
     40 
     41        PCA m_PCA; 
    3642         
    3743}; 
Note: See TracChangeset for help on using the changeset viewer.