从 RGB 到 xyY 采样颜色 space
Sampling colors from RGB to xyY space
我正在尝试从 RGB 图像中采样颜色并将其转换为相应的 XY 坐标。前面已经得到了RGB图像,从xyY坐标开始,然后转成RGB,即:
如果我在 xyY space 中有坐标 B = (0.011, 0.733),在 Matlab 中使用函数 xyz2rgb
会产生这种类型的输出 (-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 点。貌似有两个"scales"的RGB?一种允许负值,另一种允许在 [0,1]?
范围内
我通过裁剪 xyz2rgb 转换的结果解决了这个问题(即将负值等于 0,大于 1 的值等于 1),消除了标准化以生成视频帧的问题。使用此解决方案,我直接比较了 RGB 中的颜色,而无需再次在 xyY space 中进行转换。
我正在尝试从 RGB 图像中采样颜色并将其转换为相应的 XY 坐标。前面已经得到了RGB图像,从xyY坐标开始,然后转成RGB,即:
如果我在 xyY space 中有坐标 B = (0.011, 0.733),在 Matlab 中使用函数 xyz2rgb
会产生这种类型的输出 (-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 点。貌似有两个"scales"的RGB?一种允许负值,另一种允许在 [0,1]?
范围内我通过裁剪 xyz2rgb 转换的结果解决了这个问题(即将负值等于 0,大于 1 的值等于 1),消除了标准化以生成视频帧的问题。使用此解决方案,我直接比较了 RGB 中的颜色,而无需再次在 xyY space 中进行转换。