The method I use to solve it to use the plt.ginput() to select 44 corresponding points from each picture, and then use scipy.spaatial.Delaunay to form triangles
The points I chose are four corners, five points around each ear, four points around each eye, six points around the nose,six points around the mouse, and ten points around the face
The two photos I used are the following
Wrap both points and use the average points between two corresponding points to get an average boundary
Compute the affine transformation matrix and then reverse it
For every point in the area in the triangle formed from the average points, use inverse matrix to get the pixel r,g,b value and add it to the new image
The original images
The transformed images morphed to the averaged of all the faces in the database
The averaged face
The example face morphed to the average face, and the average face morphed to the example face
From left to right, is the anti-average effect from 1*, 1.5*, 2*
From left to right, is the hyper-average effect from 1.5*, 2*
Here is an Morphing gif of the this year's lakers basketball player's face transformation