1. 概述

在本文中,我们将讨论如何计算两种颜色之间的相似度。首先,我们会解释为什么需要一个合适的颜色相似度度量标准,然后逐步介绍三种从简单到复杂的颜色相似度计算方法。

2. 重要性

如今,颜色建模是许多应用程序中不可或缺的一部分。颜色通常用多种颜色空间表示,如 RGBHSV 和 HSL。量化颜色之间的相似度非常重要,因为它使我们能够用数字来衡量原本只能用形容词描述的视觉感知。

正如我们将看到的,颜色相似度的计算并不像表面看起来那么简单。传统的距离度量方式并不总是符合人类的视觉感知。因此,我们需要对这些度量方式进行调整,使其更贴近人眼对颜色差异的感知。

为了更直观地理解这些方法,我们定义三种颜色的RGB值如下:

  • C₁ = (255, 102, 102)
  • C₂ = (255, 178, 102)
  • C₃ = (255, 204, 255)

下图展示了这三种颜色:

colors

3. 简单方法:RGB空间中的欧氏距离

最简单的方法是在RGB颜色空间中使用欧氏距离(Euclidean Distance)来衡量颜色之间的差异。对于两种颜色 (R₁, G₁, B₁) 和 (R₂, G₂, B₂),其欧氏距离定义为:

$$ d = \sqrt{(R_1 - R_2)^2 + (G_1 - G_2)^2 + (B_1 - B_2)^2} $$

在实际应用中,也可以省略平方根,只计算各通道差值的平方和。

我们来计算示例中的距离:

  • d(C₁, C₂) = √[(255-255)² + (102-178)² + (102-102)²] = 76
  • d(C₁, C₃) = √[(255-255)² + (102-204)² + (102-255)²] = 184

从数值上看,C₁ 更接近 C₂。但如果我们凭肉眼观察,会发现 C₁ 和 C₃ 的颜色差异其实更小。

优点:实现简单,计算效率高
缺点:不符合人类视觉感知,容易产生误导性结果

4. 改进方法:加权欧氏距离

为了更贴近人类视觉感知,我们可以对RGB三个通道分别赋予不同的权重。根据实验数据,常见权重如下:

  • 红色(R): 0.3
  • 绿色(G): 0.59
  • 蓝色(B): 0.11

加权欧氏距离公式为:

$$ d = 0.3 \times (R_1 - R_2)^2 + 0.59 \times (G_1 - G_2)^2 + 0.11 \times (B_1 - B_2)^2 $$

代入我们的示例数据:

  • d(C₁, C₂) = 0.3×0 + 0.59×(76)² + 0.11×0 = 45
  • d(C₁, C₃) = 0.3×0 + 0.59×(102)² + 0.11×(153)² = 77

虽然数值差异仍然存在,但比之前更接近人眼感知。这个方法在不改变颜色空间的前提下,通过加权方式优化了视觉感知的准确性

优点:比原始欧氏距离更贴近视觉感知
⚠️ 注意:仍依赖RGB空间,不能完全反映人类感知差异

5. 最优方法:CIELAB 颜色空间中的欧氏距离

目前最符合人类视觉感知的颜色相似度计算方法是将颜色转换为 CIELAB 颜色空间后,再计算欧氏距离

CIELAB 是一种感知一致的颜色空间,由三个维度组成:

  • L*: 亮度(Lightness)
  • a*: 红绿轴(Red-Green)
  • b*: 蓝黄轴(Blue-Yellow)

转换到 CIELAB 后,颜色之间的相似度可通过以下公式计算:

$$ d = \sqrt{(L_1^* - L_2^*)^2 + (a_1^* - a_2^*)^2 + (b_1^* - b_2^*)^2} $$

我们将前面的三种颜色转换为 CIELAB 空间:

  • C₁: (255, 102, 102) → (L*, a*, b*) = (6248, 4941, 2695)
  • C₂: (255, 178, 102) → (L*, a*, b*) = (7521, 1790, 4220)
  • C₃: (255, 204, 255) → (L*, a*, b*) = (8306, 2244, 1357)

计算距离:

  • d(C₁, C₂) = 3724
  • d(C₁, C₃) = 3646

此时,我们发现 C₁ 实际上更接近 C₃,这与人的视觉感知一致。

优点:最符合人类视觉感知,适合对颜色相似度要求高的场景
缺点:转换颜色空间需要额外计算资源,实现相对复杂

6. 总结

本文介绍了三种颜色相似度的计算方法:

方法 描述 是否符合视觉感知 适用场景
RGB 欧氏距离 最简单,直接计算 RGB 差值 快速粗略比较
加权欧氏距离 对 RGB 通道加权,更贴近感知 ⚠️ 中等精度需求
CIELAB 欧氏距离 转换到感知一致的颜色空间后再计算 高精度、视觉一致性要求高的场景

📌 建议:如果你的应用对颜色相似度要求不高,可以使用加权欧氏距离;如果对视觉感知一致性有较高要求,推荐使用 CIELAB 空间中的距离计算方法。



原始标题:How to Compute the Similarity of Colours