肤色检测算法 - 基于不同颜色空间简单区域划分的皮肤检测算法

       由于能力有限,算法层面的东西自己去创新的很少,很多都是从现有的论文中学习,然后实践的。

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

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

      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 

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

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++;
    }

算法效果:

原图

                      识别结果图

原图

                      识别结果图

原图

                      识别结果图

原图

                      识别结果图

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

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++;
    }
}

原图

                      识别结果图

原图

                      识别结果图

原图

                      识别结果图

原图

                      识别结果图

误判的区域还是很大的。

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

***************************作者: laviewpbt   时间: 2013.8.17   联系QQ:  33184777  转载请保留本行信息*************************

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏简书专栏

基于tensorflow+CNN的新闻文本分类

tensorflow是谷歌google的深度学习框架,tensor中文叫做张量,flow叫做流。 CNN是convolutional neural netwo...

1804
来自专栏AI科技评论

开发 | 训练一个AI给颜值打分,公平公正!

AI 科技评论按:本文作者灰灰,本文原载于作者的知乎专栏。授权转载。 机器学习是不是很无聊,用来用去都是识别字体。能不能帮我找到颜值高的妹子,顺便提高一下姿势水...

2985
来自专栏生信技能树

点点鼠标就能完成的NMR代谢组学实战

代谢组学几乎完全不涉及生物信息学最核心的序列比对,包括武汉中科院数物所波谱国重实验室等主流科研机构都是利用化学计量学和多元统计分析方法,对通过核磁共振(NMR)...

1073
来自专栏灯塔大数据

塔趣 | 用深度学习来评判颜值,基于TensorFlow的开源项目FaceRank

导读:用深度学习来评判颜值,已开源。好友 @小灰灰 大大的「颜值评分 FaceRank」,这是基于 TensorFlow 的 CNN 模型,美不美机器说了算。...

39811
来自专栏专知

CVPR2017 VQA 任务冠军:基于双向注意力机制视觉问答pyTorch实现

【导读】在CVPR2017上举办的VQA(Visual Question Answering)比赛中,基于双向注意力机制视觉问答(Bottom-Up and T...

51211
来自专栏AI研习社

Github 代码实践:Pytorch 实现的语义分割器

使用Detectron预训练权重输出 *e2e_mask_rcnn-R-101-FPN_2x* 的示例

1412
来自专栏专知

零基础构建神经网络:使用PyTorch从零编写前馈神经网络代码

【导读】1月20日,机器学习研究人员Jeff Hu发布一篇深度学习教程,与其他的文章略有不同,作者并不介绍深度学习最前沿技术、也没有分析深度模型的优劣,而是从基...

3205
来自专栏YoungGy

LinearAlgebra_3

矩阵空间秩一矩阵小世界图 矩阵空间 秩一矩阵 小世界图 图和网络 零空间 左零空间 行空间 欧拉公式 工业用公式 正交向量和子空间 向量正交 子空间正交 矩阵的...

2189
来自专栏量子位

想尝试搭建图像识别系统?这里有一份TensorFlow速成教程

李林 编译整理 量子位 出品 | 公众号 QbitAI 从我们见到的各种图像识别软件来看,机器似乎能认出人脸、猫、狗、花草、各种汽车等等日常生活中出现的物体,但...

4517
来自专栏人工智能头条

YOLO升级到v3版,检测速度比R-CNN快1000倍

1.8K3

扫码关注云+社区