COMPSCI 180 Project 3: Face Morphing
Kaitlyn Chen
Introduction:
This project aims to morph (a simultaneous warp of the image shape and a cross-dissolve of the image colors) two faces, find the average face of a population, and create a caricature of a face. The underlying technique used to complete all these tasks involves selecting correspondences on original images, creating a triangulation for these points, implementing an affine wrap from triangles in the original images to the average image, and creating an inverse wrap.
Part 1 Defining Correspondences:
I morphed together the faces of actresses Emma Watson and Natalie Portman to create their midway shape and face. The portraits I used of them are by the photographer Martin Schoeller, who’s style is consistent through his work, so adjustments were not necessary. I first need to define correspondences that capture the key points of their faces. I used a total of 66 correspondences, including 4 for the corners of the images. I used this program to select and label the correspondences.
I computed a Delaunay triangulation at the midway shape, the average of the two point sets.
Part 2 Computing the "Mid-way Face":
I computed the midway face of the Emma Watson image and the Natalie Portman image. This was done by utilizing the midway shape from part 1, warping both faces into that shape, and averaging their colors together. Warping both faces into the midway shape requires that for each triangle of the triangulation, creating an affine wrap, then an inverse wrap, then cross-dissolve the image colors by averaging the warped images.
Part 3. The Morph Sequence:
The idea of creating a morph sequence is the same as part 2. This time instead we will create 46 frames where the 0th frame is the original Emma Watson image and the 45th is the original Natalie Portman image. The remaining 44 images in between are conversely weighted from 1/45 to 44/45 to shape the geometry. I used the same weights for cross disolving. Each frame in my final gif has a duration of 30ms.
Link to Morph Sequence Gif: https://youtube.com/shorts/PjtPP9OgNsk?feature=share
Part 4 The "Mean face" of a population:
I chose to use the Danes dataset of 36 images. The images and key points of each image are stored as .bmp and .asf files respectively, so the 58 key points need to first be extracted. There was no existing key points for beyond the face of each image, so in order to output images with backgrounds and hair, I had to manually add 4 key points for each corner of the images. To create the average face of the Danes population first had to calculate the average shape and triangulation of this average shape, similar to previous pars. For each image, I morphed its shape to the average shape and divided by the number of total images. The value calculated for each image is then summed to create the average face shape. Below are some examples of portraits morphed to the average geometry, including my own portrait! Also did the opposite and morphed the average face to my geometry.
Part 5 Caricatures: Extrapolating from the mean:
I produced a caricature of my face by extrapolating from the population mean I calculated in the last step. I did so by utilizing weights outside the range of [0, 1] to distort my shape. Weights less than 0 created an image that exaggerated my own face, and weights greater than 1 created an image that exaggerated the average Danes face.
Part 6 Bells & Whistles Morphing Music Video:
I chose to make a morphing music video similar to part 3. This videos theme is my little cousin growing up. She is currently 6 years old and I took 8 images of her at different ages and morphed them together. For each morph I used 57 frames and 30ms per frame. Unfortunately kids are terrible at taking pictures so it was hard finding images that worked best, ie looking straight at the camera, similar facial expressions, non-blurry.
Link to Growing up morphing music video: https://youtube.com/shorts/mheJqzJUx-4?feature=share