rgb转换为lab源代码

本文介绍了如何将RGB颜色空间转换为LAB颜色空间的方法。通过两段MATLAB代码实现这一过程,首先使用rgb2xyz函数从RGB转换到XYZ颜色空间,然后使用rgb2lab函数进一步转换到LAB空间。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


在处理图像的过程中常常需要对图像的不同格式进行处理。
例如需要将rgb转换为lab,它们分属于不同的颜色空间。
一般来说rgb中,r、g、b的取值范围为(0,255)或者在(0,1)之间。
而lab中,l的范围为(0,100),a、b范围为(-120,120)。
而在转化过程中,通常需要将rgb先转化为xyz控件,然后再转换为lab空间。
因此需要用到两个函数,分别为,rgb2xyz,rgb2lab
下面是一段代码:
rgb2lab,来自:http://server.cs.ucf.edu/~vision/Code/ColorSpaces/rgb2lab.m


  1. functiony=rgb2lab(im)
  2. %rgb2lab(image)
  3. %ConvertedeRGBparaLAB
  4. %Defineasconstantes
  5. Xn=95.13;
  6. Yn=100.0;
  7. Zn=108.86;
  8. disp('IniciandoaconversaodeRGBparaLAB');
  9. %ConvertedeRGBparaXYZ
  10. xyz=rgb2xyz(im);
  11. bx=xyz(:,:,1);
  12. by=xyz(:,:,2);
  13. bz=xyz(:,:,3);
  14. %CalculaX/Xn,Y/YneZ/Zn
  15. bx=bx/Xn;
  16. by=by/Yn;
  17. bz=bz/Zn;
  18. %Determinaoselem.maioresouiguaisa8.856E-3
  19. bin=(bx>=8.856E-3);
  20. f_x=(bin.*bx).^(1/3);
  21. bin=(by>=8.856E-3);
  22. yyn=(bin.*by).^(1/3);
  23. f_y=yyn;
  24. bin=(bz>=8.856E-3);
  25. f_z=(bin.*bz).^(1/3);
  26. l=(116*yyn)-16;
  27. %Determinaoselem.menoresque8.856E-3
  28. bin=(bx<8.856E-3);
  29. f_x=f_x+(7.787*(bin.*bx)+(16/116));
  30. bin=(by<8.856E-3);
  31. yyn=(bin.*by);
  32. f_y=f_y+(7.787*yyn+(16/116));
  33. bin=(bz<8.856E-3);
  34. f_z=f_z+(7.787*(bin.*bz)+(16/116));
  35. %CalculaL,AeB
  36. l=l+(903.3*(yyn.^(1/3)));
  37. a=(500*l).*(f_x-f_y);
  38. b=(200*l).*(f_y-f_z);
  39. y(:,:,1)=l;
  40. y(:,:,2)=a;
  41. y(:,:,3)=b;
另外一端代码,rgb2xyz,来自:http://scien.stanford.edu/class/psych221/projects/08/JaeMoPark/appendix/rgb2xyz.m


  1. function[xyz]=rgb2xyz(rgb)
  2. a=double(rgb);
  3. mat=[.49.31.20;.17697.81240.01063;.00.01.99];
  4. mat=(1/.17697)*mat;
  5. R=a(:,:,1);
  6. G=a(:,:,2);
  7. B=a(:,:,3);
  8. [m,n]=size(R);
  9. RGB=[R(:)G(:)B(:)]';
  10. XYZ=mat*RGB;
  11. X=XYZ(1,:);x=reshape(X,m,n);
  12. Y=XYZ(2,:);y=reshape(Y,m,n);
  13. Z=XYZ(3,:);z=reshape(Z,m,n);
  14. xyz=zeros(size(a));
  15. xyz(:,:,1)=x;
  16. xyz(:,:,2)=y;
  17. xyz(:,:,3)=z;
  18. end


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值