Thanks smile

In this setup, I sample at each graph node in the source image (upper left image) the local textures at specific points of the face - e.g. the nosetip, the eye corners, the cheeks, the eyebrows, the iris, etc. The facegraph has 52 nodes, so I have 52 local texture models of parts of the womans' face. The texture models are not trivial as they code arbitrary textures by complex-valued waves... fancy stuff!

To find the face in a new image, I move the center of the graph pixelwise over the destination image.

For each pixel I and compare at all 52 graphnodes the node-textures from the source image with the texture at the position of the current graph node in the new image. This comparison is powered by a mathematically function, that returns a number, which represents the similarity of the texture patch in the new image with the texture model in the graph node. The higher the number, the more similar is the texture patch with the texture model in the node.

I sum all similarities up and divided them through 52. This is the value I write in a so called similarity map - the pixel with the highest value in this map is the position in the image where a face seems to be most likely.

There are 5 similarity maps shown in which I test 5 different similarity functions. They have all pros and cons regarding quality, speed and accuracy. The Abs-Similarity function for example is fast and accurate for a very first raw guess.

Finding the face involves more steps which I will implement over Christmas and New Year's Eve, like scaling/rotating the graph and different search steps with different similarity functions and single node-positioning. For GENERAL face detection, a special so called Maximum Likelihood Estimator is trained over a bunch of faces to create a generic and independent model of a human face.