来源: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® / 255;
G = double(G) / 255;
B = double(B) / 255;
end

% Set a threshold
T = 0.008856;

[M, N] = size®;
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);
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

RGB颜色空间和CIELab颜色空间互换(matlab代码)相关推荐

  1. matlab转换hsl,RGB空间与HSL空间转换matlab代码

    关于RGB与HSL空间之间转换的原理,在网上很多,也很详细,这里就不做介绍了. 直接给出MATLAB代码. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % RGB空间转换到H ...

  2. 【图像识别】基于BP神经网络和RGB颜色空间实现人民币识别系统matlab代码

    1 简介 随着信息化时代的到来,智能识别成为研究的热点,本文以人民币识别为研究对象,运用 Matlab 软件系统中所提供的神经网络工具箱,结合图像处理技术,实现对各种不同面值纸质版人民币的识别.本文主 ...

  3. RGB和CIELAB颜色空间转换及偏色检测

    RGB转为CIELAB 首先RGB是不可以直接转为CIELAB颜色空间的,RGB需要先转为CIEXYZ颜色空间,然后再由CIEXYZ颜色空间转为CIELAB颜色空间.关于这2个颜色空间的互转,主要参考 ...

  4. MATLAB 将RGB颜色空间转为HSI颜色空间、LAB颜色空间 原理及程序

    一张彩色图像是由R.G.B三个通道组成,所以首先需要将彩色图像分为三个通道的图像. 以下是对猫图进行单通道提取得到的图像. HSI颜色空间 HSI[Hue-Saturation-Intensity(L ...

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

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

  6. 颜色空间系列2: RGB和CIELAB颜色空间的转换及优化算法

    颜色空间系列代码下载链接:http://files.cnblogs.com/Imageshop/ImageInfo.rar (同文章同步更新) 在几个常用的颜色空间中,LAB颜色空间是除了RGB外,最 ...

  7. matlab hsi颜色,RGB 颜色空间转 HSI 颜色空间的matlab程序实现

    RGB 颜色空间转 HSI 颜色空间的matlab程序实现 程序实现的时候注意把RGB像素值归一化就是了,然后千千万万要根据公式来,不能大意,我之前就有theta为复数的情况,是sqrt对负数进行运算 ...

  8. RGB、Lab等颜色空间的区别

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

  9. 在CIELab颜色空间下使用八方向Sobel算子实现边缘检测

    参考河北师范大学硕士学位论文--基于八方向Sobel算子的边缘检测算法研究. 由于自己实现滤波器运算,计算速度很慢,以后有能力再进行改进. 算子定义如下: 算法思路: 1.将RGB图像转化为CIELa ...

最新文章

  1. 程序员面试之MySQL数据库表的设计
  2. SAP Spartacus Organization Unit User页面的实现层级结构
  3. 老实人做不得?教练微信工作群内“说错话”遭公司索赔46万元
  4. 认识C#中的委托和事件
  5. 打开html文件图片为什么没有_提高网站打开速度秘诀:压缩html,Javascript和CSS文件...
  6. SpringBoot之mybatis-plus
  7. KEIL中遇到WARNING: MULTIPLE CALL TO SEGMENT的解决方法
  8. 惠普打印机换硒鼓图解_惠普激光打印机硒鼓安装方法(图文)
  9. python 拼图验证码
  10. 微服务项目之电商4.0技术架构图
  11. 《掌控习惯》读书笔记
  12. Java Reflection (JAVA反射) 选择自 leek2000 的 Blog
  13. 深度学习的应用——检測糖尿病型视网膜症
  14. ZOOM国际版无法访问 可申领ZOOM平安云版本试用账号了
  15. Navicat 清空表时自增从新开始从起始数字开始从1开始
  16. Python舔狗日记学习手册 【没想到还有第二期】
  17. java中的in的语法_java的输入语法
  18. AutoCAD对象模型
  19. bios uefi_什么是UEFI,它与BIOS有何不同?
  20. a标签的download属性(荐)

热门文章

  1. Autocad经验 CAD2018怎么设置打印的纸张尺寸和方向?
  2. 一本关于程序员的修真小说
  3. easyui datagrid单独修改某列的值
  4. IntelliJ IDEA代码review常用plugins
  5. 车载相关测试工具之CANalyzer
  6. 最速下降法最优步长的计算
  7. 2022-2028年中国休闲食品行业市场调查研究及发展前景规划报告
  8. JavaSE Day14 异常 泛型
  9. Python 打印和输出
  10. Au 闪退解决方法(很邪门)