肤色YCbCr颜色空间是一种常用的肤色检测的色彩模型,其中Y代表亮度,Cr代表光源中的红色分量,Cb代表光源中的蓝色分量。人的肤色在外观上的差异是由色度引起的,不同人的肤色分布集中在较小的区域内。肤色的YCbCr颜色空间CbCr平面分布在近似的椭圆区域内,通过判断当前像素点的CbCr是否落在肤色分布的椭圆区域内,就可以很容易地确认当前像素点是否属于肤色。将图像转换到YCbCr空间并且在CbCr平面进行投影,可以采集到肤色的样本点。
clc;
clear all;
close all;
x=imread('2.jpg');
y=rgb2ycbcr(x); %将彩色图片从RGB空间转换到YCbCr色彩空间
[a b c]=size(y);
cb=double(y(:,:,2));
cr=double(y(:,:,3));
%下面开始计算每个像素点的肤色概率
for i=1:a;
for j=1:b
w=[cb(i,j) cr(i,j)]; %色度矩阵
m=[110.4516 150.5699]; %肤色均值,可以理解为离散高斯分布的期望值,这个均值需要提前确定,这个是肤色概率模型的明显不足之处;大家换图片测试,会发现可能需要修改此参数
n=[97.0916 23.3700;23.3700 137.9966]; %协方差矩阵,对应此处离散高斯分布
p(i,j)=exp((-0.5)*(w-m)*inv(n)*(w-m)'); %计算肤色概率,即相似度
end
end
z=p./max(max(p));%归一化结果
%下面开始阈值化
%figure
th=0.5;
for i=1:a
for j=1:b
if(z(i,j)>th)