颜色差异

**颜色差异**（），亦称**颜色距离**，是色彩学上的一个关注点。它量化了一个概念。在未量化之前，人们只能用形容词来大概描述这个概念，这使得对颜色要求严格的工作者们很不方便。颜色差异可以通过色彩空间内的欧氏距离简单计算得出，也可以使用国际照明委员会较为复杂、均匀的人类知觉公式计算。

## 欧氏距离
很多日常使用的“颜色差异”，是直接通过在一个“设备无关”的色彩空间里，进行欧氏距离的计算得到的。给定一个RGB（红绿蓝）的色彩空间，最简单的差异计算方式就是在这个三维空间里求两个点间的距离：

:\mathrm{\Delta_{RGB}} = \sqrt{ (R_2-R_1)^2+(G_2-G_1)^2 + (B_2-B_1)^2 }

如果还要简单一点，经常可以去掉平方根：

:\mathrm{\Delta_{RGB}}^2 = { (R_2-R_1)^2+(G_2-G_1)^2 + (B_2-B_1)^2 }

这样求得的距离可以用来比较两个颜色中哪一个更接近某个给定的颜色。如果把这些平方距离加在一起，会得到一组距离间的方差。

有不少人尝试将RGB三值加上权重，希望可以让得到的结果更加符合人类感官。一种做法是使用2、4、3：
:\sqrt{ 2 \times \Delta R^2 + 4 \times \Delta G^2 + 3 \times \Delta B^2 }, 
对于0~255的数值，有一种近似是：

:\bar r = {k_C S_C}\right)^2 + \left(\frac{\Delta H^*_{ab}}{k_H S_H}\right)^2 }

其中：

:\Delta L^* = L^*_1 - L^*_2
:C^*_1 = \sqrt{ {a^*_1}^2 + {b^*_1}^2 }
:C^*_2 = \sqrt{ {a^*_2}^2 + {b^*_2}^2 }
:\Delta C^*_{ab} = C^*_1 - C^*_2
:\Delta H^*_{ab} = \sqrt{ {\Delta E^*_{ab}}^2 - {\Delta L^*}^2 - {\Delta C^*_{ab}}^2 } = \sqrt{ {\Delta a^*}^2 + {\Delta b^*}^2 - {\Delta C^*_{ab}}^2 }
:\Delta a^* = a^*_1 - a^*_2
:\Delta b^* = b^*_1 - b^*_2
:S_L = 1
:S_C = 1+K_1 C^*_1
:S_H = 1+K_2 C^*_1

另外，其中的*k<sub>C</sub>*和*k<sub>H</sub>*一般都取1，系数（权值）*k<sub>L</sub>*、*K*1和*K*2则依应用场合不同而取不同的值。如：

从几何学上讲，\Delta H^*_{ab}这个数量即是这两种颜色的相同色度圈的弦长的算术平均值。

### CIEDE2000
鉴于1994年的公式并没有充分解决感知非均匀特性的问题，CIE再次修缮了定义，并加入了5个修订系数：
* 色调旋转项(RT)，用来应对常出问题的蓝色区域（色相角度275°左右）；
* 中性色调补偿（对应L*C*h差异）
* 亮度补偿（SL）
* 色度补偿（SC）
* 色调补偿（SH）

:\Delta E_{00}^* = \sqrt{ \left(\frac{\Delta L'}{k_L S_L}\right)^2 + \left(\frac{\Delta C'}{k_C S_C}\right)^2 + \left(\frac{\Delta H'}{k_H S_H}\right)^2 + R_T \frac{\Delta C'}{k_C S_C}\frac{\Delta H'}{k_H S_H} }

::**注：**下面的公式请使用角度而非弧度，尤其在*R<sub>T</sub>*上需要注意。
::*k<sub>L</sub>*、*k<sub>C</sub>*、*k<sub>H</sub>*一般取1。

:\Delta L^\prime = L^*_2 - L^*_1

:\bar{L} = \frac{L^*_1 + L^*_2}{2} \quad \bar{C} = \frac{C^*_1 + C^*_2}{2}

:
  a_1^\prime = a_1^* + \frac{a_1^*}{2} \left( 1 - \sqrt{\frac{\bar{C}^7}{\bar{C}^7 + 25^7}} \right) \quad
  a_2^\prime = a_2^* + \frac{a_2^*}{2} \left( 1 - \sqrt{\frac{\bar{C}^7}{\bar{C}^7 + 25^7}} \right)


:
  \bar{C}^\prime = \frac{C_1^\prime + C_2^\prime}{2} \mbox{ and }
  \Delta{C'}=C'_2-C'_1 \quad
  \mbox{where }
    C_1^\prime = \sqrt{a_1^{'^2} + b_1^{*^2}} \quad
    C_2^\prime = \sqrt{a_2^{'^2} + b_2^{*^2}} \quad


:
  h_1^\prime=\text{atan2} (b_1^*, a_1^\prime) \mod 360^\circ, \quad
  h_2^\prime=\text{atan2} (b_2^*, a_2^\prime) \mod 360^\circ

:: **Note:** The inverse tangent (tan&minus;1) can be computed using a common library routine `atan2(b, a&prime;)` which usually has a range from &minus;&pi; to &pi; radians; color specifications are given in 0 to 360 degrees, so some adjustment is needed. The inverse tangent is indeterminate if both *a&prime;* and *b* are zero (which also means that the corresponding *C&prime;* is zero); in that case, set the hue angle to zero. See .

:
  \Delta h' = \begin{cases}
    h_2^\prime - h_1^\prime & \left| h_1^\prime - h_2^\prime \right| \leq 180^\circ \\
    h_2^\prime - h_1^\prime + 360^\circ & \left| h_1^\prime - h_2^\prime \right| > 180^\circ, h_2^\prime \leq h_1^\prime \\
    h_2^\prime - h_1^\prime - 360^\circ & \left| h_1^\prime - h_2^\prime \right| > 180^\circ, h_2^\prime > h_1^\prime
  \end{cases}

:: **Note:** When either *C&prime;*1 or *C&prime;*2 is zero, then &Delta;h&prime; is irrelevant and may be set to zero. See .

:
  \Delta H^\prime = 2 \sqrt{C_1^\prime C_2^\prime} \sin (\Delta h^\prime/2), \quad \bar{H}^\prime=\begin{cases}
    (h_1^\prime + h_2^\prime + 360^\circ)/2 & \left| h_1^\prime - h_2^\prime \right| > 180^\circ \\
    (h_1^\prime + h_2^\prime)/2 & \left| h_1^\prime - h_2^\prime \right| \leq 180^\circ
  \end{cases}

:: **Note:** When either *C&prime;*1 or *C&prime;*2 is zero, then &prime; is *h&prime;*1+*h&prime;*2 (no divide by 2; essentially, if one angle is indeterminate, then use the other angle as the average; relies on indeterminate angle being set to zero). See  stating most implementations on the internet at the time had "an error in the computation of average hue".

:
  T = 1 - 0.17 \cos ( \bar{H}^\prime - 30^\circ )
        + 0.24 \cos (2\bar{H}^\prime)
        + 0.32 \cos (3\bar{H}^\prime + 6^\circ )
        - 0.20 \cos (4\bar{H}^\prime - 63^\circ)


:
  S_L = 1 + \frac{0.015 \left( \bar{L} - 50 \right)^2}{\sqrt{20 + {\left(\bar{L} - 50 \right)}^2} } \quad
  S_C = 1+0.045 \bar{C}^\prime \quad
  S_H = 1+0.015 \bar{C}^\prime T


:R_T = -2 \sqrt{\frac{\bar{C}'^7}{\bar{C}'^7+25^7}} \sin \left[ 60^\circ \cdot \exp \left( -\left[ \frac{\bar{H}'-275^\circ}{25^\circ} \right]^2 \right) \right]

## 应用
### 差异分类
在讨论人类感知时，一般使用计算色彩差异。如前所述，一般认为在系统中，1.0是刚好注意得到的量。取决于产品的受众，有时候会改用2.5作为可以接受的限制。例如一般情况下，人们会说“叶子和草地是绿的”，但仔细看就能发现叶子和草地都有从黄绿到蓝绿等不同的差异。

这类差异在很多产品的品质控制中非常重要：在生产和运输中经常会有一些来自内部或外部的随机扰动，造成实际上显示的颜色和之前校准出的结果有一些差异。在最理想的情况下，要做到“一般的观察者”不能察觉这类变化。胶印过程中通常允许最高2到4个单位的色彩差异；而家用打印机造成的色差可能更大。

## 脚注

## 延伸阅读
* 
* 
* 

## 外部链接
* Michel Leonard 的 CIE ΔE 2000 实现，涵盖 20 多种编程语言。
* Bruce Lindbloom's color difference calculator . Uses all metrics defined herein.
* The CIEDE2000 Color-Difference Formula , by Gaurav Sharma. Implementations in MATLAB and Excel.
* Color Similarity Tool , by Dragan Bajcic,  Implementations in PHP and Javascript.
* python-colormath .  Implementation in Python.
* Precise Color Communication  Konica Minolta Sensing.