来源:http://www.mathworks.com/matlabcentral/fileexchange/24009-rgb2lab/content/RGB2Lab.m和http://www.mathworks.com/matlabcentral/fileexchange/24010-lab2rgb/content/Lab2RGB.m。

RGB2Lab:

function [L,a,b] = RGB2Lab(R,G,B)

%RGB2LAB Convert an image from RGB to CIELAB

%

% function [L, a, b] = RGB2Lab(R, G, B)

% function [L, a, b] = RGB2Lab(I)

% function I = RGB2Lab(...)

%

% RGB2Lab takes red, green, and blue matrices, or a single M x N x 3 image,

% and returns an image in the CIELAB color space. RGB values can be

% either between 0 and 1 or between 0 and 255. Values for L are in the

% range [0,100] while a and b are roughly in the range [-110,110]. The

% output is of type double.

%

% This transform is based on ITU-R Recommendation BT.709 using the D65

% white point reference. The error in transforming RGB -> Lab -> RGB is

% approximately 10^-5.

%

% See also LAB2RGB.

% By Mark Ruzon from C code by Yossi Rubner, 23 September 1997.

% Updated for MATLAB 5 28 January 1998.

% Updated for MATLAB 7 30 March 2009.

if nargin == 1

B = double(R(:,:,3));

G = double(R(:,:,2));

R = double(R(:,:,1));

end

if max(max(R)) > 1.0 || max(max(G)) > 1.0 || max(max(B)) > 1.0

R = double(R) / 255;

G = double(G) / 255;

B = double(B) / 255;

end

% Set a threshold

T = 0.008856;

[M, N] = size(R);

s = M * N;

RGB = [reshape(R,1,s); reshape(G,1,s); reshape(B,1,s)];

% RGB to XYZ

MAT = [0.412453 0.357580 0.180423;

0.212671 0.715160 0.072169;

0.019334 0.119193 0.950227];

XYZ = MAT * RGB;

% Normalize for D65 white point

X = XYZ(1,:) / 0.950456;

Y = XYZ(2,:);

Z = XYZ(3,:) / 1.088754;

XT = X > T;

YT = Y > T;

ZT = Z > T;

Y3 = Y.^(1/3);

fX = XT .* X.^(1/3) + (~XT) .* (7.787 .* X + 16/116);

fY = YT .* Y3 + (~YT) .* (7.787 .* Y + 16/116);

fZ = ZT .* Z.^(1/3) + (~ZT) .* (7.787 .* Z + 16/116);

L = reshape(YT .* (116 * Y3 - 16.0) + (~YT) .* (903.3 * Y), M, N);

a = reshape(500 * (fX - fY), M, N);

b = reshape(200 * (fY - fZ), M, N);

if nargout < 2

L = cat(3,L,a,b);

end

Lab2RGB

function [R, G, B] = Lab2RGB(L, a, b)

%LAB2RGB Convert an image from CIELAB to RGB

%

% function [R, G, B] = Lab2RGB(L, a, b)

% function [R, G, B] = Lab2RGB(I)

% function I = Lab2RGB(...)

%

% Lab2RGB takes L, a, and b double matrices, or an M x N x 3 double

% image, and returns an image in the RGB color space. Values for L are in

% the range [0,100] while a* and b* are roughly in the range [-110,110].

% If 3 outputs are specified, the values will be returned as doubles in the

% range [0,1], otherwise the values will be uint8s in the range [0,255].

%

% This transform is based on ITU-R Recommendation BT.709 using the D65

% white point reference. The error in transforming RGB -> Lab -> RGB is

% approximately 10^-5.

%

% See also RGB2LAB.

% By Mark Ruzon from C code by Yossi Rubner, 23 September 1997.

% Updated for MATLAB 5 28 January 1998.

% Fixed a bug in conversion back to uint8 9 September 1999.

% Updated for MATLAB 7 30 March 2009.

if nargin == 1

b = L(:,:,3);

a = L(:,:,2);

L = L(:,:,1);

end

% Thresholds

T1 = 0.008856;

T2 = 0.206893;

[M, N] = size(L);

s = M * N;

L = reshape(L, 1, s);

a = reshape(a, 1, s);

b = reshape(b, 1, s);

% Compute Y

fY = ((L + 16) / 116) .^ 3;

YT = fY > T1;

fY = (~YT) .* (L / 903.3) + YT .* fY;

Y = fY;

% Alter fY slightly for further calculations

fY = YT .* (fY .^ (1/3)) + (~YT) .* (7.787 .* fY + 16/116);

% Compute X

fX = a / 500 + fY;

XT = fX > T2;

X = (XT .* (fX .^ 3) + (~XT) .* ((fX - 16/116) / 7.787));

% Compute Z

fZ = fY - b / 200;

ZT = fZ > T2;

Z = (ZT .* (fZ .^ 3) + (~ZT) .* ((fZ - 16/116) / 7.787));

% Normalize for D65 white point

X = X * 0.950456;

Z = Z * 1.088754;

% XYZ to RGB

MAT = [ 3.240479 -1.537150 -0.498535;

-0.969256 1.875992 0.041556;

0.055648 -0.204043 1.057311];

RGB = max(min(MAT * [X; Y; Z], 1), 0);

R = reshape(RGB(1,:), M, N);

G = reshape(RGB(2,:), M, N);

B = reshape(RGB(3,:), M, N);

if nargout < 2

R = uint8(round(cat(3,R,G,B) * 255));

end

matlabrgb和波长的换算_色彩空间Lab和RGB互转的Matlab代码相关推荐

  1. matlabrgb和波长的换算_matlab RGB到HSI的彩色转换及实现

    原理嘛,我就上一幅图,大家应该清楚啦!! 代码 : function hsi = rgb2hsi(rgb) % hsi = rgb2hsi(rgb)把一幅RGB图像转换为HSI图像, % 输入图像是一 ...

  2. java 经纬度 地图_百度地图地址经纬度互转,java代码(v2版本)

    2个星期前用百度地图做了地址转换后.本来准备写个工具类添加到项目中突然发现不能用了,于是上百度地图api官网,发现接口已经更改了升级为v2,修改后可以使用,于是把工具类进行分享. 工具类:BaiDuM ...

  3. 度数换算_度数的换算

    度数转换 散光隐形眼镜度数怎样换算 编辑:季勇 2014 年 04 月 16 日 13:50 浏览次数:9834 次 分享到: [导语] :很多人都喜欢带隐形眼镜,隐形眼镜有矫正视力,省去了框架眼镜的 ...

  4. 色彩空间转换(RGB空间与Lab空间)

    颜色迁移是计算机视觉领域的一个很有趣的问题,它实际上要我们解决这么一个问题:基于图像A和图像B,合成一幅新的图像C,使其同时具有A的颜色和B的形状等遗传信息,即图像B在不改变它自身所表达的形状信息的情 ...

  5. RGB颜色空间与Lab颜色空间区别与联系(附转换代码)

    RGB颜色空间 RGB颜色是红色(Red).绿色(Green)和蓝色(Blue)三基色的字母缩写.RGB色彩模式是通过三种基本颜色的不同程度的迭加来产生各种各样的不同颜色.这个标准能够涵盖人类视力所能 ...

  6. 机器视觉实用工具集NO.4——颜色查找可视化工具,在HSV、LAB、RGB三个颜色空间轻松进行颜色查找

    查找颜色是机器视觉任务中非常重要的的一个功能,其难点不是算法,而是在不同的灯光等环境条件下,选择合适的参数,参数的调整依赖于人的经验,而用一个合适的工具可以帮助对各颜色空间分布不了解的初学者快速实现目 ...

  7. opencv的cvtColor函数Lab转RGB源码解析及结果截断处理解决

    cvtColor( InputArray src, OutputArray dst, int code, int dstCn=0 ); 这是opencv中色彩转换函数.当由Lab转RGB时,code ...

  8. 程序员职业技能编写_程序员不需要的不需要编写代码的技能

    程序员职业技能编写 You can build the best application in the world, but if you don't know how to tell anyone ...

  9. 五步移相法matlab程序_基于结构光的相移法三维重建matlab

    一.基本原理: 正弦条纹打在三维物体上,CCD记录到的条纹由于受到三维物体高度的调制而发生扭曲,扭曲的条纹(deformed fringe)实质上为原始条纹在物体具有高度存在的位置有了附加相位,各点的 ...

最新文章

  1. 11g compression 新特性(1)
  2. 深入理解多线程(二)—— Java的对象模型
  3. mysql1215_MySQL全面瓦解15:视图
  4. poj 1144 割点和桥
  5. matlab 球坐标绘图,MATLAB绘制地图
  6. 一个关于人工智能实现的讨论
  7. testNG单元测试学习
  8. Andrew Ng机器学习公开课笔记 -- Logistic Regression
  9. “读心术”再升级,数字识别准确率可达90%
  10. 搭建Cacti监控系统(四)-- 安装spine
  11. leetcode幂集
  12. 《OpenCV3编程入门》毛星云编著
  13. 我的spark学习之路(一)
  14. 【无标题】公众号引流进阶教程(公众号对接电影,影视资源)
  15. 张至顺道长羽化登仙+说修行(道经每日清修)
  16. barbie黄佳丽--华侨大学
  17. 菜鸟也能学cocos2dx3.0 浅析刀塔传奇(下)
  18. CSDN如何搜索自己的博客;使用Google搜索自己的博客
  19. winbugs Blackbox trap #060问题解决方法
  20. 初识Rust踩坑小记

热门文章

  1. mongo备份索引_MongoDB——备份 恢复 索引 hashed片键
  2. 【bzoj1217】[HNOI2003]消防局的设立 贪心
  3. 腾讯安全入选《2020年数据安全典型实践案例》
  4. postgreSQL数据库 id自增
  5. html用表单做登录页面跳转页面,html表单实例:登录页面
  6. 国产EDA如何突围?
  7. Unity如何接入本地推送 Mobile Notifications
  8. python判断变量名是否合法_Python判断变量名是否合法的方法示例
  9. 新概念二册 Lesson 17 Always young青春常驻 ( 情态动词must)
  10. 服务器知识:Linux服务器修改root管理密码