CS 180 Project 3 - Geoffrey Xiang

Part 1: Defining Correspondencies

To begin morphing images, we need to first define corresponding points across the two images. Using this tool, I manually selected corresponding points in the same order across two images. I used key facial features such as the eyes, nose, and mouth in order to base my correspondences.

Geoffrey
Geoffrey with points
Vincent with points
Vincent
Geoffrey
Geoffrey with points
Sadie with points
Sadie

Part 2: Computing the "Mid-Way Face"

We can now create midway faces! Using the labeled correspondence points, I ran the Delaunay algorithm to create triangular regions.

Geoffrey
Geoffrey with triangles
Vincent with triangles
Vincent
Geoffrey
Geoffrey with triangles
Sadie with triangles
Sadie

We can now use the triangles to create midway faces! We first warp the face shape to an average shape. This involves averaging the correspondence points across both images, then computing a triangulation for the average points. This enables us to compute a transformation matrix between the average shape and the shapes of both images. Using this transformation matrix to inverse warp color values from each of the two source images, we can then average the two values per pixel in order to cross-dissolve the images.

Geoffrey
Gincent
Vincent
Geoffrey
Gadie
Sadie

There are some pretty noticeable differences between each of the two images. Relative to me (Geoffrey), Vincent's mouth is more open (less teeth), and his eyes are tilted upwards. Sadie has long hair. These differences lead to slight discrepencies in the midway images that may not look super natural. The majority of the features across the faces do seem to be properly morphed together though! I got a slightly more natural-looking result from these two EECS faculty members:

Abbeel
Abbak
Arcak

Part 3: The Morph Sequence

With a very similar process used to compute midway faces, we can now create a morph animation between two faces! Instead of one average image, we now make 50 intermediate images, each warping and cross-dissolving an incremental amount between the two images. The results use 1/50 increments for warping and cross-dissolve, leading to 50 frames. This creates a seamless transition between each source image to destination image.

Geoffrey
Gincent
Vincent
Sadie
Gadie
Geoffrey
Arcak
Abbak
Abbeel

Part 4: The "Mean Face" of a Population

Now, given a large amount of labeled faces from a popuation, we can get the average face. Similar to part 2 when we computed the midway face between two images, we can scale this process for hundreds of images. We first find the average set of points to compute Delaunay triangles, then warp each image's triangluation to the average triangulation we just computed. Then using the same inverse warping process to extract pixel values from each of the hundreds of images, we can average all of those values per pixel to get the "mean face" of the population! I used the FEI dataset to compute the average face and separated the population into smiling and neutral expressions. We can see that the area around the faces is pretty blurry, likely due to how the images have greatly varying backgrounds and details outside the facial region.

Average Neutral Face
Average Smiling Face

Taking a closer look at individual images within the datset, we can warp an image to the average facial expression for the corresponding subpopulation. Keep in mind the average of all of the warped faces led us to our "mean faces" earlier.

Original Neutral
Warped to Average Neutral
Original Smile
Warped to Average Smile
Original Neutral
Warped to Average Neutral
Original Smile
Warped to Average Smile
Original Neutral
Warped to Average Neutral
Original Smile
Warped to Average Smile

We can go even further with this and morph my own face with the average face of the FEI dataset. Since I'm smiling in my photo, I chose to morph with the smiling subpopulation. These are the results of morphing my face to the average smile, and morphing the average smile to my face.

Geoffrey
Geoffrey as Average Smile
Average Smile
Average Smile as Geoffrey

Part 5: Caricatures: Extrapolating from the Mean

Again using the FEI dataset mean faces, we can produce caricatures through extrapolation. By giving the correlation points in my image a weight of 1.5 and the correlation points in the average FEI smile a weight of -0.5, I can warp my face into an image that more heavily accentuates the features of my face compared to the FEI dataset smiles. Since the dataset is composed to Brazilian faces and I'm Chinese, the resulting image definitely exaggerates the differences.

Geoffrey
Made in China Geoffrey

Bells and Whistles: Smile Removal

The FEI dataset conveniently allowed us to compute the average neutral facial expression. Since the current image of myself is smiling, we can use that to wipe off my smile. We can achieve this with a direct warp with the average neutral expression. However, we can go further and cross dissolve with the average neutral expression (which just morphs the appearance). Combining the two both removes my smile and changes my appearance to be closer to Brazilian. Since the neutral expression generally involves no teeth and my original image has teeth, there will still be remnants of them in the morphed image.

Geoffrey
Average Neutral Expression
Shape Morph
Appearance Morph
Shape & Appearance Morph