CS 194-26, Fall 2020

Face Morphing

Charley Huang, CS194-26-acg


In this project, I played around with image morphing and warping. For my first morphing animations, I used a picture of myself and morphed it into both my dad and Justin Bieber's mugshot. I was originally just going to morph me and Justin Bieber, but I thought it would be interesting to see how a morph between me and my dad would look since we've always been told we look alike.

Defining Correspondences

For the first step of image morphing, I wrote a function that takes allowed me to select points on any image to use as correspondences for morphing. These correspondences are reference points so that morphs between images go smoothly. I chose 39 points along the face, and then computed the Delaunay triangulation for each image.

Corresponding Points
Delaunay Triangulation
Justin Bieber's Mugshot
Corresponding Points
Delaunay Triangulation
My Dad
Corresponding Points
Delaunay Triangulation

Computing the "Midway" Face

Before computing my morph sequence, I first computed the average face of myself and Justin Bieber's mugshot and myself and my dad. This was also the middle picture in the morphing sequence. In order to create this image, I computed the average shape by averaging the corresponding points, warped both faces into that shape by applying an affine transformation to each triangle in the Delaunay triangulation, and then averaged the colors to create a cross-dissolve effect.

Justin Bieber's Mugshot
Midway Face
My Dad
Midway Face

As I predicted, my dad and I have very similar features, and our midway face looks quite similar to both of our pictures.

Morph Sequence

Next, I created a morph sequence by applying the same procedure as I used to compute the midway face, but changing the ratio that each image contributed to the final average. I computed 45 midway images with differing warp fractions and turned them into the morphing animations below. The warp fraction started at 0 and increased by 1/45 for each image in the morph sequence.

Morphing into Justin Bieber's Mugshot
Morphing into my Dad

The Mean Face of a Population

Using the initially released 37 images that was used in the average Danish computer scientist project. Using the points they selected for their project, I computed the average face myself using my own algorithms. I included some example images of photographs used in that project. After computing the average face, I warped each of the original images into the shape of the average face.

Mean Face of Danes

Image 1
Image 12
Image 30
Image 1 Warped
Image 12 Warped
Image 30 Warped

I also warped my own face into the average Danish face shape and morphed the average Danish face into my face shape.

My Triangulation
Average Dane's Triangulation
Morphed into Dane's Shape
Average Face
Morphed into my Face Shape


For this part of the project, I used this average Danish face and used it to identify and amplify my most prominent features to create a caricature. Essentially, I found the difference between the average Danish face shape and my face shape using my defined corresponding points. Then, I multiplied that difference by some factor "x" and added it back to the shape of the average image. I used "x" values between 0 and 3, increasing my "x" value by 0.5 each iteration.

x = 1 (basically original)
x = 1.5
x = 2
x = 2.5

These caricatures showed me that the most prominent features of my face are my triangle shaped hair-line, my eyebrow arches, my smile, and my short and round head.

Bells and Whistles

For my Bells and Whistles, I used all the functions I wrote to create a music video showing the members of the popular former boy band One Direction. I hand selected all the corresponding points for each image and then created morph sequences of 45 images from each image to the next. My music video showed the aging of each member over the past decade by morphing them into their older selves and then into the younger version of the next member.