← all projects
Computer Vision · October 2024 · 1 min read

Face Morphing with Delaunay Triangulation

Smooth warping between two faces via point correspondences, Delaunay triangulation, and affine warps per triangle. Plus: population mean faces and caricature generation by extrapolation.

PythonNumPyscikit-imageComputer Vision

Delaunay triangulation meshes on two faces — ~50 manually-annotated landmarks each, triangulated to maximize minimum angles. Every pixel in the morph is warped by its containing triangle via affine transform. The mesh is what makes smooth identity transitions possible.

The Triangulation

Parham triangulation Conor triangulation Elon triangulation Christian triangulation

~50 manually-annotated landmarks per face. Delaunay triangulation builds a mesh that maximizes the smallest angle, avoiding sliver triangles that would warp poorly. Every pixel gets warped by whichever triangle contains it.

Morph Sequence

Five frames from a 46-frame morph. α controls both the shape blend and the cross-dissolve weight — landmarks march across, pixels fade across, and the identity slowly shifts.

Morph animation
The full animation: 46 frames at 30fps. Notice the eyes shift first — they're the strongest landmarks. The jawline takes longer because it crosses many more triangles, each contributing a partial pull.

Mean Face & Caricature

Population mean face My face warped to mean shape Caricature — α=1.5 extrapolation

Left: the population mean of 40+ Danish faces — landmark-averaged, then appearance-averaged. Center: my face warped to the mean’s shape (still my texture, average proportions). Right: a caricature at α=1.5 — instead of interpolating toward the mean, extrapolate away from it. Whatever made my face distinctive gets exaggerated.

#face-morphing#delaunay-triangulation#affine-warping#image-interpolation

Related projects