CSE 455 Winter 06
Project 4: Eigenfaces

Julian Chan

Introduction
There are features that distinguish human faces from other objects in an image. This project attempts to factor out these features and use them to recognize human faces in an image. A set of cropped faces is being fed into the program as training data. These faces are being treated as points in a hyperspace with a huge number of dimensions. For an m by n greyscale image, the dimension required would be m*n. Such enormous dimension would make computation impractical, so the Principal Component Analysis technique is used to reduce the complexity. Since the training faces only span a small subspace of the hyperspace, we can solve for the top k eigenvectors that span the subspace. Finding this subspace effectively extracts features common in the traning faces without specifying what these features are. With the k eigenvectors we have essentially created a new coordinate system that represent faces with only k values.

To recognize a face, we simply project the face into our eigenface subspace, construct a new face using its k eigenface coefficients, and compare it with the original. A good match would have small difference from the original, while a bad match would have large difference.


Eigenfaces
Average Face

Eigenfaces


Recognition Testing
After generating eigenfaces using non-smiling face crops, the program is being tested to match smiling faces to non-smiling ones. Recognition was being tested with different number of eigenfaces. Using a larger number of eigenfaces increased recognition rate to a certain point (around 11). After that, no improvement could be observed.

The program successfully matched these faces even only with one eigenface:




All the above smiling faces are very similiar to their non-similing counterparts, so it's not surprising that they were easily matched even with a small number of eigenfaces.

Even with 27 eigenfaces, the program was unable to match the following pairs:
being matched withwhen it should be
The correct match is actually the next one on the list and the incorrect match does look like a good match. The fact that the guy had his eyes closed probably contributed to the error too.
being matched withwhen it should be
The correct match is the third match on the list.
being matched withwhen it should be
This one totally failed. Maybe it's because this guy's smile is a lot brighter than everyone else.
being matched withwhen it should be
The correct match is the fifth one on the list. Again, it's probably because he's showing some teeth.
being matched withwhen it should be
being matched withwhen it should be

Cropping and Finding Faces
Test 1

Scale: .48 - .52 Step: .02

Test 2

Scale: .48 - .52 Step: .02

Test 3



Scale: .45 - .55 Step: .01
The program fails to crop the face of the man as the best match but was able to mark it as the second best match. High-texture regions seem to be this program's achilles heel. Test 4

Scale: .20 - .40 Step: .02

Face Morphing
Face morphing is implemented by calculating the difference vector between two faces. Adding multiples (.0 to 1.0) of the difference vectors to the first face will give a halfway face to the second face. These faces are projected to eigenfaces first to reduce the complexity.
to
result: