一、目标:
- 肤色分割。找一张人脸图像,尝试进行肤色分割。
二、函数分析:
1、rgb2hsv()
定义:将RGB颜色转换为HSV
形式:HSV = rgb2hsv(RGB)
描述:将RGB图像的红色、绿色和蓝色值转换为HSV图像的色调、饱和度和值(HSV)值。
RGB转HSV公式:
2、rgb2ycbcr()
定义:将RGB颜色值转换为YCbCr颜色空间
形式:YCBCR = rgb2ycbcr(RGB)
描述:将RGB图像的红色、绿色和蓝色值转换为YCbCr图像的亮度(Y)和 色度(Cb和Cr)值。
RGB转换成YcbCr公式:
三、代码展示:
1、采用RGB转HSV方式
% 1、肤色分割。找一张人脸图像,尝试进行肤色分割。
%
% @author: jackma
% @time: 2020-11-19 21:33
% @URL: www.jackrma.com
% @Copyright:博客所有权归本人和优快云所有,如有转载请在显著位置给出博文
% 链接和作者姓名,否则本人将付诸法律。
% @edit:
close all
clear
I=imread('hg.jpg');
figure,imshow(I);
I=double(I);
%I2=I;
I2=rgb2hsv(I); % RGB转HSV
figure,imshow(I2);
R=I(:,:,1);
G=I(:,:,2);
B=I(:,:,3);
y=16+0.258*R+0.505*G+0.090*B;
cb=128-0.148*R+0.291*G+0.439*B;
cr=128+0.439*R-0.368*G-0.071*B;
[w, h]=size(I(:,:,1));
hue=I2(:,:,1);
saturation=I2(:,:,2);
value=I2(:,:,3);
for i=1:w
for j=1:h
if 140<=cr(i,j) && cr(i,j)<=165 && 140<=cb(i,j) && cb(i,j)<=195 && hue(i,j)<=0.1 && 0.01<=hue(i,j) && 0<=y(i,j) && y(i,j)<=255
segment(i,j)=1;
else
segment(i,j)=0;
end
end
end
im(:,:,1)=I(:,:,1).*segment;
im(:,:,2)=I(:,:,2).*segment;
im(:,:,3)=I(:,:,3).*segment;
figure,imshow(segment);
figure,imshow(uint8(im));
1.2、结果展示及分析:
图1 原始图像
图2 HSV图像
图3 分割图
图4 肤色分割图
2、采用RGB转YCbcR方式
% 1、肤色分割。找一张人脸图像,尝试进行肤色分割。
%
% @author: jackma
% @time: 2020-11-19 21:33
% @URL: www.jackmark.top
% @edit:
% YCBCR方式
img=imread('3.jpg');
% segmentasi
img=rgb2ycbcr(img);
figure, imshow(img); % YCBCR图像
for i=1:size(img,1) % 根据肤色模型将图像二值化
for j= 1:size(img,2)
cb = img(i,j,2);
cr = img(i,j,3);
if(~(cr > 132 && cr < 173 && cb > 76 && cb < 126))
img(i,j,1)=235;
img(i,j,2)=128;
img(i,j,3)=128;
end
end
end
img=ycbcr2rgb(img);
% tampilkan citra
figure, imshow(img);
2.2、结果展示及分析:
图5 原图
图6 RGB转YcbcR图
图7 肤色分割图
具体整个项目代码放在优快云分享中
链接:https://download.youkuaiyun.com/download/qq_38605089/13187130
(免积分,关注即可下载)