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

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

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

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

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

时间: 2024-10-13 23:48:19

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

Java网络编程基础(四)---基于TCP的简单聊天系统

实现思路: 要实现消息的发送,客户端每次在连接服务器端时都需要告诉服务器自己的用户名,以便能够接收到发送给自己的消息.服务器端在接收到消息时,能够查到对应用户名的客户端,将消息发送给该客户端. 服务端需要实现多个客户端的同时请求,因此需要使用多线程来处理客户端的请求.同时,它还需要保存一份用户名列表,以便在转发消息时能够查找到对应的用户. 对于客户端来说,客户端需要能够随时收取服务器端转发来的消息,并能够随时通过键盘输入发送消息,因此它的读取消息和发送消息功能是并行的,需要独立的线程来实现. 实

Atitit 图像处理--图像分类 模式识别 肤色检测识别原理&#160;与attilax的实践总结

Atitit 图像处理--图像分类 模式识别 肤色检测识别原理 与attilax的实践总结 1.1. 五中滤镜的分别效果..1 1.2. 基于肤色的图片分类1 1.3. 性能提升2 1.4. --code2 1.1. 五中滤镜的分别效果.. /AtiPlatf_cms/src/com/attilax/clr/skinfltAll.java 1.2. 基于肤色的图片分类 /AtiPlatf_cms/src/com/attilax/clr/moveBySkinLow.java 生成所有图片的肤色百分

基于两步聚类的离群点检测

转载请标明出处:http://www.cnblogs.com/tiaozistudy/p/anomaly_detection.html 本文主要针对IBM SPSS Modeler 18.0中离群点检测算法的原理以及“异常”节点(见图1)使用方法进行说明.SPSS Modeler中的离群点检测算法思想主要基于聚类分析.如图2所示,可先将图中样本点聚成三类,$A$.$B$和$C$三个样本点应分别属于距离他们最近的类,但与相对类内的其他样本点,这三个点又分别远离各自的类,所以可以基于此判定是离群点.

基于Vivado HLS在zedboard中的Sobel滤波算法实现

 基于Vivado HLS在zedboard中的Sobel滤波算法实现 平台:zedboard  + Webcam 工具:g++4.6  + VIVADO HLS  + XILINX EDK + XILINX SDK 系统:ubuntu12.04 总体设计思路 sobel 算法理论基础       索贝尔算子(Sobel operator)主要用作边缘检测,在技术上,它是一离散性差分算子,用来运算图像亮度函数的灰度之近似值.在图像的任何一点使用此算子,将会产生对应的灰度矢量或是其法矢量. 该

图像处理之基础---卷积,滤波,平滑

/*今天师弟来问我,CV的书里到处都是卷积,滤波,平滑……这些概念到底是什么意思,有什么区别和联系,瞬间晕菜了,学了这么久CV,卷积,滤波,平滑……这些概念每天都念叨好几遍,可是心里也就只明白个大概的意思,赶紧google之~ 发现自己以前了解的真的很不全面,在此做一些总结,以后对这种基本概念要深刻学习了~*/ 1.图像卷积(模板) (1).使用模板处理图像相关概念: 模板:矩阵方块,其数学含义是一种卷积运算. 卷积运算:可看作是加权求和的过程,使用到的图像区域中的每个像素分别于卷积核(权矩阵)

Laxcus大数据管理系统(2)- 第一章 基础概述 1.1 基于现状的一些思考

第一章 基础概述 1.1 基于现状的一些思考 在过去十几年里,随着互联网产业的普及和高速发展,各种格式的互联网数据也呈现爆炸性增长之势.与此同时,在数据应用的另一个重要领域:商业和科学计算,在各种新兴技术和产业需求的推动下,对数据存储和计算要求也日益提高,并且对计算数据的准确性和精度也远高于互联网数据.而在这些现象的背后,当前的数据计算早已经突破MB量级,GB成为常态,TB变得流行,正在向PB迈进的时候,面对如此庞大的数据量,如果管理和使用它们,满足各种计算需求,发现和筛选其中有价值的信息,通常

21个项目玩转深度学习:基于TensorFlow的实践详解06—人脸检测和识别——数据集

书籍:<21个项目玩转深度学习:基于TensorFlow的实践详解> 人脸检测 FDDB FDDB是UMass的数据集,被用来做人脸检测(Face Detection).这个数据集比较大,比较有挑战性.而且作者提供了程序用来评估检测结果,所以在这个数据上面比较算法也相对公平. 2845 张图片,其中包含了 5171 张人脸: 包含了各种遮挡,高难度的姿态,低分辨率以及对焦模糊的人脸: 用椭圆来标定人脸区域: 同时包括灰度图和彩色图. 人脸识别 LFW 户外标记人脸数据集LFW (Labeled

【HEVC帧间预测论文】P1.1 基于运动特征的HEVC快速帧间预测算法

基于运动特征的 HEVC 快速帧间预测算法/Fast Inter-Frame Prediction Algorithm for HEVC Based on Motion Features <HEVC标准介绍.HEVC帧间预测论文笔记>系列博客,目录见:http://www.cnblogs.com/DwyaneTalk/p/5711333.html 上海大学学报(自然科学版)第19卷第3期. 利用当前深度CU与时域对应位置已编码CU的亮度像素值的差值平方和均值来判断当前CU的运动特征.属于A类算

堆栈 Cookie 检测代码检测到基于堆栈的缓冲区溢出

 报错:0x000CC3C9 处有未经处理的异常(在 image_opencv2.exe 中):  堆栈 Cookie 检测代码检测到基于堆栈的缓冲区溢出. 主要检查代码中有没有对数组的越界操作,就解决了这个bug. 其它的相关知识查后再补充.