Eigenfaces:  Face Recognition

 

CSE 576: Image Understanding

Spring 2003

Megan Hazen

 

            The purpose of this project was to use one technique for modeling and recognizing faces is image data.  The technique, Eigenfaces, is based on Principle Component Analysis.  Goals in this project included finding a face in an image, and matching a face to the correct one out of a database of faces.

 

(In principal component analysis, a matrix is broken down into its eigenvectors.  The eigenvectors with the highest corresponding eigenvalues are the most important to representing that matrix.  In this case each vector represents one eigenface.  A series of vectors can be stored to represent a data base, and the projection of an image onto the eigenvectors may be used to recognize the face.)

 

The first task is to create a series of eigenfaces from a data base.  In this project a series of 33 student faces were used.  Shown here are the average face, and the first ten of the eigenfaces:

 

    

 

 

For the next part of the testing I ran a series of tests in which different numbers of eigenfaces were used.  Each of the faces from the database was projected onto the eigenfaces and matched to its closest match.  The following graph shows how many faces were successfully matched, as a function of the number of eigenfaces used in the processing. 

 

 

 

It should be noted that the total number of faces in the database was 33.  In general, the larger the number of eigenfaces used, the better the recognition was.  However, a 100% success rate was never attained.  Since using eigenfaces is one way to compress large sets of data, it is desirable to use as few eigenfaces as is necessary to represent the data.  From this simple study, it looks like the optimal number of eigenfaces is around 24, as additional eigenfaces did not improve recognition.  The number of eigenfaces would change with each different database, and each different application.

 

While errors did occur in all the sets of tests, frequently the correct face was also close to the top of the list of matches.  As the number of eigenfaces increased, so did the likelihood that the correct face would appear near the top of the list of good matches.  (As an example, with one eigenface, my own face was listed 21st on the list of likely matches, while when 33 eigenfaces were u  sed, it was only 4th in the list.)

 

At times it is possible to determine why a face was matched with the incorrect face.  For example, in when one eigenvalue was used, glasses seem to be one of the primary features of importance.  Two unsimilar faces might match if they both had glasses (my face with its single eigenvalue match:)

 

 

As an additional note – It took upwards of an hour of computation to compute all of the eigenfaces and the user databases.  However, the actual recognition process was almost instantaneous.  A more efficient version of the Jacobi algorithm may help this situation.

 

The final testing had to do with finding faces in a file.  My own code was unsuccessful in this portion, most likely due to some small problems in the code.  For example, it frequently focused on low textured areas.  Including a comparison of variance would probably alleviate this problem.

 

 

Extra credit:

            I also implemented the verfiyFace function.