基于彩色模型的肤色检测器

1.RGB与HSV简介

颜色通常用三个独立的属性来描述,三个独立变量综合作用,自然就构成一个空间坐标,这就是颜色空间。但被描述的颜色对象本身是客观的,不同颜色空间只是从不同的角度去衡量同一个对象。颜色空间按照基本机构可以分为两大类:基色颜色空间和色、亮分离颜色空间。前者典型的是RGB,而HSV则属于后者。
计算机色彩显示器和彩色电视机显示色彩的原理一样,都是采用R、G、B相加混色的原理,通过发射出三种不同强度的电子束,使屏幕内侧覆盖的红、绿、蓝磷光材料发光而产生色彩。这种色彩的表示方法称为RGB色彩空间表示。在RGB颜色空间(如图1.1)中,任意色光F都可以用R、G、B三色不同分量的相加混合而成:F=r[R]+r[G]+r[B]。RGB色彩空间还可以用一个三维的立方体来描述。当三基色分量都为0(最弱)时混合为黑色光;当三基色都为k(最大,值由存储空间决定)时混合为白色光。RGB色彩空间采用物理三基色表示,因而物理意义很清楚,适合彩色显象管工作。然而这一体制并不适应人的视觉特点。因而,产生了其它不同的色彩空间表示法。
在这里插入图片描述
HSV(如图1.2)是一种将RGB色彩空间中的点在倒圆锥体中的表示方法。HSV即色相(Hue)、饱和度(Saturation)、明度(Value),又称HSB(B即Brightness)。色相是色彩的基本属性,就是平常说的颜色的名称,如红色、黄色等。饱和度(S)是指色彩的纯度,越高色彩越纯,低则逐渐变灰,取0-100%的数值。明度(V),取0-max(计算机中HSV取值范围和存储的长度有关)。HSV颜色空间可以用一个圆锥空间模型来描述。圆锥的顶点处,V=0,H和S无定义,代表黑色。圆锥的顶面中心处V=max,S=0,H无定义,代表白色。RGB颜色空间中,三种颜色分量的取值与所生成的颜色之间的联系并不直观。而HSV颜色空间,更类似于人类感觉颜色的方式,封装了关于颜色的信息:“这是什么颜色?深浅如何?明暗如何?”
在这里插入图片描述

2.准备工作

在网上随机选人物照片作为训练图像及测试图像,选取人物时要注意肤色尽可能不要过于单一,以免最终结果受到影响过大。
利用电脑自带“画图”软件即可对图像的皮肤位置进行取色,然后在颜色编辑窗口查看RGB以及HSV数值(具体流程如图2.3所示),将数值填入Excel表中以便寻找阈值。
注:窗口中色调E对应HSV中的“H”,饱和度S对应HSV中的“S”,亮度L对应HSV中的“V”,红(R)、绿(G)、蓝(U)则分别对应RGB模型中的“R”“G”“B”。
在这里插入图片描述
可以将获取的RGB与HSV的数值整理到Excel表中,并获得阈值。

RGB与HSV转换工具

3.皮肤检测器的实现

RGB代码

files=dir('F:\testimages\*.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>=120&R<=252&G>=88&G<=239&B>=59&B<=233;    %阈值
figure,subplot(2,1,1),imshow(I),          %显示原始图像
subplot(2,1,2),imshow(id)
end

RGB运行结果展示

在这里插入图片描述
通过不断的调整阈值,可以发现结果在不断的变化。

HSV代码

files=dir('F:\testimages\*.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.0196&H<=0.0791&S>=0.0754&S<=0.6093&V>=0.4706&V<=0.9882;    %阈值
figure,subplot(2,1,1),imshow(I),          %显示原始图像
subplot(2,1,2),imshow(id)
end

HSV运行结果展示

在这里插入图片描述
注:在matlab中H、S、V的取值范围为H: [0 1)、S: [0 1.0]、V: [0 1.0],给定的阈值范围要在这个范围内!!!

4.RGB与HSV比较

1.RGB的错误接受率更高,对于同样的样本得到的数据,RGB认定为肤色的范围更大,即许多与肤色接近的背景色会被RGB认定为肤色。
2.HSV的错误拒绝率更高,相比于RGB,HSV识别的皮肤更不完整
3. 对于RGB模型限定了三者之间的关系,而HSV模型只考虑了单个之间的关系,可HSV模型的测试结果却还不错,如果对HSV模型进行深入挖掘应该可以得到比RGB模型好不少的结果;
4.我认为HSV模型优于RGB模型。因为HSV模型三者的数值范围在[0,1]之间,在本次实验中我取到小数点后4位,而RGB模型只采用单一的整数,所以,HSV表示的颜色更为精确。
5.从RGB颜色空间很难知道该值所表示颜色的认知属性,两种颜色之间的视觉差异不能采用该颜色空间中两个颜色点之间的距离来表示;而HSV则更直观,两种颜色点之间的距离越小,两种颜色越接近,所以以RGB模型来确定阈值范围误差会更大。
综上所述,我认为如果有一个良好的模型,HSV对于肤色的识别会更加精确。

5.总结与分析

从本次实验结果来看,测试结果并不是特别理想,只有20组数据,尽管是随机选取的,依然无法代表整个社会的肤色范围,所以要想让结果更精确必须加大训练样本量,通过更多的样本来确定一个合理的阈值。
除了增加样本以外,对于图像本身来说,进行肤色检测之前先将背景抹除,通过抹除背景来减少其与肤色近似元素的影响会使结果更为精确,但当样本很多的时候,无疑也相应地增加了工作量。

参考文章

博客园「pinhole」. RGB、YUV和HSV颜色空间模型[Z]. https://www.cnblogs.com/justkong/p/6570914.html
CSDN「大熊背」. RGB颜色空间肤色检测[Z]. https://blog.csdn.net/lz0499/article/details/78237880
CSDN「闲余_梦想」. 基于彩色模型设计简单的肤色检测器[Z]. https://blog.csdn.net/qq_42037746/article/details/92399077

  • 5
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值