Project 3: Advanced Image Processing
In this project, we delve into more advanced image processing techniques, exploring complex algorithms and their applications in computer vision.
Correspondences and MidWay Face
I chose to use myself, and LeBron James as my two pictures. The goal is to morph the two pictures into a midway face, and eventually get them to morph into one another. The first step is manually selecting similar points. The points I chose were mainly defining facial features, like eyes, mouth, nose, etc.
original Justin Picture
original Lebron Picture
computed midway Picture
Justin with Delaunay
Lebron with Delaunay
Midway with Delaunay
After choosing the correct correspondeces, we computed the midway face. To do this, we first computed the affine function to map the triangulations from my face to the ones in the midway picture. Then, we warp the triangle by using the computed matrix.
Face Morphing Animation
Then, we extended just calculating the midway state to creating a gif of me transitioning to LeBron. To do this, we had a warp fraction and cross dissolve fraction, which would tell how much of geometry of the first picture to use, and how much color of the first picture to use. Refresh to reload the gif.
Morphing Animation: Justin to LeBron
This is the resulting transation from me to LeBron.
Mean face of population
Next, we created the mean face over a given dataset of faces. I used the FEI Face database, and I used their preset frontal images spatially normalized dataset, mainly because it was manually annotated already for me. Here is the mean face.
average image
As you can see, the image is pretty blurry, as there are many faces that we are averaging over.
Now, we'll morph some faces into the average face.
Original
Original
Original
Original
Original
Warped
Warped
Warped
Warped
Warped
As we can see, some images are better than otherse, but as a whole, some look pretty natural!
Me vs Mean Population Face
Here, we try warping my face onto the average face of the FEI dataset, and we try morphing the aerage FEI dataset onto my geometry.
Original
Original
Avg on Justin
Justin on Avg
As we can see, not a very good result! I have a few theories for this -- one, human error -- I could've done a better job on matching the coordinates up. Especially the nose, and the forehead area. Two, the facial features and my facial features just aren't very compatible. As someone with a thinner face, it's very hard to warp myself onto a more circular face, as the average is. Maybe it would've been better do try to warp someone like my dad, who has a more similar facial shape to the average to start with.
Caricature
Finally, I created a caricature of myself. All I did was to make the differences between the coordinates of the average image and my image more pronounced, using a factor alpha. This is the result of having an alpha of 1.5.
Caricature Justin
Bells and Whistles
Finally, I made a video of myself growing up. I put it behind a song of "dancing queen", which I felt was fitting because the final picture is me at my senior prom, where I was 17 (+1).
(You are the dancing queen, young and sweet, only seventeeeeeen)