CS194-26 Project 3 Face Morphing

Daniel Lin

Defining Correspondences

The first part of the project was to take two separate faces, and create a midway face between them, taking into consideration the shape and the color of both images. We start with two images, one of my friend Jensen, and the other his favorite running back from Fantasy Football, Ronald Jones.

Ronald Jones
To begin the face morphing, I labeled multiple points across both of their faces, and I tried to keep it consistent between points, such as a point on Jensen's mouth should correlate a similar point on Ronald Jones' mouth. I computed the average points, and then computed the Delaunay triangles on the averages of the labeled points. These triangles essentially represent where certain points will get mapped to after the warping.
Jensen with Average Dots
Rojo with Average Dots
Jensen with Average Triangles

Computing the Midway face

Then, we morph each individual set of triangles into the average triangle shape, and we average out the colors between the two images. The individual warped images and the final midway image is below.
Jensen Morph
Rojo Morph
Midway Image

Morph Sequence

We see that we can compute the midway face, so we feel like we can scale this to show frames in-between. We change the weight of the color and the shape of the morphs from one end to the other, and we compute this weighted average face at each step. Below is a result of that.
Jensen to Rojo Sequence

Computing the mean face of a population

Using the same technique as above, we can compute the mean face of a population by finding the average shape and morphing all images to that shape. I took a sample of 40 Danish scientists and computed the mean face. First, we show 4 example scientist.
Example Scientist
Example Scientist
Example Scientist
Example Scientist
I then computed the average face shape and morphed each face into that shape.
Example Scientist with Mean Shape
Example Scientist with Mean Shape
Example Scientist with Mean Shape
Example Scientist with Mean Shape
I then computed the average color and put all the faces together, and here is the result.
Mean Face
I then wanted to see if we can morph Rojo into the mean face. Here is Rojo morphed into the mean face. Due to some slight inaccuracies in labeling, the face looks a little warped.
Average Danish Face
Rojo Original Face
Rojo into the Average Danish face shape
Similarly, I decided to see if I could morph the average Danish face into Rojo's. Below are the results.
Rojo Original Face
Average Danish Face
Average Danish face into Rojo's face
As you can see, the possibilities are endless for what we want to morph into each other.


Now that we can morph faces from one shape to the other, we can create caricatures to exaggerate features on one face compared to the other. Say we have two images, and we want to show the exaggerated features of the first image from the other. What we can do is the subtract the second image from the first image, and scale the difference, and then add the result back to the first image. This removes similar features and exaggerates the first features that are different from the second.
First, we show Rojo's face and the average Danish face.
Rojo Original Face (scaled difference = 0)
Average Danish Face
Then, we show the different scaling factors and how they affect the caricatures.
Rojo Original Face (scaled difference = 0.2)
Rojo Original Face (scaled difference = 0.4)
Rojo Original Face (scaled difference = 0.6)
Rojo Original Face (scaled difference = 0.8)
One noticeable difference is that Rojo's nose gets smaller and his eyes get bigger as the scaling factor increases.

Bells and Whistles

I decided to make a cool video of the different Joker's throughout the years. Below are the 4 jokers.
Jack Nicholson Joker
Mark Hamill Joker
Heath Ledger Joker
Joaquin Phoenix Joker
Below is a short video of the transformation with some classic joker audio playing over it.