Project 3: Face Morphing

Oleksii Volkovskyi


1.1: Defining Correspondences

I started by labelling keypoints on George Clooney's and my face.
Then I compute a triangulation of both
After picking keypoints, I averaged the two sets of key points to produce a set of average keypoints. I used the Delaynay triangulation package to compute a triangulation.

Original Oleksii
Original George
Oleksii with triangulation on average of keypoints
George with triangulation on average of keypoints

1.2: Computing the "Mid-way Face"

I warped both faces to the average shape and cross-dissolved.
I iterated through all the triangules and compute an inverse warp by inverting the matrix of one triangle and multiplying by another.
This inverse warp created a mapping of all the points in the image, which I then used to blend the colors together.
Original Oleksii
Oleksii morphed to avg shape
Mid-way face (Oleksii + George)
George morphed to avg shape
Original George

1.3: The Morph Sequence

For the morph sequence, I defined two variables that would set the interpolation between the two shapes, and interpolation between the two colors.
Warp fraction of 0 corresponded to using one face (in this case George's) and dissolve fraction did the same for color.

Here's a a 60-frame warp of Oleksii to George:
Morphing Sequence

1.4: The "Mean face" of a population

I computed the mean face of the Danish programmer's faces database.
I did so by reading in the points and averaging them to produce the mean shape.
Below are three programmers morphed to the mean shape.

Original Face 1
Morphed Face 1
Original Face 2
Morphed Face 1
Original Face 3
Morphed Face 3


Then I averaged the colors from all the images after warping to the mean to get the mean dane face.
Average Dane Face


I warped my face to the average Danish shape and other way around.
I ran into an issue with the borders and my hair since the dataset did not have points there.
Oleksii's Face
Oleksii to Average Dane Face

1.5 Caricatures: Extrapolating from the mean

I created charicatures by changing the warp fraction under 0 and above 1.
This creates an interpolation of points farther than my face is from the mean shape.
Alpha = -0.25
Alpha = 1.25
Alpha = 1.5

1.6 Bells and Whistles: Change age/gender/ethnicity

I changed my own gender by computing the mean of females in the dataset and morphing to it.

My Face
Average Danish female's Face


Here are three gifs of me morphing into female shape, color, and both.

Morphing Just Color
Morphing Just Shape
Morphing Shape and Color