I'm working on hand gesture recognition using C#. I'm using OPENCV for skin detection but its performance is not optimal. So I decided to do some filtering based on color space, but I do not know what color space is the most suitable for this purpose?
2 Answers
If you classify by hand sufficiently many pixels as skin/non-skin, you get a point cloud in color space that tells you about the statistical distribution of these.
Usually, automated classification amounts to defining a sharp boundary inside which pixels are deemed skin. The standard color spaces are 3D and are mappings of each other through nonlinear transforms. In all spaces, you essentially get more or less compact "potato shapes".
If you base your classifier on an empirical/simple function, such as a sphere, you need to find the space where the shape is the most spherical. Otherwise, if you use a general purpose classifier, it will learn the cloud shape on its own.
Anyway, my best advice is to normalize for lightness, as the apparent lightness of a skin depends on the amount of ambient light, which is an uncontrolled parameter. Then you reduce to 2D information, such as H-S.
Very dark or very light skins are and will remain problematic, as they convey little color information and are not discriminant.
Intuitively, HSV is the place to easily define Skin Color Hues.
Yet there is a broad work on that and even articles about the optimal Color Space for Skin Detection.
Yet, you should have a look at OPTIMUM COLOR SPACES FOR SKIN DETECTION (Alternative at IEEE - Optimum color spaces for skin detection).
According to them there is no difference in the performance as long as you create the Optimal Detector.
This actually makes sense, since all Color Spaces in the article are One to One functions it means the real thing here is to develop the correct classifier.