【问题标题】:Conversion between RGB and RYB color spacesRGB 和 RYB 颜色空间之间的转换
【发布时间】:2011-06-24 03:30:39
【问题描述】:

我目前正在尝试在 RGB(红、绿、蓝)颜色空间和 RYB(红、黄、蓝)颜色空间之间转换颜色,然后再转换回来。

根据以下论文中的详细信息,我可以使用三线性插值将 RYB 转换为 RGB - 其中参数权重 (s, t, u) 是 RYB 颜色,立方体的顶点是 3d 点在 RGB 空间中。

Paint Inspired Color Mixing and Compositing for Visualisation - Gossett and Chen - 第 2.1 节 - 实现细节

我的困难在于扭转转换过程。

第二篇论文提到了这种技术的使用,并指出反向转换是使用牛顿法实现的。但没有提供更多细节。这可能表明在求解三线性插值方程时求根。

On the Transfer of Painting Style to Photographic Images through Attention to Colour Contrast - Xiaoyan Zhang; Constable, M.; Ying He;

在我用方程式扩展这个问题之前,有没有人用 Java/C/C++/C# 等语言看到或解决过这个问题?

我目前的方法是采用三线性插值的正向方程(RYB 到 RGB),扩展和重新排列以提供 3 个用于 3 个未知数(参数权重:s、t 和 u)的联立方程,然后计算出如何使用 Newton-Raphson 方法求根。我是否以正确的方式处理这件事?

【问题讨论】:

标签: math rgb interpolation newtons-method


【解决方案1】:

我终于解决了。

取三线性插值方程: wikipedia 编辑:Wikipedia revision at the time

将第一个方程代入最后一个方程,展开并收集系数: Xd, Yd, Zd, XdYd, XdZd, YdZd, ZdYdZd 和常数。

然后求方程在 3 个维度中的每个维度中关于 Xd、Yd 和 Zd 的偏微分。使用这些新方程填充 (3x3) 雅可比矩阵,然后使用牛顿法在软件中求解。

Newton-Raphson Method

【讨论】:

  • 链接的信息好像没有了。你指的是哪个方程?
  • Wiki 包含所有过去的修订。以发帖日期推测,这大概是我当时看到并使用的修订版:en.wikipedia.org/w/…怕是记不住步骤是什么了。但希望它对你更有意义。
【解决方案2】:

我发现this JavaScript implementation 的 RYB->RGB 转换基于三次样条。这是我的 Lua 端口(所有值都在 0-1 区间内):

local ryb2rgb = function( R, Y, B ) 
  local R, Y, B = R*R*(3-R-R), Y*Y*(3-Y-Y), B*B*(3-B-B)
  return 1.0 + B * ( R * (0.337 + Y * -0.137) + (-0.837 + Y * -0.163) ),
    1.0 + B * ( -0.627 + Y * 0.287) + R * (-1.0 + Y * (0.5 + B * -0.693) - B * (-0.627) ),
    1.0 + B * (-0.4 + Y * 0.6) - Y + R * ( -1.0 + B * (0.9 + Y * -1.1) + Y )
end
【解决方案3】:

这是 UIColor 上的一个类别,它做同样的事情,返回 RGB、RYB 和 CMYK 之间的元素。此外,您可以在各自的颜色空间中混合任意数量的颜色(当然,它们的混合方式不同,具体取决于)。

https://github.com/ddelruss/UIColor-Mixing

【讨论】:

    猜你喜欢
    • 2020-11-29
    • 2020-01-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-01
    • 2013-08-11
    相关资源
    最近更新 更多