RGB和RYB颜色空间之间的转换

16

我正在尝试在RGB(红,绿,蓝)颜色空间和RYB(红,黄,蓝)颜色空间之间进行颜色转换。

根据以下论文中的细节,我能够使用三线性插值从RYB转换为RGB - 其中参数加权(s,t,u)是RYB颜色,立方体的顶点是RGB空间中的3D点。

Gossett和Chen的可视化的绘画启发式颜色混合和合成 - 第2.1节 - 实现细节

我的困难在于反向转换过程。

第二篇论文提到了这种技术的使用,并且还表明通过牛顿法实现了反向转换。但没有提供进一步的细节。这可能表明需要在解决三线性插值方程时找到根。

通过注意颜色对比将绘画风格传递到摄影图像 - Xiaoyan Zhang; Constable,M .; Ying He;

在扩展此问题并给出方程之前,有人在Java / C / C ++ / C#等语言中看到或解决了这个问题吗?

我目前的方法是使用三线性插值的正向方程(RYB到RGB),展开并重新排列以提供3个未知数(参数加权:s,t和u)的3个同时方程,然后找出如何使用牛顿 -拉弗森方法找到根。我这样做对吗?


请注意,三线性插值在涉及RGB坐标的插值中往往是一个非常糟糕的选择。这是因为在RGB空间中,中性色位于立方体的主对角线上。您经常会看到大量的插值误差,恰好出现在您的大脑可以看到颜色微小错误的一组颜色上。 - user85109
3
您提供的Gossett和Chen的论文中,似乎在插值坐标上存在一个错别字。这里是该论文的更新版本:http://web.siat.ac.cn/~baoquan/papers/ryb_TR.pdf - EpicVoyage
@PegLeg3941:感谢提供论文链接。两个版本之间的坐标确实有所不同。 - Ben
1
这里有更多的解释:https://math.stackexchange.com/questions/305395/ryb-and-rgb-color-space-conversion - daven11
1
我在这里的答案中勾勒出了一个(希望)有效的解决方案:https://math.stackexchange.com/a/4370750/1020517(部分代码已验证)。 - generateme
显示剩余4条评论
3个回答

7
最终我设法解决了它。
采用三线性插值方程: 维基百科 编辑:当时的维基百科修订版 将第一个方程代入最后一个方程,然后展开并收集以下系数:Xd、Yd、Zd、XdYd、XdZd、YdZd、ZdYdZd和常量。
然后在每个3维度上找到方程的偏微分,分别关于Xd、Yd和Zd。使用这些新方程填充(3x3)雅可比矩阵,然后使用牛顿法在软件中求解。 牛顿-拉夫逊方法

链接的信息似乎已经消失了。你指的是哪些方程式? - General Grievance
维基百科保存了所有过去的修订版本。根据帖子的日期猜测,这可能是我当时看到和使用的修订版本: https://en.wikipedia.org/w/index.php?title=Trilinear_interpolation&oldid=395979902 恐怕我记不得步骤了。但希望对您有更多意义。 - Ben

3

我找到了这个基于三次样条的RYB->RGB转换的JavaScript实现,链接在这里。下面是我的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

1
正如他所说,问题在于进行反向转换,即rgb -> ryb。 - Gustavo Maciel
http://nishitalab.org/user/UEI/publication/Sugita_IWAIT2015.pdf http://nishitalab.org/user/UEI/publication/Sugita_SIG2015.pdf - Krzycho

3
这里有一个关于UIColor的类别,可以返回RGB、RYB和CMYK之间的元素。此外,您可以在相应的颜色空间中混合任意数量的颜色(当然,它们混合方式不同)。 https://github.com/ddelruss/UIColor-Mixing

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接