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.