用于比较 Cielab 颜色的 Delta E 函数的 return 值的区间是多少?
what is the interval of the return values of Delta E functions for comparing Cielab colours?
我正在尝试使用来自 python 颜色数学(delta_e_cie2000 等)的 Delta E 函数将 Cielab 颜色的比较值转换为概率分布。
问题是,我找不到任何关于 Delta E 函数的参考,告诉我什么区间 [min, max],return 值是元素。
例如两种 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] 之间的数字。
有人知道参考资料或知道如何确定最小值和最大值吗?我不想通过随机化颜色并尝试找到阈值来迭代测试它。
CIE Lab ΔE 没有定义的工作范围,最大理论范围也取决于您选择的 RGB 色彩空间。
但是,需要牢记的一点是,CIE Lab ΔE 并非设计用于测量超出特定 CIE Lab ΔE 量级的色差。 10-20 ΔE 被认为是 大 并且可能是可用的最大值,超过此值后尝试量化差异是没有意义的。你最终可能会得到一对空间上比另一对更小的 ΔE 比后者更小。
以下是一些相关的出版物:
- A Similarity Measure for Large Color Differences
- A colour‐difference formula for assessing large colour differences
根据您的评论,您似乎对准度量是否产生有意义的结果不太感兴趣。一般情况下你可以做的如下:
- 对 Spectral Locus 外表面进行采样,即获取一些 CIE XYZ 色彩空间坐标。
- 生成所有对组合。
- 转换为 CIE 实验室。
- 计算 CIE Lab ΔE 并保留最大值。
这里有一个例子,说明如何使用 Colour:
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
我正在尝试使用来自 python 颜色数学(delta_e_cie2000 等)的 Delta E 函数将 Cielab 颜色的比较值转换为概率分布。 问题是,我找不到任何关于 Delta E 函数的参考,告诉我什么区间 [min, max],return 值是元素。
例如两种 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] 之间的数字。
有人知道参考资料或知道如何确定最小值和最大值吗?我不想通过随机化颜色并尝试找到阈值来迭代测试它。
CIE Lab ΔE 没有定义的工作范围,最大理论范围也取决于您选择的 RGB 色彩空间。
但是,需要牢记的一点是,CIE Lab ΔE 并非设计用于测量超出特定 CIE Lab ΔE 量级的色差。 10-20 ΔE 被认为是 大 并且可能是可用的最大值,超过此值后尝试量化差异是没有意义的。你最终可能会得到一对空间上比另一对更小的 ΔE 比后者更小。
以下是一些相关的出版物:
- A Similarity Measure for Large Color Differences
- A colour‐difference formula for assessing large colour differences
根据您的评论,您似乎对准度量是否产生有意义的结果不太感兴趣。一般情况下你可以做的如下:
- 对 Spectral Locus 外表面进行采样,即获取一些 CIE XYZ 色彩空间坐标。
- 生成所有对组合。
- 转换为 CIE 实验室。
- 计算 CIE Lab ΔE 并保留最大值。
这里有一个例子,说明如何使用 Colour:
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