|
常用的色彩空间有RGB色彩空间,HSV(或类似的HIS、HSL)色彩空间以及Lab色彩空间等。
Lab色彩空间被设计用来接近人类视觉,它致力于感知均匀性。
在Lab空间中,L表示亮度,a和b表示颜色对立的维度。L值为O时色彩为黑色,L值接近100时为白色;a值表示色彩在红色和绿色之间的位置;b值表示色彩在蓝色和黄色之间的位置"在CIELAB模型中,a值大于0时表示红色,a值小于O时表示绿色,b值大于O时表示黄色。
Lab颜色空间是一种与设备无关的颜色系统,是基于1931年CIE颁布的色彩度量国际标准创建的,是由CIE XYZ通过数学转换得到的均匀色度空间。CIE XYZ空间采用了理想的原色X、Y、Z代替R、G、B,而理想原色的选择是基于RGB颜色空间采用数学方法建立的,其中,X、Y、Z分别描述红原色、绿原色和蓝原色。这三个分量是虚拟的假色彩,并非真色彩。
基于Lab颜色空间的人脸肤色分割程序如下:
- clc,clear,close all % 清屏、清工作区、关闭窗口
- warning off % 消除警告
- feature jit off % 加速代码执行,提高运行时间
- rgb=imread('xbb.jpg'); % 加载图像
- % imshow(rgb);
- r = rgb(:, :, 1); % R通道
- g = rgb(:, :, 2); % G通道
- b = rgb(:, :, 3); % B通道
- [m,n]=size(r);
- cform = makecform('srgb2lab'); % color transformation structure
- J = applycform(rgb,cform); % color space transformation
- M=graythresh(J(:,:,3)); % 阈值
- BW2=im2bw(J(:,:,3),M); %二值化
- BW2= bwareaopen(BW2, 300); %剔除小块
- % imshow(BW2)
- cc=bwconncomp(BW2); % 连通性检查
- s = regionprops(BW2, {'centroid','area'}); %标记块重心
- [~, id] = max([s.Area]); % 找出最大块的标号
- BW2(labelmatrix(cc)~=id)=0; % 非最大块置为背景
- r1=immultiply(r,~BW2); % 交运算
- g1=immultiply(g,~BW2); % 交运算
- b1=immultiply(b,~BW2); % 交运算
- xbb=cat(3,r1,g1,b1); % 合成3-D
- figure;imshow(xbb); % 显示
- %%
- for i=1:m
- for j=1:n
- if (r1(i,j)>=145&&r1(i,j)<=255)&&(g1(i,j)>=50&&g1(i,j)<=255)&&(b1(i,j)>=20&&b1(i,j)<=220)%改皮肤色
- r1(i,j)=150;g1(i,j)=250;b1(i,j)=250;
- end
- if (r1(i,j)>=240&&r1(i,j)<=255)&&(g1(i,j)>=240&&g1(i,j)<=255)&&(b1(i,j)>=220&&b1(i,j)<=255)%改背景白色
- r1(i,j)=255;g1(i,j)=0;b1(i,j)=255;
- end
- if (r1(i,j)>=0&&r1(i,j)<=2)&&(g1(i,j)>=0&&g1(i,j)<=2)&&(b1(i,j)>=0&&b1(i,j)<=2)%改背景黑色
- r1(i,j)=200;g1(i,j)=255;b1(i,j)=0;
- end
- if (r1(i,j)>=0&&r1(i,j)<=170)&&(g1(i,j)>=0&&g1(i,j)<=172)&&(b1(i,j)>=0&&b1(i,j)<=180)%改头发黑色
- r1(i,j)=120;g1(i,j)=155;b1(i,j)=255;
- end
- end
- end
- color11=cat(3,r1,g1,b1);
- subplot(121),imshow(rgb);title('原始图像')
- subplot(122),imshow(color11);title('分割后图像')
复制代码
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
|