Overview In this project, I used inverse warpping to create face morhing pictures. I first labeled some key facial features, then I make a Delaunay triangulation based on those points. Next, I applied inverse mapping to create a sequence of "midway" images. Played after each other, these pictures form a face morphing gif.
Approach I collected 2 sets of points on the 2 images I want to morph in the same order. Then I compute a Delaunay triangulation on the mean of these 2 point sets.
I picked the following pictures.
I first loop through each triangle from Delaunay triangulation and compute an affine transformation matrix for each one of them. Then I take the inverse of these matrix, because we are doing inverse warpping. Looping though each triangle in our target shape, I use the polygon function to get the row and column index of pixels within polygon. Then I use the inverse matrix to map this area to our original image. Since it should be a one-to-one mapping, we can copy the colors over from the original to the target.
Doing above midway face 45 times, with different warp_frac (used for warp img to intermediate shape) and dissolve_frac (used to combined 2 warpped images), I can get a gif after I put the results together.
I used Danes dataset. I read in the images and the .asf files for points. Then I added 4 more points on each corner. I averaged the key points of the population and make a Delaunay triangulation on that. Then using the average points and triangulation, I warpped all the faces to this shape.
Then I took an average of all the warpped faces to get the mean face.
To make a Caricatures, I simply added more weights to the shape of my face before I compute the average shape between my shape and the mean shape. I do so by makeing an enhanced shaped which equals to k*(my shape - avg shape) + my shape, k in [0, 1]
Here are the results:
Bells and Whistles
I chooes to find out my look if I am a girl. So I find an avg face of Chinese woman, I morphed my face to that.