Experiment 1:

Average face

Eigenface 1 Eigenface 2 Eigenface 3 Eigenface 4 Eigenface 5
Eigenface 6 Eigenface 7 Eigenface 8 Eigenface 9 Eigenface 10

  1. For a low number of eigenfaces, there is steady and significant improvement when adding more eigenfaces. Improvement slows dramatically around 8. For moderate to higher numbers, there are several plateaus and inconsistent improvement. At a minimum, 10 eigenfaces should be used. If space is less of a concern, 20 eigenfaces shows a marked improvement over 10, but there is no clearly right answer.
  2. Most errors appeared reasonable. However, for example, I don't see any reason why the first example with 20 eigenfaces was matched the way it was. While many of the error cases still had the correct one in the top 5 (even the next choice), there were several that were out of the top 10, and a few that weren't even in the top half.
     
    10 Eigenfaces
    Image Correct Actual
         
    Image Correct Actual

    20 Eigenfaces
    Image Correct Actual
         
    Image Correct Actual

Experiment 2:

bush_george_w_portrait
Original Min Max Step
0.25 0.55 0.01

Me (actually, not me)
Original Min Max Step
0.25 0.35 0.01

IMG_8270
Min Max Step
0.48 0.56 0.02

People
Min Max Step
0.70 0.71 0.02
  1. Low texture areas definitely presented a problem for the initial implementation. I added a minimum variance requirement, which fixed the algorithm on the two required photos. The other photo of an individual could benefit from more sophisticated color analysis, though one could almost certainly find the face in that photo with just color analysis. There appears to be a curious pattern of errors where a quarter of the face is selected. In the last group photo, there were two errors that just weren't even close. One of them was of moderately low texture but not too low slow it made it past my minimum variance requirement. I think some enforcement of minimal vertical symmetry would be interesting. It could be implemented as the variance of the resulting image of subtracting the left half from the right half and vice versa.

Bells & Whistles:

I implemented the speedup where the eigenvectors of ATA are computed to compute the eigenvectors of AAT.