The points that I used are shown below:
Computing the midway face involves 3 steps: 1) Computing the average shape by averaging the point correspondences of the two faces, 2) Warp both faces into the average shape, 3) Average the colors together. I computed the affine transformation matrix between all the corresponding triangles, used these matrices to perform an inverse warp, and interpolated the points afterwards.
Left: My face, Right: My roommate's face, Bottom: The midway face
The morph sequence creates a smooth warp from my face to my roommmate's face. The starting image of the sequence is my face, and the final image of the sequence is my roommate's face. I set both warp_frac and dissolve_frac to 0 at the start, and incremented them by 1/44 for every frame, resulting in a total of 45 frames.
Morph sequence gif
For this section, I used the neutral expression faces from the FEI face database. I went through all the faces and their point annotations and created an average shape. Then I warped all the faces into this average shape, and averaged the result to create the mean face.
Below is the average face of the population:
Here are some examples of faces in the dataset being warped to the mean shape:
Left: Original image, Right: Morphed to mean shape
Here are the warpings of my face into the average face (left)
and the average face morphed into my face (right)
To create a caricature, I used negative values for warp_frac, which causes the features of my face that deviate from the mean to be emphasized. As a result, this exaggerated my smile (because the mean is not smiling) and also made my eyes smaller.
Left: warp_frac = -0.2, Right: warp_frac = -0.4
I found an image off the internet for the average face of a Chinese woman:
Here are the results of morphing shape only, morphing appearance only, and morphing both:
Clearly, the morph of both shape and appearance did the best since the colors are smoothed out as well.