CS194-26 | Fall 2020

Project 3 - Face Morphing

Susan Lin


In this project, we learned to morph images into each other by combining warps and cross-dissolves.

Defining Correspondences

For this project, I decided to morph my face with Merlin, a character from the BBC show Merlin. To start off, I selected corresponding points on the two images. I then created a triangulation of the points to set up for the next few parts.

Selected Points on Merlin

Triangulation on Merlin's Face

Selected Points on my Face

Triangulation on my Face

Computing the "Mid-way Face"

To compute the mid-way face, I took the following steps.

  1. Compute the average shape (average the keypoints)
  2. Warping both faces into that shape (by transforming each triangle through a calculated affine transformation matrix)
  3. Averaging the colors together

original image of my face

mid-way face of Merlin and I

original image of Merlin

The Morph Sequence

To compute the full morph sequence, I warped and cross-dissolved the faces in a way similar to the previous part. But this time, instead of using 0.5 and 0.5 as the parameters, I weighted them from 0 to 1 in increments of 1/45 to create a gif with 45 frames.

The "Mean face" of a population

I decided to find the mean face of the population of Danes. I did so by doing the following

  1. Calculate the average face shape (in the form of target points among the population).
  2. Morph each of the faces in the dataset into the average shape.
  3. Compute the average face of the population and display it.

Population Average

Population Average with Points

My face onto Average Geometry

Average Face onto my Geometry

Example 1 Original

Example 1 Morphed

Example 2 Original

Example 2 Morphed

Example 3 Original

Example 3 Morphed

Caricatures: Extrapolating from the mean

Using the population mean from the previous step, I made caricatures by using alpha values outside of 0 and 1.

Using an alpha value of -0.5

Using an alpha value of 1.3

Bells and Whistles

I chose to shift my face towards the average face of a German woman. I primarily used the warping and cross-dissolve functions I created in prior parts, but this time, I had to control the warping and cross-dissolve parameters separately.

My Face

The Average German Woman Face

changing just the shape of my face

changing just the appearance of my face

changing both the shape and appearance of my face


Overall this was a very fun project! It was quite interesting to learn the computation that goes behind face morphing.