How to do skin color modeling and classification using histogram model.

14 views (last 30 days)
I have 800 image skin color dataset which i want to use for skin color classification. how can i see the distribution of skin color pixels in matlab so as to decide the thresholds for skin color segmentation.

Answers (1)

Image Analyst
Image Analyst on 14 Feb 2015
You need to build a 3 dimensional gamut for color segmentation. The problem is that the gamut of skin, if you're going to consider all skin tones for all races, is not a shape that can be easily thresholded in any color space. It's a banana or boomerang shape which is a strange shape to carve out - you can't use a high and low threshold on color space planes and be perfectly accurate, because then you'd be saying gray things in the image are skin. But you need neutral colored regions being called skin for some cases like very pale people or very dark people, but just not L or V values that are in between. However if you know you don't have grays you might be able to get something that works. See attached demos.
  3 Comments
Image Analyst
Image Analyst on 16 Feb 2015
How would that work? You'd have to have classes defined and then for some arbitrarily colored pixel determine the probability that it belonged to each of the classes and then assign it to the nearest, most likely one. Well, that all comes down to having the skin gamut defined. If you want you can use the LAB values I gave above - those are experimentally determined points from a subset of thousands of real people that we actually measured with a spectrophotometer. You can see in the image above how well it works. You can adjust the thresholds to capture more of the skin. Keep in mind that in general, in some arbitrary photo, there may be pixels in there that aren't skin but are the same color as skin, such as brown colors, etc.
Naeem Shaikh
Naeem Shaikh on 20 Feb 2015
Edited: Naeem Shaikh on 20 Feb 2015
i have prepared a dataset of approx. 830 images by manually cropping the skin color areas from the original images of different peoples with different races, color, background, illumination. The background has been set to black. now i want to use all these images to train a classifier for skin color identification from the input video/images so as to use it as a first step for my face detection problem. The point i want to understand is, how to use all these images for 2d/3d histogram plot and read bin values for probability estimation. also i want to understand how to use these images for building a single gaussian or gaussian mixture model.
Fig. Sample image from my dataset of skin color images

Sign in to comment.

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!