Face Morphing




Defining Correspondences

Here, I morphed myself into my sister, Jessica. I started by defining 52 matching points for both the input and target image. Then, I calculated the mean of the two point sets, which I used to compute a Delaunay triangulation at a midway shape. Choosing the mean points allows me to lessen the potential triangle deformation for either image.

Me
Jessica
Me with points
Jessica with points
Mean Triangulation




Computing the Midway Face

Next, I created the midway face. For each triangle in the mean triangulation, I calculated the affine transformation matrix between the mean triangle and the corresponding points given to each image. This is used to implement an inverse warp that can be used to warp the faces from both images into the mean shape. I can also interpolate the pixel values between the two warped images to create a midway face.




Morph Sequence

Once I was able to get a midway face, I can shift the weighting for both the shape warping and the pixel color interpolation to get a series of images/frames, used to produce an animated face morph.




The Mean Face of A Population

I applied the same method used to create a midway face between two people in order to create a "mean face" of a population of people (or of multiple images/points from a dataset). Here, I use all the male forward-facing images from the Danes dataset to compute an average male face shape.

The dataset only included points around the faces, so I had to add four corner points to each image in order to preserve the background/surrounding head. This resulted in very wonkily warped heads/backgrounds. Some examples of some faces in the dataset shape-morphed into the mean-image:
Original Image
Warped Image
Warped (Just Face)
Original Image
Warped Image
Warped (Just Face)
Original Image
Warped Image
Warped (Just Face)
I also morphed my face into the average shape:
Original Image
Image with points matching dataset
My face warped to the average geometry
The average face warped to my face's geometry

Because of the dataset's exclusion of points beyond just the facial features, the parts around the face (forehead, hair, body/neck, background) ended up very wonky. I also included images that isolated the face (to remove the distracting wonkiness).

My face warped to the average geometry
The average face warped to my face's geometry

Extrapolating from the Mean

I also produced a caricature of my face by extrapolating from this mean male population. In this case, I weighted the shape average of the average male population at 1.5 and weighted myself at -0.5.
Extrapolated
Extrapolated (Just Face)


Bells and Whistles

Even though I am Vietnamese, I'm often told that I don't look very Vietnamese. I used an image provided by faceresearch.org to morph myself more towards an average Vietnamese female.
Original Image
Average Vietnamese Female
Morphed to Shape/Geometry
Morphed to Appearance/Color
Full Morph
I also tried doing the same with an average Brazilian female:
Average Brazilian Female
Morphed to Shape/Geometry
Morphed to Appearance/Color
Full Morph