Project 5: Face Morphing

Diana Huang (dkh) - March 26, 2010

Description

For this project, we generated an interpolated average of two different faces. To do this, we morph each face so certain points are lined up. We interpolated each image such that a few different points are constrained to line up, and the rest of the image warps around these particular points.

To find the correct warping of the other points, we use the method of Poisson fill to find the correct offsets for each pixel. This method involves creating a large system of equations that can be solved using the known offsets for certain points.

In order to determine the known offsets, we pick out the corresponding points on each image. For this project, I used 16 points for each face. The positions of the points I used are shown below.

Results Images

For the most part, the images are not great. Perhaps with more precisely placed control points, the images would work better.

While working on this assignment, I discovered that the warping worked slightly better with fewer control points. This is possibly due to the fact that using fewer control points meant that the control points used had more 'weight' amongst the other images. Also, using fewer points meant more of a focus on the 'better features, like the eyes, mouth, ears and nose, rather than the jawbone and hair which are much less important to match up correctly.

I also wrote some code that animates the morphs between two images.

Animation of a morph between a few different images

Average with 23 control points:

Average with 16 control points:

A few of the better averages between two images:

And a few of the worse ones: