Yanping Huang
huangyp at u dot washington dot edu
March 13st, 2008
Each face is treated as a vector. Principal Component Analysis (PCA) can be used to find the eigen space of covariance matrix. A face can then be represented by a vector of coefficients weighting the eigenfaces. The vector of coefficients of a user’s face can be computed by projecting the face onto the eigen space. Given a query face, we first compute the vector of coefficients for it. We then compute the MSE between its coefficients and the coefficients of each user’s face in the user base. The face in the user based of the least MSE will be the best match. To speed up the computation, I implemented the linear kernel trick described in the project webpage (extra credits). I also implement other different kernel PCA methods.(extra credits)
|
|
|
|
|
|
|
|
|
|
2. Mismatch pairs
was recognized as
, while his nonsmile face
ranked 9th in the order list.
was recognized as
, while his nonsmile face
ranked 2nd in the order list.
was recognized as
, while his nonsmile face
ranked 20th in the order list.
was recognized as
, while his nonsmile face
ranked 2nd in the order list.
was recognized as
, while his nonsmile face
ranked 11th in the order list.
was recognized as
, while his nonsmile face
ranked 4th in the order list.
The mistakes seem somewhat hit or miss. But those mismatch pairs did share
a lot of similarites. Saddly I myself was recognized as a female (so was this guy
). Even with different guassian and polynomial
kernels, those six guys cannot be recognized sucessfully.
To enhence the performance, I used a color cue to find a proper area (extra credit). It is modified from Human Skin Colour Clustering for Face Detection 2003
% The skin colour at uniform daylight illumination
R > 95 AND G > 40 AND B > 20 AND
|R − G| > 15 AND // also R and G components must not be close together, otherwise we are not dealing with the fair complexion
R > G AND R > B //R component must be the greatest component
OR // The skin colour under flashlight or (light) daylight
R > 220 AND G > 210 AND B > 170 AND
|R − G| ≤ 15 AND // R and G components must be close together
R > B AND G > B //B component must be the smallest component
To take care of the color noise, I check this constraint over a 21X21 patch centered around that pixe. If 90% or above are non skin, the pixel will be rejected ( a very very soft constraint).
To determine whether an area is a face, the area is then projected onto the face space. The projection and the original area are then used to compute MSE. I also used the technique multiplying MSE by the distance from the area from the face mean and then dividing by the variance of the area.
To save computational time, I only use scale = 0.55 for most faces.
Chop elf.tga ![]()
Black dots are considered as skin pixel. Reject 21X21 patch that contains 90% of non skin pixeles.

Group nonsmiling images

Group smiling images
Group Image
scale = 1 to 1.6 with step 0.2
6 faces are found!
Human and animals ^_^. (extra credits)
Nosmiling user vs. smiling himself and
vs. a smiling face of his neighbors(+1)
Using binary search, I tried are MAX_MSE with 1e+3, 1.3e+3, 1.5e+3, 1.8e+3, and 2e+3. Among them, 1.5e+3 worked best.The false negative rate is 8.3%(2/24), and the false positive rate is 20.8%(5/24).
1. Use a color cue to find faces.
2. Implement this speedup for calculating eigenvectors. This tenique is actually linear kernel trick.
3. Implement Kernel PCA: with both Guassian kernel and Polynomial kernel. The results from kernel PCA is the same as the results from 24 eigen-vectors. 18 out of 24 faces were recognized.
4. Use eigenfaces to recognize images other than faces or to recognize animal faces even toies.
5. Verify faces