Monday, March 25, 2013

Bubble Face

So right now I'm mostly working on the plumbing aspects of the camera project, but I've also been working on some prototyping related to facial recognition in Matlab.  I made this video on YouTube illustrating the "bubble face" algorithm I've built to identify the bounding region around human faces in a robust fashion. 



It can be summed up as:

  1. Grayscale
  2. Shrink
  3. Belligerent bells (difference of Gaussian HPF)
  4. High/low edge detection
  5. Morphological filter (1x contraction, 1x dilation)
  6. Bubble Face
The bubble face algorithm itself blows up an ellipse like a balloon with the individual nodes getting "tied up" by edge features.  Every node is attached elastically to its nearest neighbors though, so the balloon can "pull through" features that don't fit.  It stops inflating when it detects something "reasonably elliptical" (based on coefficient of variance of the anchor point radii currently tied to edge features - the red points) and relaxes for a bit (which smooths out the distortion) before inflating again.  It does 3 cycles of this and tends to do a pretty good job of bounding facial features as long as it originates in a location near-ish to the center of the face.

I'm a long way off from thinking about porting this to the pi, but using pi to do some image and audio signal processing will be something I'll get to once I've got a working platform.


No comments:

Post a Comment