In order to define the facial features for morphing, we must first select corresponding points in each image, and compute a triangulation which subdivides each part of the face. For best results, this Delaunay triangulation is computed for the midpoints between the corresponding points.
With the average shape of the face, we can then compute affine transformations for each triangle. Using these transformations, we can warp the coordinates of the average face shape to get the triangles' corresponding coordinates in the original faces. The 'average' face is then simply the mean color of the pixels in each transformed triangle.
By parameterizing the weight of each facial shape and color in the computation of the average face, we can interpolate from one face to another. Playing a series of small interval interpolations in quick succession results in a face-morph video.
Rather than computing the mid-way face for two faces, we can generalize this method to a whole population of faces to find the 'average' face of a group. Using this dataset, I have done this for the average Danish face.
All point correspondences have to be the same for every image in the dataset.
We can morph individual faces into the shape of the average face.
After morphing all faces into the average shape, we can then average the colors of each face to get a mean face.
We can use the average dane face, and 'project' its shape onto other faces. Contrarily, we can project the average face onto the shape of other faces.
If we extrapolate past the average face, we can create charicatures of specific faces.
I could not easily take a picture of myself to align with the dataset, so I found this similar image of an Indian photojournalist online to use.
By projecting this face onto the average face of the Danes, we can attempt to change the appearance of his race.