This project fundamentally focused on using affine transformation matrices to morph features on one face to another. We first annotated points of relevance on each of our target faces then used a Delaunay triangulation to divide up each image into a series of triangles. Given the average triangulation over the faces we sought to morph, we computed an affine transformation between each triangle in the source and destination images, determining the output images pixel values using this affine transformation. Using this same triangulation technique we created videos of face morphs as well as computed the population averages for a set of images.
In order to compute correspondences we first selected pairs of corresponding points using the scheme defined in the project specification. The results of this application are shown below (additionally pinning the corner points)
|
|
|
Using the technique described above we computed the affine tranformation between two pairs of triangles. We then generated our midway image by for each triangle and for each pixel finding the corresponding point in the original image (using the affine warp) and then mapping the value at that point to the output image.
|
|
|
To compute the mean face of the Danes population using the provided labeling we first iterated through all of the given images and feature annotations and generated an average over all of the labeled points. This avg_coordinate_feature set was used to define the triangulation that each face was subsequently morphed to. We then morphed each face to the average triangulation and computed an average over all the faces in the set. The following shows some of the intermediate results as well as a depiction of the average danes. Note that the averages were only taken over the neutral expression forward facing males.
|
|
|
|
|
|
|
|
Alphas = {0.0,-0.2,-0.4,-0.6,-0.8} |
|