首页 > 解决方案 > 从 RGB 到 xyY 空间对颜色进行采样

问题描述

我正在尝试从 RGB 图像中采样颜色并将其转换为相应的 XY 坐标。RGB图像之前已经从xyY坐标开始,然后转换成RGB,即:

如果我在 xyY 空间中有坐标 B = (0.011, 0.733),则使用xyz2rgbMatlab 中的函数将产生那种输出 (-1.0906, 1.1497, 0.3837),其中一个三刺激值是负数。我在 RGB 中使用了这种颜色来生成一张彩色图像。在将获得的矩阵映射到 [0,1] 范围内并将彩色图像保存为jpg文件后,我再次打开它并尝试从那里采样相同的颜色。RGB颜色坐标等于原来的坐标,而是(0.348,0.633,0.298),这样通过rgb2xyz不会像预期的那样给出原来的点B。

如何克服这种差距?有没有一种方法可以让我从具有非负值的 RGB 三元组开始回到 B 点?

编辑:我的理解是 xyY 中的点 B 在 RGB 色域之外,转换时其中一个值是负数。但是,它仍然可以在图像中正确表示,但是当从图像中恢复该颜色时,RGB 坐标都是正数,因此无法恢复 B 点。显然RGB有两个“尺度”?一个允许负值,一个在 [0,1] 范围内?

标签: imagematlabcolorsrgbcolor-scheme

解决方案


我通过裁剪 xyz2rgb 转换的结果(即将负值等于 0,大于 1 的值等于 1)解决了这个问题,消除了生成视频帧的标准化问题。使用这个解决方案,我直接比较了 RGB 中的颜色,而无需再次在 xyY 空间中转换它们。


推荐阅读