Pages

2009年7月28日 星期二

其它膚色模型

  除了之前介紹的 Bayesian膚色模型(YCbCr),其實還有許多不同色彩空間的膚色模型,如:RGB、YUV、YCbCr、HSV、HSL、Normalize RGB 等等,底下再秀兩個膚色模型。

● YCbCr
Y = 0.299*data[2] + 0.587*data[1] + 0.114*data[0];
Cb = -0.1687*data[2] - 0.3312*data[1] + 0.5*data[0];
Cr = 0.5*data[2] - 0.4183*data[1] - 0.0816*data[0];

if(60 < Y && Y < 255)
{
if(-25 < Cb && Cb < 0)
{
if(10 < Cr && Cr < 45)
{
// skin
}
else
{
// non-skin
}
}
else
{
// non-skin
}
}
else
{
// non-skin
}
● Normal RGB
double r;
double g;
double b;
double F1;
double F2;
double w;
int size = 320*240;
Byte* data = (Byte*)scan0.ToPointer();

for(int i = 0; i < size; ++i, data += 3)
{
if(data[0] == 0 && data[1] == 0 && data[2] == 0)
{
r = g = b = 0;
}
else
{
r = (double)data[2]/(data[2]+data[1]+data[0]);
g = (double)data[1]/(data[2]+data[1]+data[0]);
}

F1 = -1.3767*r*r + 1.0743*r + 0.1452;

F2 = -0.776*r*r + 0.5601*r + 0.1766;

w = (r-0.33)*(r-0.33) + (g-0.33)*(g-0.33);


if((g < F1) && (g > F2) &&
(w > 0.0004) &&
(data[2] > data[1]) &&

(data[1] > data[0]) &&
(data[2] - data[1] >= 16))

{
// skin
}
else
{
// non-skin
}
}

  後者是我目前用過效果最好的膚色模型,在白光或者黃光的環境都表現得不錯。但是,不論多麼好的膚色模型,想要應付各種外在因素的影響,還是顯得不足,畢竟拿到的影像,顏色都被干擾了。

相關閱讀:

1 則留言:

Eric 提到...

Normalize-RGB用了許多乘除法,所以很耗CPU

 
Blogger Templates