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
,
. 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
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.