Halcom 发表于 2017-2-5 11:53:17

基于Lab颜色空间的人脸图像分割

   常用的色彩空间有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通道
=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();                     % 找出最大块的标号
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('分割后图像')

页: [1]
查看完整版本: 基于Lab颜色空间的人脸图像分割