<!-- Article Starts - DO NOT ADD HTML/BODY START TAGS--><!-- Download Links -->
<!-- Article image -->
<!-- Add the rest of your HTML here -->
This article is based on a project I started this summer. Originally the project was a simple edge detection system, but now its turning into a face recognition system.
The first thing that I did done when implementing a skin filter is to convert from RGB color space
to IRgBy color space by using this formula:
I = [L(R) + L(B) + L(G)] / 3
Rg = L(R) - L(G)
By = L(B) - [L(G) +L(R)] / 2
where L is a logarithmic function.
The next thing is to find out the hue, by using this formula:
hue = atan2(Rg,By) * (180 / 3.141592654f)
if (I <= 5 && (hue >= 4 && hue <= 255))
/*not skin color it black*/
modified.SetPixel(x, y, Color.Black);
An example of how you would call the method Vision.DetectSkin(Bitmap original, ref Bitmap modified)
Bitmap original = new Bitmap(@"C:\mypicture.bmp");
Bitmap modified = original;
Vision.DetectSkin(original, ref modified);
//now if you save modified and the look at it you will see that it
//detected all the skin from the original image
As you can see from the picture the algorithm isn't perfect yet and it needs some touching up.