Face morphing!
Roma Desai | CS-194
Project 3
DEFINING
CORRESPONDENCES
To begin morphing
faces, we must first identify features or points where the two images match.
For this part, I wrote a function to take user input and store the locations of
the corresponding points. For a face, about 25 points gave a pretty good
result. Once I had the corresponding points, I computed the average of the two
sets of points and computed a Delaunay triangulation. Computing the triangulation
on the mid-way shape gives a much smoother result. A Delaunay triangulation is
especially useful because it gives us “nice” triangles which are not overly
skinny. If triangles are too skinny, they may span a longer portion of the
image which could lead to subpar results. Here is the triangulation displayed
on my two input images:
My friend Pallavi |
Me! |
|
|
COMPUTING
THE “MID-WAY FACE”
To begin morphing,
I first formed the average shape of my two image points. Then, I inverse warped
the average shape into the two before and after images. Finally, I averaged the
two warped images together to get the final result. To do the actual inverse
warping, I used an affine transformation to map each average shape triangle to
one of the image triangles. I used interpolation to ensure the transformation
would land on actual points in the images. The results are shown below:
Pallavi |
Me |
Palla-me |
|
|
|
THE
MORPH SEQUENCE
This section was
putting together all the hard work from the section before! Instead of
computing only the mid-way face, I computed 45 in-between frames that showed
the transition from one image to the other. Putting this together in a GIF, we
get the following results:
Palla-me |
Ari + Broccoli |
My brother + My dog |
|
|
|
THE
“MEAN FACE” OF A POPULATION
For this section,
I used a database of Brazilian faces to find the “typical” Brazilian face
shape. I decided to only use 50 images out of the set of 200 due to the time my
laptop takes to run. The images were pre-annotated with corresponding points so
all I had to do was read in the points. Once I had all the points, I found the
average shape, warped each image to the average shape, and then averaged all
the images together.
Here are some
examples of faces warped into the average shape and the resulting mean face:
Face 0 |
Face 1 |
Face 2 |
|
|
|
Mean Face |
|
I also tried to
warp my own face to the mean face and vice-versa. The results are shown below.
When morphing the mean to my face, you can see that the mean face got smaller
since my face is also much smaller and narrower. When morphing my face to the
mean face, you can see that my face became much larger and more rectangular to
better match the mean face.
My Face |
Mean Face |
|
|
Mean face in My shape |
My Face in Mean shape |
|
|
CARICATURES:
EXTRAPOLATING FROM THE MEAN
For this part, I
extrapolated my own face from the mean by adding more of the features that
cause my face to differ from the mean. In general, caricatures are known for
emphasizing unique features of faces. My result is shown below. One of my key
features compared to the average face is that my face is narrower especially at
the lower half of my face. Since I am moving my face further away from the
mean, the resulting image caused my face to become even narrower.
Before |
Alpha = .5 |
|
|
BELLS
AND WHISTLES
1. Roommates Morphing Video ft. our current favorite song @G-Eazy
Here, I made a video that morphed together all
of my housemates. I thought playing our current favorite song in the video was
fitting.
Check it out
below!
2.
Changing Ethnicity
For this part, I tried
to make myself into a Russian woman! As you can see, my face was made wider at
the bottom and a little longer to match the shape of the average Russian face.
Me |
Russian Woman |
Russian Roma |
|
|
|
3. Class Morphing!
Some of us in CS
194 got together and created a class morph video. Together, we created an
order, morphed each of our faces to the person’s after us and finally put all
the individual videos together accompanied with some cool tunes. Check it out
below!