`
yingyingol
  • 浏览: 744869 次
文章分类
社区版块
存档分类
最新评论

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. 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


分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics