Hello Mat

 找回密码
 立即注册
查看: 4628|回复: 0

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

[复制链接]

1323

主题

1551

帖子

0

金钱

管理员

Rank: 9Rank: 9Rank: 9

积分
22647
发表于 2017-2-5 11:53:17 | 显示全部楼层 |阅读模式
     常用的色彩空间有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颜色空间的人脸肤色分割程序如下:
  1. clc,clear,close all                    % 清屏、清工作区、关闭窗口
  2. warning off                         % 消除警告
  3. feature jit off                       % 加速代码执行,提高运行时间
  4. rgb=imread('xbb.jpg');                  % 加载图像
  5. % imshow(rgb);
  6. r = rgb(:, :, 1);                          % R通道
  7. g = rgb(:, :, 2);                          % G通道
  8. b = rgb(:, :, 3);                          % B通道
  9. [m,n]=size(r);
  10. cform = makecform('srgb2lab'); % color transformation structure
  11. J = applycform(rgb,cform);     % color space transformation
  12. M=graythresh(J(:,:,3));                        % 阈值
  13. BW2=im2bw(J(:,:,3),M);                 %二值化
  14. BW2= bwareaopen(BW2, 300);     %剔除小块
  15. % imshow(BW2)
  16. cc=bwconncomp(BW2);            % 连通性检查
  17. s  = regionprops(BW2, {'centroid','area'});  %标记块重心
  18. [~, id] = max([s.Area]);                     % 找出最大块的标号
  19. BW2(labelmatrix(cc)~=id)=0;  % 非最大块置为背景
  20. r1=immultiply(r,~BW2);                          % 交运算
  21. g1=immultiply(g,~BW2);                  % 交运算
  22. b1=immultiply(b,~BW2);                  % 交运算
  23. xbb=cat(3,r1,g1,b1);                            % 合成3-D
  24. figure;imshow(xbb);                            % 显示
  25. %%
  26. for i=1:m
  27.     for j=1:n
  28.       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)%改皮肤色
  29.             r1(i,j)=150;g1(i,j)=250;b1(i,j)=250;
  30.       end
  31.       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)%改背景白色
  32.             r1(i,j)=255;g1(i,j)=0;b1(i,j)=255;
  33.       end
  34.       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)%改背景黑色
  35.             r1(i,j)=200;g1(i,j)=255;b1(i,j)=0;
  36.       end
  37.       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)%改头发黑色
  38.             r1(i,j)=120;g1(i,j)=155;b1(i,j)=255;
  39.       end
  40.     end
  41. end
  42. color11=cat(3,r1,g1,b1);
  43. subplot(121),imshow(rgb);title('原始图像')
  44. subplot(122),imshow(color11);title('分割后图像')
复制代码


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
算法QQ  3283892722
群智能算法链接http://halcom.cn/forum.php?mod=forumdisplay&fid=73
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Python|Opencv|MATLAB|Halcom.cn ( 蜀ICP备16027072号 )

GMT+8, 2024-11-22 23:06 , Processed in 0.193923 second(s), 24 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表