rgb转换为lab源代码


在处理图像的过程中常常需要对图像的不同格式进行处理。
例如需要将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. function y=rgb2lab(im)
  2. % rgb2lab( image )
  3. % Converte de RGB para LAB
  4.   % Define as constantes
  5.   Xn =  95.13;
  6.   Yn = 100.0;
  7.   Zn = 108.86;
  8.   disp('Iniciando a conversao de RGB para LAB');
  9.   % Converte de RGB para XYZ
  10.   xyz = rgb2xyz(im);
  11.   bx = xyz(:,:,1);
  12.   by = xyz(:,:,2);
  13.   bz = xyz(:,:,3);
  14.   
  15.   % Calcula X / Xn, Y / Yn e Z / Zn
  16.   bx = bx / Xn;
  17.   by = by / Yn;
  18.   bz = bz / Zn;
  19.   
  20.   % Determina os elem. maiores ou iguais a 8.856E-3
  21.   bin = (bx >= 8.856E-3);
  22.   f_x = (bin .* bx) .^ (1/3);
  23.   bin = (by >= 8.856E-3);
  24.   yyn = (bin .* by) .^ (1/3);
  25.   f_y = yyn;
  26.   bin = (bz >= 8.856E-3);
  27.   f_z = (bin .* bz) .^ (1/3);
  28.   
  29.   l = (116 * yyn) - 16;
  30.   
  31.   % Determina os elem. menores que 8.856E-3
  32.   bin = (bx < 8.856E-3);
  33.   f_x = f_x + (7.787 * (bin .* bx) + (16/116));
  34.   bin = (by < 8.856E-3);
  35.   yyn = (bin .* by);
  36.   f_y = f_y + (7.787 * yyn + (16/116));
  37.   bin = (bz < 8.856E-3);
  38.   f_z = f_z + (7.787 * (bin .* bz) + (16/116));
  39.   
  40.   
  41.   % Calcula L, A e B
  42.   l = l + (903.3 * (yyn .^ (1/3)));
  43.   a = (500 * l) .* (f_x - f_y);
  44.   b = (200 * l) .* (f_y - f_z);
  45.   
  46.   y(:,:,1) = l;
  47.   y(:,:,2) = a;
  48.   y(:,:,3) = b;
  49.   
另外一端代码,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
发出的红包

打赏作者

superdont

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值