I initially defined correspondence points on each face based on what I thought were important facial features. These points (shown in Fig. 2) were the anchor points I used to align each face during the transition. Then I used a Delaunay triangulation function provided by scipy to find a triangulation of the midpoints between the two sets of points.
The first step to getting a true morph is to find the midway face between the two images. Fig. 4 was obtained by first reshaping both Fig. 3 and Fig. 5 to have their correspondence points be equal halfway in between the two of them. Then each of those images were taken at half intensity and combined together to produce the final image.
The mean face of the Danish group of computer scientists (Fig. 10) was computed by taking a database containing a collection of images of faces with correspondence points on them and performing my image transformation to transform each fact to the average shape of all the faces. Some examples of faces before and after the transformation to the mean can be seen in Fig. 7 - Fig. 10. After this was done I averaged the color from each of the transformed faces to obtain the final "mean" Danish computer scientists.
Additionally, I experimented with taking my roommate Andrew's face and transforming it to the mean Danish shape as well as taking the mean Danish face and transforming it into Andrew's shape. The sizes of the images were slightly different which led to some strange masking results but the images still make sense (Fig. 11 and Fig. 12)
Caricatures can be created by extrapolating from the mean. This was done by taking Andrew's face and the mean face of all Danish female computer scientists. Instead of computing a midway face I took Andrew's face and extrapolated past the mean of the average female face to obtain the result in Fig. 13.
For the bells and whistles I did a face morph between all the members of my apartment (with obtained consent to be shown on this website). The result can be found here