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

File:
1 edited

Legend:

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

    r96 r97  
    3939#include "Vector.h" 
    4040#include "PCA.h" 
    41 #include <glob.h> 
     41#include "FileTools.h" 
    4242 
    4343using namespace std; 
     
    5858Image src("../data/images/faces/dave/dave.png"); 
    5959 
    60 void Recalc() 
    61 { 
    62         glob_t g; 
    63          
    64         glob("../data/images/faces/dave/*.png",GLOB_PERIOD,NULL,&g); 
    65         for (unsigned int n=0; n<g.gl_pathc; n++) 
    66         { 
    67                 string path=g.gl_pathv[n]; 
    68                 cerr<<path<<endl; 
    69                 Image im(path); 
    70                 //im.SubMean(); 
     60void Generate(PCA &pca, const string &imagepath) 
     61{ 
     62        vector<string> images=Glob(imagepath); 
     63        for (vector<string>::iterator i=images.begin(); i!=images.end(); i++) 
     64        { 
     65                cerr<<*i<<endl; 
     66                Image im(*i); 
    7167                Vector<float> v(im.Scale(w,h).RGB2GRAY().ToFloatVector()); 
    7268                v-=v.Mean(); 
    7369                pca.AddFeature(v); 
    74         } 
    75         globfree (&g); 
    76          
     70        }        
    7771        pca.Calculate();  
     72} 
     73 
     74PCA MakeSubspace(const PCA &space, const string &imagepath) 
     75{ 
     76        PCA subspace(space.GetFeatureSize()); 
     77         
     78        // find the transform based on the parameters 
     79        vector<string> images=Glob(imagepath); 
     80        for (vector<string>::iterator i=images.begin(); i!=images.end(); i++) 
     81        { 
     82                cerr<<*i<<endl; 
     83                Image im(*i); 
     84                Vector<float> v(im.Scale(w,h).RGB2GRAY().ToFloatVector()); 
     85                v-=v.Mean(); 
     86                subspace.AddFeature(space.Project(v)); 
     87        } 
     88         
     89        subspace.Calculate(); 
     90 
     91        // project back each row 
     92        // think there must be a much much better way to do this... 
     93        for (int i=0; i<subspace.EigenTransform().GetRows(); i++) 
     94        { 
     95                cerr<<"row: "<<i<<endl; 
     96                Vector<float> row = subspace.EigenTransform().GetRowVector(i); 
     97                subspace.EigenTransform().SetRowVector(i, 
     98                        pca.Synth(row)); 
     99        } 
     100 
     101        return subspace;  
    78102} 
    79103 
     
    87111} 
    88112 
     113void SavePCA(const PCA &pca, string filename) 
     114{ 
     115        FILE *f=fopen(filename.c_str(), "wb"); 
     116        pca.Save(f); 
     117        fclose(f); 
     118} 
     119 
    89120void TestPCA() 
    90121{ 
     
    93124        //pca.Save(f); 
    94125        pca = LoadPCA("../data/eigenspaces/spacek-20x30.pca"); 
    95          
    96         PCA davelight = LoadPCA("davelight-20x30.pca"); 
    97         //pca.Mult(davelight); 
    98         pca = davelight; 
    99          
    100         pca.Compress(0,100); 
     126        PCA subspace = LoadPCA("dave-resynthed-sub.pca"); 
     127 
     128        //pca.Compress(0,10); 
     129        //pca.Compress(0,30); 
     130                 
     131        //pca.EigenTransform() *= subspace.EigenTransform().Transposed(); 
     132         
     133        PCA davesubspace = MakeSubspace(pca,"../data/images/faces/dave/*.png"); 
     134        SavePCA(davesubspace,"davelight-spacek-20x30.pca"); 
     135                 
    101136        src = src.Scale(w,h).RGB2GRAY(); 
    102137        Vector<float> d(src.ToFloatVector());    
     
    325360         
    326361        static float t=0; 
    327         cerr<<sin(t)<<endl; 
    328         for (unsigned int i=0; i<100; i++) 
    329         { 
    330                 camera.Blit(Image(w,h,1,(pca.GetEigenTransform().GetRowVector(i)*50*sin(t))/((i+1) * 1)+pca.GetMean() 
     362 
     363        for (unsigned int i=0; i<10; i++) 
     364        { 
     365                //camera.Blit(Image(w,h,1,(pca.GetEigenTransform().GetRowVector(i)*50*sin(t))/((i+1) * 1) //+pca.GetMean() 
     366                //      ),(i%30)*(w+2),0+(i/30)*(h+2)); 
     367                camera.Blit(Image(w,h,1,pca.GetEigenTransform().GetRowVector(i)*3 //+pca.GetMean() 
    331368                        ),(i%30)*(w+2),0+(i/30)*(h+2)); 
    332369        } 
Note: See TracChangeset for help on using the changeset viewer.