image - 从 RGB 到 xyY 空间对颜色进行采样
问题描述
我正在尝试从 RGB 图像中采样颜色并将其转换为相应的 XY 坐标。RGB图像之前已经从xyY坐标开始,然后转换成RGB,即:
如果我在 xyY 空间中有坐标 B = (0.011, 0.733),则使用xyz2rgb
Matlab 中的函数将产生那种输出 (-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] 范围内?
解决方案
我通过裁剪 xyz2rgb 转换的结果(即将负值等于 0,大于 1 的值等于 1)解决了这个问题,消除了生成视频帧的标准化问题。使用这个解决方案,我直接比较了 RGB 中的颜色,而无需再次在 xyY 空间中转换它们。
推荐阅读
- youtube - 用于嵌入 2019/2020 的永久流现在链接
- xcode - 尝试在 Xcode 中打开我的反应原生项目以构建 IPA 时文件丢失
- html - 将鼠标悬停在 div 上时,如何触发链接上的多个悬停动作?
- r - “数据和参考应该是同一水平的因素”,在决策树上进行交叉验证
- jquery - 使用 jQuery 将字符串替换为 div 中的 HTML
- c++ - Arduino/C++ 正确使用指针的方法
- c++ - 插入时同时遍历地图,以何种方式不安全
- javascript - 给每个元素一个不同的文本(循环,数组)
- objective-c - 目标 C 字典不返回相同的数字
- python - 使用 PyInstaller 可执行程序卡在循环中的进程