The aim of this assignment is to produce an animation of my face morphing into another person’s face by computing the mean of a population of faces and then extrapolating from a population mean to create a caricature of my face.
Defining correspondence was done manually using cpselect in Matlab and then the points were saved and loaded into python using the scipy loadmat function. Images in Figure 1 will be used to create a morph sequence of faces.
The facial keypoints were consistently labeled using the same ordering of keypoints as shown in Figure 2 by the yellow dots.
To generate the triangulation for morphing, delaunay triangulation was implemented on the mean facial points of the above two images in Figure 2. The triangulation generated is shown in Figure 3.
To morph the two faces in Figure 1, the triangulation generated above was used as the target shape that we want to respectively warp the two faces using Affine transformation and then inverse warping all the pixels. The mid-way face that was generated from implement this process is shown in Figure 4.
Gif 1 is a video sequence of a morph from my face to the other person’s face.
In the section, the mean face of the Dane population with neutral faces was computed and it’s shown in Figure 5. The population contains 37 unique neutral faces of men and women. Figure 6 shows 6 example of individual face geometries warped into the average population shape. Their face shapes don’t appear to have significantly changed.
Warping my face geometry to the average population changes the shape of my head and my facial features. My warped face has a wide jaw, square chin, sharp nose and thin lips. These are facial features observed in the average face in Figure 5. Warping the average face into my face geometry also changes the head shape and facial features. The warped average face as a narrow jaw, short chin, round nose and full lips. These are facial features observed in the my face, see Figure 7 for results.
In this section, a caricature of my face was created by extrapolating from the population mean of the from the previous section, see Figure 8. Gif 2 shows how my face changes when you vary \(\alpha\) between [-0.5, 2]. Its observed that when \(\alpha<0\) the image looks nothing like the average face in Figure 5. When \(\alpha<0\) the image looks like my original face and when \(\alpha>1\) the image starts to become more like the average face in Figure 5.
In this section, we will change the ethnicity and gender of my face by morphing into an averaged white male face from Beauty Check (https://www.uni-regensburg.de/Fakultaeten/phil_Fak_II/Psychologie/Psy_II/beautycheck/english/durchschnittsgesichter/durchschnittsgesichter.htm). Figure 9 shows the faces that I will be morphing. Figure 10 shows the results of morphing just the shape only, appearance only and both shape and apperance.
This was a very interesting project. On top of the learning how to morph images I also learnt how to use matlab because it was more efficient to generate the facial keypoints in matlab than using python.