码迷,mamicode.com
首页 > 编程语言 > 详细

图像处理之基础---肤色检测算法 - 基于不同颜色空间简单区域划分的皮肤检测算法

时间:2014-10-17 13:23:36      阅读:324      评论:0      收藏:0      [点我收藏+]

标签:blog   http   color   io   ar   for   sp   div   art   

本文涉及的很多算法,在网络上也有不少同类型的文章,但是肯定的一点就是,很多都是不配代码的,或者所附带的代码都是象征性的,速度慢,不优雅,不具有实用价值,本文努力解决这些问题。

      文中各算法出现的顺序并不代表算法的优越性,仅仅是作者随机排布的而已。

      2、基于RGB颜色空间的简单阈值肤色识别

       在human skin color clustering for face detection一文中提出如下简单的判别算式:

      R>95 And G>40 And B>20 And R>G And R>B And Max(R,G,B)-Min(R,G,B)>15 And Abs(R-G)>15 

    算法非常之简单,同样主要把复杂的判断条件放到后面去判断,能有效的降低程序的执行时间,参考代码:

 

bubuko.com,布布扣
for (Y = 0; Y < Height; Y++)
{
    Pointer = Scan0 + Y * Stride;
    SkinP = SkinScan0 + Y * SkinStride;
    for (X = 0; X < Width; X++)
    {
        Blue = *Pointer; Green = *(Pointer + 1); Red = *(Pointer + 2);
        if (Red > 95 && Green > 40 && Blue > 20 && Red > Blue && Red > Green && Math.Abs(Red - Green) > 15)
        {
            if (Blue >= Green)     
            {
                Max = Blue;
                Min = Green;
            }
            else
            {
                Max = Green;
                Min = Blue;
            }
            if (Red > Max)
                Max = Red;
            else if (Red < Min)
                Min = Red;
            if (Max - Min > 15) *SkinP = 255;
        }
        Pointer += 3;
        SkinP++;
    }
bubuko.com,布布扣

  算法效果:

 bubuko.com,布布扣  bubuko.com,布布扣   bubuko.com,布布扣 bubuko.com,布布扣bubuko.com,布布扣   bubuko.com,布布扣 bubuko.com,布布扣    bubuko.com,布布扣

        原图                     识别结果图                                                   原图                识别结果图

     由上述结果似乎该算法得到了过多的皮肤区域,然后就是算法更喜欢美女一些(^_^)。

     3、基于YCbCr颜色空间的简单阈值肤色识别

  该算法则更为简单,将图像转换到YCbCr颜色空间,然后按下述计算式判断是否属于皮肤区域:

    (Cb > 77 And Cb < 127)  And (Cr > 133 And Cr < 173)

      关于RGB和YCbCr颜色空间的转换的优化算法,可参考本博客相关文章。

      由于当初写这方面的时候没有注明该算法的出处,现在也没从提起了。

      代码参考:

for (Y = 0; Y < Height; Y++)
{
    Pointer = Scan0 + Y * Stride;
    SkinP = SkinScan0 + Y * SkinStride;
    for (X = 0; X < Width; X++)
    {
        Blue = *Pointer; Green = *(Pointer + 1); Red = *(Pointer + 2);
        Cb = (-176933 * Red - 347355 * Green + 524288 * Blue + 134217728) >> 20;
        if (Cb > 77 && Cb < 127)
        {
            Cr = (524288 * Red - 439026 * Green - 85262 * Blue + 134217728) >> 20;
            if (Cr > 133 && Cr < 173) *SkinP = 255;
        }
        Pointer += 3;
        SkinP++;
    }
}

 

 bubuko.com,布布扣 bubuko.com,布布扣  bubuko.com,布布扣  bubuko.com,布布扣

 

  bubuko.com,布布扣       bubuko.com,布布扣   bubuko.com,布布扣    bubuko.com,布布扣

              原图                         识别结果图                                                   原图                识别结果图

     误判的区域还是很大的。

     还有一种是基于YUV颜色空间进行的肤色识别,似乎也不太准确,可参考http://www.doc88.com/p-97381067005.html

 

 http://blog.csdn.net/songhhll/article/details/12612601 有些图片复制不了可以先复制图片 ,然后在选择复制就ok了

图像处理之基础---肤色检测算法 - 基于不同颜色空间简单区域划分的皮肤检测算法

标签:blog   http   color   io   ar   for   sp   div   art   

原文地址:http://www.cnblogs.com/pengkunfan/p/4030735.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!