CS194-26 Proj 4: Face Morphing

Sean Lobo

Part 1.1: Computing a "Mid way" face

For this part of the project we had to transform faces from one to another. Below is an example: it is two original pictures and then the halfway image

Here we have a picture of George and a picture of me


Here is a half way picture of both of us


The process to compute this half way face has a few steps. First, we choose correspondance points for each image, which correspond to the same location in each image. Next, we average the points all of the points together, making sure to align corresponding points. Once we have these "half way" points, we compute a Delaunay triangles. We then iterate through every pixel, and for each pixel use an affine transform to get the corresponding pixels in both the source and target images. After grabbing the pixels we take a weighted average of each pixel and put the average pixels inside our current position.

Part 1.2: The Morph Sequence

For this part of the project we had to extend our transformation to peform a sequence of transforms and then output them into a gif. Below is the output

Computing the gif was a simple extension from the previous part. We call the previous function with varying warp / dissolve frequencies, from 0 to 1, and then stack the resulting images into a gif.

Part 1.3: The "Mean face" of a population

For this part of the project we wanted to compute the average face of a population. I choose to use the danish. Below is the average face


In order to compute the average face, we first had to morph all the danish into the average geometry. Below are some examples of original faces and their warped faces




As we can see our people are a bit warped.

Here is a picture of me warped to the average danish geometry

Evidently, I am not danish


Here is a picture of the average danish geometry morphed to my geometry

Evidently, my face is not amenable to the danish geometry


Part 1.4: Caricatures: Extrapolating from the mean

For this part of the project we had to use our previous morphing code, but instead of morphing between my face and another picture with a fractional morph between 0 and 1, we choose a value such as 1.3 to increase the parts of my face even more, creating a caricature. Below is my image, and the caricature

As you can see, my caricature (which was made by going away from the dutch) has an even narrower face and darker face / hair. This is because compared to the dutch I have a thinner face, and darker skin / hair, so when using more of my feature than 1, we exacerbate those features.


Bells and Whistles

I joined 20ish other students in the class morph video. Here is our video! https://youtu.be/h-Oow96qhck