Part A
1.
The average face followed by the 10 eigenfaces (in decreasing
order of eigenvalue), computed
at 40x40 resolution:
average face:
eigenfaces:
2.
I implemented a simple speedup to simplify computing the
top 1,3,...,33 eigenvectors.
I modified the
eigenfaces file format and load routine
slightly to allow a runtime-specified
number of the eigenvectors to be loaded.
I computed the top 33 eigenvectors once, and saved them using this
new format.
At runtime I simply ran the --constructuserbase for each of the
desired number of eigenvectors (1,3,...,33).
Similarly, I ran each of the experiments only using the top N of
the 33 eigenvectors.
The command-line format changed slightly to support this functionality.
All the commands (except --eigenfaces) now require an integer following
the name of the eigenfaces file, denoting how many eigenfaces to load.
3.
The following graph shows the success rate at identifying
users from the smiling images against the non-smiling userbase.
The "Exact Matches" line graphs the number of images where the
top scoring user in the database matched the input.
"Close Matches" graphs the number of images where the
input user appeared in the top 5 scoring userbase entries.
Obviously, using more eigenvectors tends to increase the success
at identifying users. Beyond about 15 eigenvectors there is
little additional benefit. Beyond this point the graphs are
no longer monotonically increasing, indicating that these
additional eigenvectors are probably useless at best, or
possibly harmful.
The program was unable to
match the smiling images of "hile" and "ko" to their non-smiling userbase
entry. These two examples did not even score within the top 5.
They actually smiled in the smiling photos
(unlike many of the other students) which is perhaps why the
program could not match them against their non-smiling image.
smiling and non-smiling hile:
smiling and non-smiling ko:
Part B
aseem.tga
Here's the result of cropping aseem.tga, obtained by stepping from
min_scale=0.65 to max_scale=0.75 at step=0.01:
Myself
Here's the result of cropping a photo of myself, obtained by stepping from
min_scale=1.25 to max_scale=1.35 at step=0.01:
group1.tga
Here are the faces located in group1.tga using scales
1.50 - 1.65,
step of 0.05.
The green box with the thickest border is the highest-scoring match.
The thinner boxes represent lower scoring matches.
4 people
Here are the faces located in a picture containing 4 people
using scales 1.0-1.15, step 0.05.
Unfortunately, the program was only able to locate 3 of the
4 faces reliably.
Depending on the starting and ending scale it would settle on
a different set of 3.
The MSE values for the 4 faces and
the "false face" were very closely spaced.