Peter Henry
CSE576 Computer Vision
Project 3

Eigenfaces

Recognition

Average Face:


Eigenfaces:

Plot:


The general trend of the plot is that more eigenfaces leads to better recognition, though the graph is not by any means monotonically increasing. Based on recognition rate alone, all 21 eigenfaces should be used, but this answer would not generalize to a significantly larger training set. We can see even in this plot that the recognition rate is leveling off, and we don't get the efficiency benefits of eigenfaces by using one eigenface for every training image.

Here are two examples of incorrect recognition results:

Query 1:

Results for query 1:

Query 2:

Results for query 2:

In query 1, the correct identification was the second result. The incorrect first result does bear a striking resemblance if one accounts for grascale and level normalization. In query 2, the correct answer is not among the top three results, but they all have a recognizable resemblance (e.g., they are all wearing glasses).

Cropping and Finding Faces

Result of cropping elf.tga with scale parameters .45, .55, .01:




Result of cropping a portrait with scale parameters .15 .25 .01:




Result of marking the top three faces in group1.tga with scale parameters .45, .55, .01:


Result of marking the top 45 faces in a group shot with scale parameters .95, 1.00, .01:


I observe that while we do detect some faces, there are many false positives. This may be due to my use of the suggested formula for error:

mse * distance_from_average / variance

I believe this may cause areas with significant variance to be spuriously detected. However, I also observe false positives in low texture regions. I postulate that the remaining errors are due to the small training set, variations in pose and illumination, and scale parameters that do not precisely coincide with the faces in the group picture.

Extra Credit

I implemented the shortcut to compute the eigenvectors faster. This allowed me to compute eigenvectors of a NxN matrix, where N is the number of training images, as opposed to a (W*H)x(W*H) matrix as is required for the direct method. I checked that the results were equivalent using the speedup, and this helped me to compute eigenvectors quickly through the remaining development and testing.

I also implemented the verify face method, but did not have time to run the associated tests.