【问题标题】:Color subtraction RBG or CIElab颜色减法 RBG 或 CIElab
【发布时间】:2018-12-05 12:33:16
【问题描述】:

我在这里阅读了几个主题,根据答案没有确切的解决方案。无论如何,假设我们有 RGB 颜色选择器 (0-255,0-255,0-255) 和两种颜色,一种是原始的未混合的,另一种是混合的,那么我如何准确地减去以找到添加了哪一种?它真的像

z - y = x ?

有没有研究公式?

另一个问题是,如果应用 CIElab 转换来获得色调饱和度亮度,那么我该如何应用这些来减去颜色?

【问题讨论】:

  • 关于 RGB 电脑颜色的半相关视频:Computer Color is Broken 可能有用。
  • 答案是你必须逆向混合算法。但问题是某些颜色混合是不可逆的(部分原因是arithmetic saturation)。例如,考虑颜色z 可以通过混合wy 以及通过混合xy 来产生。如果你知道zy,那么就无法知道第三种颜色是w还是x
  • @user3386109 以前没有想过,有什么解决办法吗?我已经阅读了有关模块化的内容,但如果合适的话,请不予考虑。在首先比较一个亮度之前对所有颜色进行归一化会更好,然后在最大饱和度下进行比较,在没有灰色混合的情况下进行比较

标签: java android algorithm colors rgb


【解决方案1】:

你的意思是加色混合?

在这种情况下,只添加了灯光。所以,这只是光强的加减,所以RGB就可以了。但是你需要线性色彩空间。所以你需要“取消应用” gamma,加减,然后再次应用 gamma。

请参阅 https://en.wikipedia.org/wiki/SRGB#Specification_of_the_transformation 以了解应用 Gamma 和取消应用它的公式:C 是通道(R、G、B,每个),C_linear 是线性空间(您可以在其中添加和减去强度)和 @987654327 @ 是我们在计算机上使用的通道值。注意:您应该除以 255 并乘以,以将值从 0 标准化为 1。

对于正常的颜色混合(油漆、墨水、染料等),这很复杂,但在这种情况下,CIExyz 是首选:实际上在这样的空间上,混合的结果在两者之间原始色度。不幸的是,该模型没有告诉您结果将在这条线内的什么位置。通常需要更多关于每种颜色的数据(通常而不是 RGB 三元组,一个大约 60 项的向量 [所以每 5nm 一个数据])

【讨论】:

  • 实用技巧,谢谢!几个问题:sRGB 是我们所有设备上的标准/默认设置,对吧?另:为什么CIExyz优于CIElab?后者有接近人眼的L和巨大的色彩空间?我如何准确地减去颜色? wiki en.wikipedia.org/wiki/CIE_1931_color_space 上有公式,但它是关于求和的,我可以扭转它吗?它也有每种颜色的亮度 L,我如何获得它们?有白色参考坐标吗?我究竟是如何得到那个向量的?
  • sRGB 是 HTML 使用的标准,在此之前是计算机屏幕的标准(由 Microsoft and Co. 在 199x 中定义)。 CIExyz 和 CIELab 只是不同的色彩空间,只是相同的不同表示。 CIExyz 从未使用过(但正如我所写,它很有用)。 CIExyY 更常见(Y 更直观)。但通常我们在一个图上只有 x,y(颜色空间比较的标准图。xy 是定义色度的标准图(例如对于 sRGB)。使用 CIELab 将颜色从一个空间转换为另一个空间(Lab 也类似于视频组件)。
  • 白色参考由标准给出。 sRGB 具有与其他标准不同的白色(它还取决于观察者对环境的预期亮度)。见en.wikipedia.org/wiki/SRGB。 L用白色定义。通常我们将其定义为 1 或 100 或 255(作为参考,而不是绝对值)。白色是屏幕上的亮点。但是白色是由 R、G、B 组成的(在普通屏幕上),因此您可以计算每种颜色(在屏幕上)的最大亮度,始终与白色亮度进行比较。
  • 你能解释一下为什么CIExyz混合结果是一条线吗?根据公式,我应该得到结果色点坐标(xmix,ymix)。另外,您能否解释一下wiki混合公式中的亮度,L-luminance和Y-luminance在其中是否相同? en.wikipedia.org/wiki/CIE_1931_color_space(相同链接)
  • @JayJayAbrams:(线性)RGB 和 XYZ 是锥体灵敏度的线性组合,因此混合是线性的 [而变换只是矩阵乘法]。 xyz 的构造(仅使用 X,或 Y 或 Z,并且具有相同的分母)保持混合(但不再在中间)。亮度:Y被定义为与亮度相似,所以它们非常相似(Y是固定的,亮度是一个物理量,所以新数据可能会稍微改变它,但AFAIK它保持不变)。警告:关于亮度有很多混淆(经常被错误地使用)。 Y' 不是 Y。始终检查标准中的定义。