Defining Correspondences

To start off the project, I needed to create a mesh of my (and a friend’s) face. To do this, I manually selected key points on our faces and used Delaunay Triangulation to triangularize the points. Below are the results

Computing the "Mid-way Face"

This came with a lot of problems, and easily resulted in the most debugging. It gave me a lot of cool and trippy images, this one being my favorite. I’m still not sure what caused this.

After fixing these many, many problems, I finally was able to compute the mid-way face.

The only minor imperfection is with the shirt, but getting the hair to blend was annoying enough, so I’m leaving it.

The Morph Sequence

After being able to compute the mid-way between two images, I next had to create a morph sequence. To do this, I changed some values to be parameters, and after not too much work, had a working way to morph between two images a desired amount. The only problem now was how unbearably slow my function was. It’d take about 4-5 seconds per morph, which was far too slow for future parts of this project. To help with speed, I coded another morph function that runs about 3-4 times as fast, but doesn’t perform the morph exactly as described in class.

The "Mean face" of a population

To find the “Mean face” of a population, I first needed the faces of a population. To get this, I went to https://fei.edu.br/~cet/facedatabase.html and downloaded frontalimages_spatiallynormalized_cropped_equalized_part1 and their corresponding annotations. Next, I computed the average coordinates of each point, and then morphed all the images onto that. This gave me a pretty good looking average face. I did this for both the neutral and the smiling faces. Note that the images are grayscale, and matplotlib renders these with the colors below and I think it’s too cool to change them.

Caricatures: Extrapolating from the mean

Finally, I morphed myself onto the mean using alphas of 1, 0, and -0.5, getting

And then morphed the average face onto my own facial feature, getting

Bells and Whistles

As an added flair, I wanted to create a morphing music video on a theme. Being the uncreative and lazy man that I am, I used the annotated dataset I already had and was comfortable using, using the theme of Halloween. I also used the morphing on a jack o’lantern, which inverted the colors for whatever reason and didn’t work very well. Here is a link to the video: https://youtu.be/FKz4hs4sLeY