Main Content

rgb2xyz

将 RGB 转换为 CIE 1931 XYZ

说明

XYZ = rgb2xyz(RGB) 将 sRGB 图像的红色、绿色和蓝色值转换为 CIE 1931 XYZ 值(2° 观察者)。

示例

XYZ = rgb2xyz(RGB,Name,Value) 使用一个或多个名称-值参数指定其他转换选项,例如 RGB 图像的颜色空间。

示例

全部折叠

将图像和颜色值从 RGB 转换为 CIE 1931 XYZ 颜色空间。

将 RGB 图像转换为 XYZ

将 RGB 图像读取到工作区。

RGB = imread('peppers.png');

将图像转换为 XYZ 颜色空间。

XYZ = rgb2xyz(RGB);

并排显示原始图像和新图像。

figure
imshowpair(RGB,XYZ,'montage');
title('Image in RGB Color Space (Left) and XYZ Color Space (Right)');

Figure contains an axes object. The axes object with title Image in RGB Color Space (Left) and XYZ Color Space (Right) contains an object of type image.

将 RGB 颜色值转换为 XYZ

将白色值从 RGB 转换为 XYZ 颜色空间。在 RGB 中,白色由向量 [1 1 1] 表示。

rgb2xyz([1 1 1])
ans = 1×3

    0.9505    1.0000    1.0888

使用 D50 作为参考白,将 RGB 颜色转换为 XYZ

XYZ_D50 = rgb2xyz(RGB,'WhitePoint','d50');

并排显示第一个输出 XYZ 图像与以 D50 作为参考白的 XYZ 图像。

figure
imshowpair(XYZ,XYZ_D50,'montage');
title('XYZ Image, Without (Left) and With (Right) Reference White');

Figure contains an axes object. The axes object with title XYZ Image, Without (Left) and With (Right) Reference White contains an object of type image.

将 Adobe RGB (1998) 颜色转换为 XYZ

XYZ_Adobe = rgb2xyz(RGB,'ColorSpace','adobe-rgb-1998');

显示从默认 RGB 和 Adobe RGB (1998) 颜色空间生成的 XYZ 图像。

figure
imshowpair(XYZ,XYZ_Adobe,'montage');
title(['XYZ Image, Starting From Default RGB (Left) and Adobe RGB ',...
  '(Right) Color Space']);

Figure contains an axes object. The axes object with title XYZ Image, Starting From Default RGB (Left) and Adobe RGB (Right) Color Space contains an object of type image.

输入参数

全部折叠

要转换的 RGB 颜色值,指定为数值数组,采用下列格式之一。

  • c×3 颜色图。每行指定一个 RGB 颜色值。

  • m×n×3 图像

  • m×n×3×p 图像堆叠

数据类型: single | double | uint8 | uint16

名称-值参数

将可选的参数对组指定为 Name1=Value1,...,NameN=ValueN,其中 Name 是参数名称,Value 是对应的值。名称-值参数必须出现在其他参数后,但对各个参数对组的顺序没有要求。

示例: xyz = rgb2xyz([.2 .3 .4],WhitePoint="d50")

如果使用的是 R2021a 之前的版本,请使用逗号分隔每个名称和值,并用引号将 Name 引起来。

示例: xyz = rgb2xyz([.2 .3 .4],"WhitePoint","d50")

输入 RGB 值的颜色空间,指定为 "srgb""adobe-rgb-1998""prophoto-rgb""linear-rgb"。如果您指定 "linear-rgb",则 rgb2xyz 假设输入 RGB 值是线性化的 sRGB 值。

数据类型: string | char

参考白,以 1×3 向量或表中列出的 CIE 标准光源之一形式指定。

参考白
"a"

CIE 标准光源 A,[1.0985, 1.0000, 0.3558]。模拟典型的家用白炽灯,相关色温为 2856 K。

"c"CIE 标准光源 C,[0.9807, 1.0000, 1.1822]。模拟平均或北方日光,相关色温为 6774 K。CIE 已弃用此光源。
"e"等能量辐射体,[1.000, 1.000, 1.000]。用作理论参考。
"d50"CIE 标准光源 D50,[0.9642, 1.0000, 0.8251]。模拟日出或日落时的暖日光,相关色温为 5003 K。也称为地平线日光

"d55"

CIE 标准光源 D55,[0.9568, 1.0000, 0.9214]。模拟上午中间时刻或下午中间时刻的日光,相关色温为 5500 K。

"d65"CIE 标准光源 D65,[0.9504, 1.0000, 1.0888]。模拟正午日光,相关色温为 6504 K。
"icc"ICC 配置文件中使用的配置文件连接空间 (PCS) 光源。使用有符号 32 位定点数(具有 16 个小数位)的逼近 [0.9642, 1.000, 0.8249]。实际值:[31595,32768, 27030]/32768

数据类型: single | double | string | char

输出参数

全部折叠

转换后的 XYZ 颜色值,以与输入大小相同的数值数组形式返回。输出类型是 double 类,但如果输入类型是 single,则输出类型也是 single

提示

  • 如果您将输入 RGB 颜色空间指定为 "linear-rgb",则 rgb2xyz 假设输入值是线性化的 sRGB 值。相反,如果您需要输入颜色空间为线性化 Adobe RGB (1998),则您可以使用 lin2rgb 函数。

    例如,要将线性化 Adobe RGB (1998) 图像 RGBlinadobe 转换为 CIE 1931 XYZ 颜色空间,请分两步执行转换:

    RGBadobe = lin2rgb(RGBlinadobe,"ColorSpace","adobe-rgb-1998");
    XYZ = rgb2xyz(RGBadobe,"ColorSpace","adobe-rgb-1998");
    

版本历史记录

在 R2014b 中推出

全部展开