You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在Mathematica中绘制色域:CIE31图表操作与色彩转换疑问

解决Mathematica中CIE 1931图表绘制P3原色边界的问题

核心疑问解答

xyY与XYZ的转换是色彩空间映射到CIE 1931图表的底层逻辑,但并非手动绘制的必要步骤——Mathematica的内置工具已经封装了这些转换流程,直接调用即可。不过理解这个逻辑能帮你精准控制自定义色彩的绘制。


实操步骤:快速绘制P3原色边界

1. 直接获取P3原色的CIE xy坐标

Mathematica的ColorData可以直接提取色彩空间的色度坐标(即CIE 1931图表上的xy点),无需手动转换:

(* 获取Display P3三个原色的CIE 1931 xy坐标 *)
p3Primaries = ColorData["DisplayP3", "ChromaticityCoordinates"];

2. 叠加到CIE 1931图表上

用CIEColorPlot绘制基础图表,再通过Show叠加原色点和边界线:

Show[
  CIEColorPlot[],  (* 基础CIE 1931色域图 *)
  ListPlot[p3Primaries, PlotStyle -> {Red, PointSize[Large]}],  (* 绘制P3原色点 *)
  Graphics[{Blue, Line[Append[p3Primaries, First[p3Primaries]]]}],  (* 连接成闭合边界 *)
  PlotLabel -> "CIE 1931 with Display P3 Gamut Boundary",
  ImageSize -> Large
]

底层逻辑:为什么会涉及xyY↔XYZ?

CIE 1931图表的x、y轴是从XYZ色彩空间归一化得到的:

  • ( x = \frac{X}{X+Y+Z} ),( y = \frac{Y}{X+Y+Z} )
  • Y代表亮度分量,xy则是去除亮度后的色度信息

当Mathematica处理P3到CIE的转换时,内部流程是:
P3 RGB → XYZ(通过P3的转换矩阵)→ 计算xy坐标

如果需要手动实现自定义色彩的转换(比如非标准原色),才需要自己写转换代码,示例如下:

(* 手动将P3 RGB转换为CIE xy坐标 *)
(* 1. 获取P3转XYZ的转换矩阵 *)
p3ToXYZ = ColorData["DisplayP3", "ColorSpaceTransformationMatrix"];
(* 2. 定义P3原色的RGB值(红:{1,0,0},绿:{0,1,0},蓝:{0,0,1}) *)
p3Red = {1, 0, 0};
(* 3. 转换为XYZ *)
xyz = p3ToXYZ . p3Red;
(* 4. 计算CIE xy坐标 *)
xy = {xyz[[1]], xyz[[2]]}/Total[xyz];

自定义色彩绘制的简化技巧

如果要绘制非标准色彩点,无需手动走XYZ/xyY流程,直接用ColorConvert一步获取xy坐标:

(* 自定义P3色彩转CIE xy坐标 *)
customColor = ColorData["DisplayP3"][{0.8, 0.2, 0.5}];
customXY = ColorConvert[customColor, "CIEChromaticity"];

内容的提问来源于stack exchange,提问作者hdcdigi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 04:45:33