基于彩色模型设计简单的肤色检测器

矫情吗;* 2022-01-13 11:45 267阅读 0赞

基于彩色模型设计简单的肤色检测器

  • 说明
  • 具体步骤
  • 部分分析图表
  • 代码
  • 部分结果
  • 结果分析
  • 总结与分析

说明

此文主要通过手动收集中国人肤色的RGB等不同色彩模型数值,通过这些数值来对人脸进行判定。

具体步骤

  1. 使用画图工具获取肤色的RGB数值。
  2. RGB转HSV(可采用菜鸟的在线转换),在matlab中,HSV的表示范围为0-1。
  3. 记录数值。
  4. 分析数值,这边我使用了R语言。
  5. 确定阈值。

部分分析图表

在这里插入图片描述
在这里插入图片描述

代码

  • RGB

    files=dir(‘lhj.jpg’); %读入图片
    for i=1:length(files) %循环
    s=files(i).name;
    I=imread(s); %得到三维矩阵
    I1=I;
    R=I1(:,:,1); %红色通道
    G=I1(:,:,2); %绿色通道
    B=I1(:,:,3); %蓝色通道
    id=R>150&G>100&G<210&B>90&B<200&(G-B)<40&(R-G)>20&(R-G)<70&((R-G)./(G-B))<9; %阈值
    figure,subplot(2,1,1),imshow(I), %显示原始图像
    subplot(2,1,2),imshow(id)
    end

  • HSV

    files=dir(‘wjk.jpg’); %读入图片
    for i=1:length(files)
    s=files(i).name;
    I=imread(s);
    I1=rgb2hsv(I); %RGB转换为HSV
    H=I1(:,:,1);
    S=I1(:,:,2);
    V=I1(:,:,3);
    id=H>0.0128&H<0.09&S<0.55&S>0.1&V>0.33;
    figure,subplot(2,1,1),imshow(I),
    subplot(2,1,2),imshow(id)
    end

部分结果

RGB在这里插入图片描述HSV在这里插入图片描述
RGB在这里插入图片描述HSV在这里插入图片描述

结果分析

  • RGB与HSV的比较
    在两个模型中,从测试结果来看,得出以下结论:
  1. 错误接受率HSV更高,也就是说HSV模型的肤色认定范围较广,一方面它可以尽可能多的将肤色识别出来,如一些带有阴影的区域,但同时也更多的将接近肤色的背景认定为肤色;
  2. 错误拒绝率则RGB更胜一筹,如组7组8,肤色的识别不够完整;
  3. 对于RGB模型限定了三者之间的关系,而HSV模型只考虑了单个之间的关系,可HSV模型的测试结果却还不错,如果对HSV模型进行深入挖掘应该可以得到比RGB模型好不少的结果;
  4. 我认为HSV模型会优于RGB模型。因为HSV模型三者的数值范围在[0,1]之间,在本次实验中我取到小数点后4位,而RGB模型只采用单一的整数,所以,HSV表示的颜色更为精确,如果有一个良好的模型,对于肤色的识别也会更加精确吧。

    • 综上,我认为HSV的颜色空间更好一些。但要得到更加精确的效果,50组的样本数据是远远不够的,对数据的挖掘也不够深入,RGB、HSV三者之间的关系应该进行深入研究。

总结与分析

参考相关资料,用于肤色检测的方法大概有以下几种,基于RGB的肤色检测、基于椭圆模型的肤色检测、基于YCrCb颜色空间的肤色检测、基于HSV的肤色检测、opencv自带的肤色检测函数AdaptiveSkinDetector等。有很多影响肤色的因素,比如拍照时的灯光、拍照的时间等等。
我尝试了其中的一些方法,并结合网上的效果图,发现效果也是大同小异,没有什么特别好的方法。下图为基于YCrCb颜色空间的肤色检测效果,采用的仍然是matlab。

在这里插入图片描述
在这里插入图片描述

要更好的检测出肤色应该先将人检测出来,使人物与背景分离,只在人物的范围上进行肤色检测,这样可以减少其他事物中与肤色相近的元素也被认定为肤色,即降低错误接受率。当能检测出人物的大致范围后,再进行肤色阈值进一步的确定,使肤色检测更为精确。

发表评论

表情:
评论列表 (有 0 条评论,267人围观)

还没有评论,来说两句吧...

相关阅读

    相关 肤色检测:使用HSV模型实现

    肤色检测:使用HSV模型实现 肤色检测是一种在计算机视觉领域广泛应用的技术。它可以帮助我们识别图像中的皮肤区域,其在人脸检测、人体姿势分析、手势识别等应用中都有着重要的作用。

    相关 011序列检测器设计

    (15分)011序列检测器的设计方法和110序列检测器/101序列检测器的设计方法类似, 只是在绘制原始状态图时不同. 在2014年、2016年和2018年山东大学研究生入学