您现在的位置:计算机学习网>> matlab与数字水印>>正文内容

rgb转换为lab源代码

点击数: 【字体: 收藏 打印文章 查看评论
 

计算机学习网(http://www.haircuthome.com) 欢迎你的访问

 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.  
  5.   % Define as constantes
  6.   Xn =  95.13;
  7.   Yn = 100.0;
  8.   Zn = 108.86;
  9.  
  10.   disp('Iniciando a conversao de RGB para LAB');
  11.   % Converte de RGB para XYZ
  12.   xyz = rgb2xyz(im);
  13.   bx = xyz(:,:,1);
  14.   by = xyz(:,:,2);
  15.   bz = xyz(:,:,3);
  16.   
  17.   % Calcula X / Xn, Y / Yn e Z / Zn
  18.   bx = bx / Xn;
  19.   by = by / Yn;
  20.   bz = bz / Zn;
  21.   
  22.   % Determina os elem. maiores ou iguais a 8.856E-3
  23.   bin = (bx >= 8.856E-3);
  24.   f_x = (bin .* bx) .^ (1/3);
  25.   bin = (by >= 8.856E-3);
  26.   yyn = (bin .* by) .^ (1/3);
  27.   f_y = yyn;
  28.   bin = (bz >= 8.856E-3);
  29.   f_z = (bin .* bz) .^ (1/3);
  30.   
  31.   l = (116 * yyn) - 16;
  32.   
  33.   % Determina os elem. menores que 8.856E-3
  34.   bin = (bx < 8.856E-3);
  35.   f_x = f_x + (7.787 * (bin .* bx) + (16/116));
  36.   bin = (by < 8.856E-3);
  37.   yyn = (bin .* by);
  38.   f_y = f_y + (7.787 * yyn + (16/116));
  39.   bin = (bz < 8.856E-3);
  40.   f_z = f_z + (7.787 * (bin .* bz) + (16/116));
  41.   
  42.   
  43.   % Calcula L, A e B
  44.   l = l + (903.3 * (yyn .^ (1/3)));
  45.   a = (500 * l) .* (f_x - f_y);
  46.   b = (200 * l) .* (f_y - f_z);
  47.   
  48.   y(:,:,1) = l;
  49.   y(:,:,2) = a;
  50.   y(:,:,3) = b;
  51.   

另外一端代码,rgb2xyz,来自:http://scien.stanford.edu/class/psych221/projects/08/JaeMoPark/appendix/rgb2xyz.m




  1. function [ xyz ] = rgb2xyz(rgb)
  2.  
  3. a=double(rgb);
  4. mat=[.49 .31 .20;.17697 .81240 .01063;.00 .01 .99];
  5. mat=(1/.17697)*mat;
  6.  
  7. R=a(:,:,1);
  8. G=a(:,:,2);
  9. B=a(:,:,3);
  10. [m,n]=size(R);
  11. RGB=[R(:) G(:) B(:)]';
  12. XYZ=mat*RGB;
  13.  
  14. X=XYZ(1,:);x=reshape(X,m,n);
  15. Y=XYZ(2,:);y=reshape(Y,m,n);
  16. Z=XYZ(3,:);z=reshape(Z,m,n);
  17. xyz=zeros(size(a));
  18. xyz(:,:,1)=x;
  19. xyz(:,:,2)=y;
  20. xyz(:,:,3)=z;
  21.  
  22. end

作者: 来源: 发布时间:2009年04月24日
上一篇:rgb2lab代码转换[ 04-24 ]下一篇:从RGB到Lab色彩空间的转换[ 04-24 ]
相关信息
没有相关内容
用户信息中心
栏目导航
  • 找不到相关分类
  • 本月排行TOP10
  • 还没有任何项目!
  • 计算机学习网
  • 计算机学习网
  • 计算机学习网
  • 计算机学习网
  • 计算机学习网
  • 计算机学习网
  • 计算机学习网
  • 天津工程师范学院