【问题标题】:How to interpolate between n colors by a fractional contribution for each color?如何通过每种颜色的分数贡献在n种颜色之间进行插值?
【发布时间】:2016-11-23 13:00:53
【问题描述】:

如何在 n 种颜色之间进行插值。

2种颜色的简单案例

首先考虑一个更简单的情况,我们想要找到 2 种颜色的中点。

Color1 is RGB ( 255, 0, 0 ) // Red
Color2 is RGB ( 128, 128, 128 ) // Grey

解决方案是分别考虑的每个 R、G、B 之间的中点。

RGB ( 128 + 64, 128 / 2, 128 / 2 ) = RGB ( 192, 64, 64 )

由于中点恰好在两者之间,并且与插值存在线性关系,因此可以在 Color1 和 Color2 之间进行小数插值,例如 0.25,颜色应该更接近 Color1。

RGB ( 255 - 32, 32, 32 ) = RGB ( 223, 32, 32 )

n种颜色的情况

我希望找到解决方案的情况是,有 n 种颜色,每种颜色的分数权重总计高达 1.0。

(猜测,我猜每种颜色都可以被认为是 3 维空间中的一个点,权重描述了插值点与每个颜色点的相对距离)

颜色插值仅是线性 RGB。

在某些情况下,我猜可能有多个整数值可以解决问题,例如,如果有 n 几种颜色具有相似的值。

我读到有双线性插值可能有助于解决这个问题。

颜色的数量通常不会超过 5 种,通常是 2、3 或 4 种颜色。

【问题讨论】:

  • 对不起,我不太明白,什么是实际问题。您已经描述了如何在两种颜色之间进行插值。将这些知识用于迭代 n 颜色有什么问题?此外,如果您不仅想提供“多边形”插值,您可以获取相同“维度”的点并从中创建多项式,然后通过该多项式。
  • 我怀疑的主要问题是我数学不好。

标签: image-processing computer-vision interpolation spatial-interpolation bilinear-interpolation


【解决方案1】:

您的猜测将给出可接受的解决方案(是的,您需要分别对每个维度进行插值)。

问题是,色彩空间可以用多个模型来描述,每个模型都有不同的维数。根据您是选择 RGB、CMYK、HSL 还是任何其他奇特的描述,插值看起来会有所不同 - 由于这些差异主要是美学上的,因此很难用非常专业的术语来描述它们。例如,使用 HSL 的插值将始终通过使用颜色圆圈在颜色之间移动。

可以在 Krita 手册中找到使用不同颜色模型进行计算的一些后果(及其带来的复杂性)的详细描述:https://userbase.kde.org/Krita/Manual/ColorManagement

【讨论】:

    【解决方案2】:

    一些解决问题的 Java 代码位于此处,请注意它是使用 Scala SBT 构建的,但它的 Java 代码。

    https://github.com/PhilAndrew/betweenrgb

    这里测试加权颜色的合并:

    https://github.com/PhilAndrew/betweenrgb/blob/master/src/test/java/between/rgb/MergeWeightedColorsTest.java

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-07-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-08-07
      相关资源
      最近更新 更多