CS180 Project 3: Face Morphing

Name: Shuai Victor Zhou

SID: 3035912996


Overview

In this project, we use correspondences (corresponding points) between faces to create morphings between them. With these morphings, we can also calculate averages of a population to find mapping of faces to the population average. Furthermore, caricatures of an individual can be generated by extrapolated from the population average.


Defining Correspondences

We first identify correspondences for images and store them within a .json file. With these points, we generate the Delaunay triangulations of the two images. Plotting the points on top of the images gives us the following:

Clooney and Kanye with their correspondences

Computing the “Mid-Way Face”

To find the “mid-way face,” we take each of the pairs of correspondences and average their positions. We then find the matrix that maps from each of the original simplices to the average simplices and then invert the matrix to find the reverse map. Using this new reverse map, we’re able to generate the mapping of each of the two photos into their average.

Original image of George Clooney
Original image of Kanye West
George Clooney mapped to the average simplices
Kanye West mapped to the average simplices
The average of the mapped photos

The Morph Sequence

In this part, we generate the sequence of an im1 morphing into an im2. This is related to how we performed the mid-way face in the previous part, with the mid-way face being when our dissolve fraction and warp fraction are both 1/2. The dissolve fraction is how much of the combined image is im1 and how much of it is im2, and the warp fraction is how close the “average” point that we’re mapping to is to im1 vs im2. Effectively, both of these should be the same value, and it will range from 0 to 1, with 0 being when our image is just im1 and 1 being when our image is just im2. For this project, we generate 60 total frames to transition from George Clooney to Kanye West, and when we combine these images into a .gif file, we get this result.


The “Mean Face” of a Population

We compute the “mean face” (average face) of a population by using the Danes dataset of annotated faces. We take the average location of all the points to find where the correspondences are for the “average” person. With these new points, we can map each of the faces in the dataset to this “average” face. Below are some examples.

By adding up all of these mapped faces and averaging them, we produce the average face of this population.

The average face of the population

We can also map my face to the average geometry and the average face to my geometry.

My face to the average geometry
The average face to my geometry

Caricatures: Extrapolating from the Mean

We can produce caricatures of ourselves by extrapolating from the mean. This is done by mapping a person’s face to the following target points:

Ptstarget=αPtsaverage+(1α)Ptsperson\text{Pts}_{\text{target}} = \alpha \cdot \text{Pts}_{\text{average}} + (1 - \alpha) \cdot \text{Pts}_{\text{person}}

When α is 0, we just have our regular face. Below are some results using different α values.

α = -0.5
α = 0.0
α = 0.5
α = 1.0

Bells & Whistles: Myself Through the Years (MV)

Here is a music video of myself morphing throughout the years.


Bells & Whistles: Face-Morphing Music Video

Here is a music video of myself morphing with my peers from CS 180.