Changeset 94


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

added face classifier application, not working yet

Location:
foam/trunk
Files:
14 added
10 edited

Legend:

Unmodified
Added
Removed
  • foam/trunk/eigentools/src/main.cpp

    r93 r94  
    4040PCA pca(w*h); 
    4141Vector<float> params(100); 
    42 Image src("data/dave.png"); 
     42Image src("../data/images/faces/dave/dave.png"); 
    4343 
    4444void Recalc() 
     
    4646        glob_t g; 
    4747         
    48         glob("data/spacek-large/*.png",GLOB_PERIOD,NULL,&g); 
     48        glob("../data/images/faces/spacek-large/*.png",GLOB_PERIOD,NULL,&g); 
    4949        for (unsigned int n=0; n<g.gl_pathc; n++) 
    5050        { 
     
    6868        //pca.Save(f); 
    6969         
    70         FILE *f=fopen("spacek-50x80.pca", "rb"); 
     70        FILE *f=fopen("../data/eigenspaces/spacek-50x80.pca", "rb"); 
    7171        pca.Load(f); 
    7272        fclose(f); 
     
    236236        ////////////////////////////////// 
    237237        // test the debayering 
    238         /*Image im("data/bayer.pgm"); 
     238        /*Image im("../data/images/bayer.pgm"); 
    239239        im.Crop(300,300,320,240); 
    240240        im.RGB2GRAY(); 
     
    245245        /* 
    246246        vector<Image> imagevec; 
    247         //imagevec.push_back(Image("data/audrey.png")); 
    248         imagevec.push_back(Image("data/dave-1.png")); 
    249         imagevec.push_back(Image("data/dave-2.png")); 
    250         imagevec.push_back(Image("data/amber-1.png")); 
    251         imagevec.push_back(Image("data/amber-2.png")); 
    252         //imagevec.push_back(Image("data/false.png")); 
     247        //imagevec.push_back(Image("../data/audrey.png")); 
     248        imagevec.push_back(Image("../data/dave-1.png")); 
     249        imagevec.push_back(Image("../data/dave-2.png")); 
     250        imagevec.push_back(Image("../data/amber-1.png")); 
     251        imagevec.push_back(Image("../data/amber-2.png")); 
     252        //imagevec.push_back(Image("../data/false.png")); 
    253253 
    254254        for(unsigned int x=0; x<imagevec.size(); x++) 
  • foam/trunk/faceident/Makefile

    r91 r94  
    55        src/Face.cpp\ 
    66        src/ImageUtils.cpp\ 
    7         src/SceneState.cpp 
     7        src/SceneState.cpp\ 
     8        src/tinyxml.cpp\ 
     9        src/tinyxmlerror.cpp\ 
     10        src/tinyxmlparser.cpp 
    811 
    912# for the minute, go out and up to link to the vision lib 
    10 CCFLAGS = -I../vision/src `pkg-config --cflags opencv` -ggdb -Wall -O3 -ffast-math -Wno-unused -DTIXML_USE_STL  
    11 LDFLAGS = -L../vision/ 
    12 LIBS    = `pkg-config --libs opencv` -lYARP_dev -lYARP_sig -lYARP_OS -lACE -lvision 
     13CCFLAGS = `pkg-config --cflags opencv` -ggdb -Wall -O3 -ffast-math -Wno-unused -DTIXML_USE_STL  
     14LDFLAGS =  
     15LIBS    = `pkg-config --libs opencv` -lYARP_dev -lYARP_sig -lYARP_OS -lACE  
    1316 
    1417CC = g++ 
  • 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.