肤色检测

时间:2010-12-12 15:20:14

标签: colors computer-vision feature-detection

我使用以下算法来检测肤色,但它在不同的光照条件下效果不佳。任何人都可以提供任何建议,如何改进它或建议更好的方法

R > 95 AND G > 40 AND B > 20 AND
max{R, G, B} – min{R, G, B} >15 AND
|R – G| > 15 AND
R > G AND R > B
OR
R > 220 AND G > 210 AND B > 170 AND
|R – G| <= 15 AND
R > B AND G > B

http://softexpert.wordpress.com/2007/10/17/skin-color-detection/

干杯

5 个答案:

答案 0 :(得分:6)

您给定的算法是基于颜色的简单阈值处理。这仅适用于一组非常基本的条件。对于一些图片,它可能会给出非常好的结果,但作为一般检测器,它会产生不良结果。

你的第一道攻击应该是切换到不同于照明的不同颜色模型。事实上,您明确提供的链接说明了这一点!例如,HSI。就个人而言,我更喜欢用L * a * b *做一些事情,但是从RGB转换的实现将更加困难。

你应该考虑添加一些额外的先前术语,例如,孤立的像素不能是皮肤。

答案 1 :(得分:4)

皮肤颜色建模有很多方法,每种方法都有其优点和缺点。

根据您的目的选择一个。看看这些调查:

诉Vezhnevets,V。Sazonov,A。Andreeva。 A survey on pixel-based skin color detection techniques. Proc。 Graphicon,2003

P上。 Kakumanu,S。Makrogiannis,N。Bourbakis。 A survey of skin-color modeling and detection methods.模式识别,2007

答案 2 :(得分:3)

我已经使用色度成分来快速获得图像的肤色区域。

这并不完美,但如果您想要的只是快速而肮脏的方法,那就没关系。

这篇论文被Douglas Chai称为“使用可视电话应用中的肤色地图进行人脸分割”。这是一个相当古老的方法(1999年)。不幸的是,论文本身就是付费墙,但这种方法很简单:

  • 使用Cb和Cr
  • 的范围检测具有潜在肤色的区域
  • 清理图像的形态学操作
  • 使用标准偏差,进一步分离背景(低)和前景(高)
  • 进一步清理图像的更多形态操作
  • 轮廓重建(平滑曲线)以产生结果

答案 3 :(得分:3)

如果使用RGB,则会出现照明(亮度)问题。处理肤色检测的最佳方法是YCbCr成分。 Y表示亮度Cb,Cr表示色度。每个都表示为RGB颜色的加权表达式。但是你只使用Cb和Cr来识别肤色。 Y被丢弃,因为您不想在分析中使用发光体。所以使用YCbCr而不是RGB。希望我帮忙!

答案 4 :(得分:2)

请参阅我对强健手部检测的答案here,其中我推荐了一种使用颜色直方图的方法,该方法仅使用最初来自Gary Bradski(OpenCV的创建者)关于面部跟踪的论文的图像的色调和饱和度通道。它包括方法的概述以及如何检测皮肤区域的示例代码的链接。

该方法简单但对噪声和光照变化相当稳健,并且能够检测不同的肤色。无需机器学习:)。