我正在尝试使用Delta E函数将Cielab颜色的比较值从python colormath(delta_e_cie2000等)转换为概率分布。
问题是,我在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]之间的数字。

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

最佳答案

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


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


采样光谱轨迹外表面,即获得一些CIE XYZ色彩空间坐标。
生成所有对组合。
转换为CIE Lab。
计算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 - 用于比较Cielab颜色的Delta E函数的返回值的间隔是多少?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/58027500/

10-11 06:52