【问题标题】:Sampling colors from RGB to xyY space从 RGB 到 xyY 空间对颜色进行采样
【发布时间】:2020-02-18 05:22:51
【问题描述】:

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

如果我在 xyY 空间中有坐标 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。显然RGB有两个“尺度”?一个允许负值,一个在 [0,1] 范围内?

【问题讨论】:

  • 保存为有损 JPEG 可能是罪魁祸首。尝试使用无损格式,例如 PNG 或 TIFF。
  • 对不起,重要的是要提到一个事实,即图像被收集到一个结构中以组成一个视频 .avi,然后我试图从中采样的图像是一个视频 .avi .改变帧的格式不会改变,我会尝试改变视频的格式。谢谢!
  • CIE XYZ [-1.0906, 1.1497, 0.3837] 等于 sRGB [-5.49283002, 3.22921315, 0.11028568],您如何将所有内容映射到 [0, 1]?也是 XY 实际上是 CIE xy 色度坐标,如果是,sRGB 值应该是 [-1.66270477, 1.87575375, 0.16599277]。
  • [-1.0906, 1.1497, 0.3837] 坐标已经是 RGB,而不是 XYZ。我进行了如下映射:frame(:,:,1) = (im_vec(:,:,1,i) - min(im_vec(:,:,1,i)))./(max(im_vec(:,:,1,i)) - min(im_vec(:,:,1,i))); 相同的索引 2 和 3 表示通道 RGB。 Frame 是我在评论中提到的视频中用作框架的图像。
  • 缺少一些东西:没有 XY 颜色空间。你的意思是XYZ还是xyY?如果您提到 XYZ,为什么 B = (0.011, 0.733) 只有两个组件而不是三个?不清楚你在问什么......

标签: image matlab colors rgb color-scheme


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-01-01
    • 1970-01-01
    • 2012-05-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-25
    • 2016-01-23
    相关资源
    最近更新 更多