Project 3 - Face Morphing

Objective

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

Conclusion

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