clear,clc,close all;
Image=imread('motheranddaughter.jpg');%读入图片数据
figure,imshow(Image),title('原图');%显示原图窗口
r=double(Image(:,:,1));%红绿蓝三通道,双精度型三阶矩阵
g=double(Image(:,:,2));
b=double(Image(:,:,3));
[N,M]=size(r);
miu=[117.4361 156.5599]';
sigma=[160.1301 12.1430;12.1430 299.4574];
cbcr=zeros(2,1);
SkinCbCrG=zeros(N,M);
SkinRGB=zeros(N,M);
SkinHSV=zeros(N,M);
SkinCbCr=zeros(N,M);
thresh=0.35;
for i=1:M%外层循环
for j=1:N
R=r(j,i);
G=g(j,i);
B=b(j,i);
if (R>95 && G>40 && B>20 && (R-G)>15 && R-B>15) || ...
(R>220 && G>210 && B>170 && R-B<=15 && R>B && G>B)
SkinRGB(j,i)=1;%&&并且,||或者
end
maxRGB=max(max(R,G),B);%RGB最大范围,R和G中最大~B
minRGB=min(min(R,G),B);
C=maxRGB-minRGB;
V=maxRGB;
if V==0
S=0;
else
S=C/V;
end
if maxRGB==R
H=60*mod((G-B)/C,6);
elseif maxRGB==G
H=60*((B-R)/C+2);
elseif maxRGB==B
H=60*((R-G)/C+4);
end
if ((H>=0 && H<=25) || (H>=335 && H<=360)) && (S>=0.2 && S<=0.6) && V>=0.4
SkinHSV(j,i)=1;
end
R=R/255;G=G/255;B=B/255;
Cb=224*(-0.1687*R-0.3313*G+0.5*B)+128;
Cr=224*(0.5*R-0.4187*G-0.0813*B)+128;
if Cb>=77 && Cb<=127 && Cr>=133 && Cr<=173
SkinCbCr(j,i)=1;
end
cbcr= [Cb Cr]';
p=exp(-0.5*((cbcr-miu)')*(inv(sigma))*(cbcr-miu));
if p>thresh
SkinCbCrG(j,i)=1;
end
end
end
%循环里处理完数据后进行输出
figure,imshow(SkinRGB),title('RGB空间肤色检测');
figure,imshow(SkinHSV),title('HSV空间肤色检测');
figure,imshow(SkinCbCr),title('YCbCr空间范围肤色检测');
figure,imshow(SkinCbCrG),title('YCbCr空间高斯模型肤色检测');
imwrite(SkinRGB,'skinrgb3.jpg');
imwrite(SkinHSV,'skinhsv3.jpg');
imwrite(SkinCbCr,'skincbcr3.jpg');
imwrite(SkinCbCrG,'skinCbCrG3.jpg');
MATLAB处理人像素材
最新推荐文章于 2024-05-25 11:20:22 发布