1.RGB颜色空间肤色检测
在human skin color clustering for face detection一文中提出如下判别算式:
opencv代码非常简单:
void SkinRGB(IplImage* src,IplImage* dst)
{
//RGB颜色空间
//均匀照明:R>95,G>40,B>20,R-B>15,R-G>15
//侧向照明:R>200,G>210,B>170,R-B<=15,R>B,G>B
int height=src->height,width=src->width,channel=src->nChannels,step=src->widthStep;
int b=0,g=1,r=2;
cvZero(dst);
unsigned char* p_src=(unsigned char*)src->imageData;
unsigned char* p_dst=(unsigned char*)dst->imageData;
for(int j=0;j<height;j++)
{
for(int i=0;i<width;i++)
{
if((p_src[j*step+i*channel+r]>95&&p_src[j*step+i*channel+g]>40&&p_src[j*step+i*channel+b]>20&&
(p_src[j*step+i*channel+r]-p_src[j*step+i*channel+b])>15&&(p_src[j*step+i*channel+r]-p_src[j*step+i*channel+g])>15)||
(p_src[j*step+i*channel+r]>200&&p_src[j*step+i*channel+g]>210&&p_src[j*step+i*channel+b]>170&&
(p_src[j*step+i*channel+r]-p_src[j*step+i*channel+b])<=15&&p_src[j*step+i*channel+r]>p_src[j*step+i*channel+b]&&
p_src[j*step+i*channel+g]>p_src[j*step+i*channel+b]))
p_dst[j*width+i]=255;
}
}
}
效果图:
2.二次多项式模型
在Adaptive skin color modeling using the skin locus.pdf 一文中提出如下判别算式:
其中