SiliconIntelligence

7.1 Flesh Toning

Flesh toning identifies flesh colored pixels in an image. The commonly used RGB color space is not well suited for flesh toning because skin color occupies a wide range in primary color space. Variations due to lighting and ethnicity are hard to deal with and skin-like colors on walls and clothing are harder to discriminate. However, skin colors are tightly clustered in color spaces like HSV. Flesh toning can be done by converting pixels from sample images into the chosen color space and making a scatter plot with two colors, one for flesh pixels and one for nonflesh pixels. A boundary is then drawn around flesh tone clusters. This boundary is then approximated by curves, which can be described by simple geometric equations. In the image under test, any pixel that lies inside this new approximated but easily described boundary is considered to be a flesh pixel.

The base algorithm involves transforming the RGB color space into the NCC (Normalized Color Coordinates) space using the simple equation $r=R/(R+G+B)$, $g=G/(R+G+B)$. In this space flesh pixels occupy a space bounded by two parabolas and maximum and minimum x-axis values. Applying two inequalities of the form $ax^{2}+bx+c$ to the color coordinates will predict if the pixel is flesh colored or not [90]. While this algorithm is simple and achieves good discrimination, it was observed that it tends to classify certain shades of blue found in clothing as a skin color. A second algorithm was used to transform the RGB value of a pixel to an HSV (Hue, Saturation, Value/Luminance) value. In the HSV space, flesh color is tightly clustered allowing the use of four simple inequalities for flesh tone [14]. In practice the HSV based algorithm generates too many false positives. However, the consensus of the HSV and NCC space algorithms produces good results. The output of this phase is a bit mask of the same size as the image where a bit is set if the corresponding pixel is flesh colored.



Binu Mathew