1

我正在尝试使用 python colormath(delta_e_cie2000 等)中的 Delta E 函数将 Cielab 颜色的比较值转换为概率分布。问题是,我在 Delta E 函数上找不到任何参考,告诉我什么区间 [min, max],返回值是元素。

例如红色和蓝色两种 SRGB 颜色的结果:

c1 = convert_color(convert_color(sRGBColor(1,0,0), XYZColor), LabColor)
c2 = convert_color(convert_color(sRGBColor(0,0,1), XYZColor), LabColor)
print(delta_e_cie2000(c1, c2))

是 52.880。

如果间隔是 [0,100],我可以除以 100 以将其标准化为 [0,1] 之间的数字。

有人知道参考或知道如何确定最小值和最大值吗?我不想通过随机化颜色并尝试找到阈值来迭代测试它。

4

1 回答 1

2

CIE Lab ΔE 没有定义的工作范围,最大理论范围也取决于您选择的 RGB 色彩空间。

但是,需要牢记的重要一点是,CIE Lab ΔE 并非旨在测量超过某个 CIE Lab ΔE 幅度的色差。10-20 ΔE 被认为很大,可能是可用的最大值,在此之后尝试量化差异是没有意义的。您最终可能会得到比另一个在空间上更分离的一对,其 ΔE 比后者更小。

以下是一些相关的出版物:

根据您的评论,您似乎对准度量是否产生有意义的结果不太感兴趣。对于一般情况,您可以执行以下操作:

  • 对 Spectral Locus 外表面进行采样,即获取一些 CIE XYZ 色彩空间坐标。
  • 生成所有对组合。
  • 转换为 CIE 实验室。
  • 计算 CIE Lab ΔE 并保留最大值。

以下是如何使用Color执行此操作的示例:

import colour
import itertools
import numpy as np

XYZ = colour.volume.XYZ_outer_surface()

combinations = colour.XYZ_to_Lab(np.array(list(itertools.combinations(XYZ, 2))))

delta_E = colour.delta_E(combinations[:, 0, :], combinations[:, 1, :])

print(np.max(delta_E))

# 144.998329679

对于特定的 sRGB 情况,您可以对转换为 CIE XYZ 颜色空间坐标的 sRGB 立方体进行采样,如下所示:

import colour
import colour.plotting
import itertools
import numpy as np

RGB = colour.plotting.volume.cube(
    width_segments=10, height_segments=10, depth_segments=10)
XYZ = colour.sRGB_to_XYZ(RGB, apply_decoding_cctf=False)

combinations = colour.XYZ_to_Lab(np.array(list(itertools.combinations(XYZ, 2))))

delta_E = colour.delta_E(combinations[:, 0, :], combinations[:, 1, :])

print(np.max(delta_E))

# 119.022907418

如果您想现场试用,这里是 Google Colab 笔记本:https ://colab.research.google.com/drive/1nxlq-QIhByrGiF24oZHFX7dNymG79BYg#scrollTo=IkdwsUvzob6h

于 2019-09-21T07:01:17.817 回答