gpt4 book ai didi

ruby - 我如何将单个 RGB 值与集合进行比较以使用 CIE94 公式找到最接近的匹配项 - 在 Ruby 中,

转载 作者:数据小太阳 更新时间:2023-10-29 08:28:16 24 4
gpt4 key购买 nike

我有一个 RGB 值,我想从 120 种颜色的集合中找到与该 RGB 值最接近的匹配项。

据我所知,执行此类检查的最准确方法之一是使用 CIE94 formula .但是,我在使用 Ruby 实现它时遇到了麻烦。

你会如何建议我这样做?

          R1, G1, B1 = pixel.red, pixel.green, pixel.blue
c = Colour.first
R2, G2, B2 = (c.red * 256), (c.green * 256), (c.blue * 256)

C1 = Math.sqrt((G1**)+(G2**))
C2 = Math.sqrt((B1**)+(B2**))
CAB = C1 - C2

DA = G1 - G2
DB = B1 - B2

DH = Math.sqrt((DA** + DB** - CAB**))

divergence = Math.sqrt( ((R1-R2)/2)** + (CAB/ (1+(0.048*C1)))** + ( DH / ( 1 + ( 0.014 * C1))** )

根据使用 LCMS 的答案建议之一,我才意识到我正在使用的 RMagick (Imagemagick) ruby​​ 库实际上引入了 LCMS。这意味着我可以访问其中的一些功能——“预烘焙”。有人知道使用 RMagick 实现上述目标的方法吗?

最佳答案

这实际上比您预期的要复杂很多。出于多种原因。

主要问题是 RGB 空间是一个设备相关的空间 - 在一个设备上看起来相似的 RGB 值在另一个设备上不一定看起来相似。 (如果您认为这听起来不太可能 - 由于操作系统对显示器 Gamma ​​的不同假设,在 mac/win/SGI 之间获得良好的颜色对应之间存在大量问题。)

第二个问题是两种颜色之间差异的感知在很大程度上取决于周围的颜色/观看环境。 IE。两种颜色在黑暗环境中的黑暗环境中看起来可能不同,但在明亮环境中的白色环境中看起来相似。

考虑到这些附带条件,Delta CIE 94 是一种不错的颜色相似性度量。

您将通过将每种颜色从 RGB 转换为 XYZ,然后再转换为 Lab 来计算它。RGB 到 XYZ 的转换取决于设备 - 有一些简单的标准转换适用于它,例如 sRGB ,但它们对真实设备的适用性值得怀疑。 XYZ到Lab的转换比较复杂,可以引用here - 对于您的引用白点,您将使用您设备的白点(如果您使用的是标准,则使用 sRGB)。

最后,您可以使用上面列出的公式进行最终转换。

由于这一切都相对痛苦,调用适当的颜色管理工具(如 LCMS)可能会更好。

关于ruby - 我如何将单个 RGB 值与集合进行比较以使用 CIE94 公式找到最接近的匹配项 - 在 Ruby 中,,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12584882/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com