каков интервал возвращаемых значений функций Delta E для сравнения цветов Cielab? - PullRequest
2 голосов
/ 20 сентября 2019

Я пытаюсь превратить значения сравнения цветов Cielab с помощью функций Delta E из 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].

Кто-нибудь знает ссылку или есть идея, как определить минимальное и максимальное значение?Я не хочу итеративно проверять его, рандомизируя цвета и пытаясь найти пороги.

1 Ответ

1 голос
/ 21 сентября 2019

CIE Lab ΔE не имеет определенного рабочего диапазона, максимальный теоретический диапазон также зависит от выбранного цвета RGB в вашем случае.

Однако важно помнить, что CIE Lab ΔE былане предназначен для измерения разницы в цвете сверх определенной величины CIE Lab ΔE.10-20 ΔE считается большим и, вероятно, используемым максимумом, после которого бессмысленно пытаться количественно оценить разницу.Вы можете получить пару пространственно разделенных друг от друга пар с меньшим ΔE, чем у последнего.

Вот несколько соответствующих публикаций:

По вашим комментариям кажется, что вас не так сильно интересуетли квазиметрический дает значимый результат.Тогда вы могли бы сделать следующее:

  • Выполнить выборку внешней поверхности Spectral Locus, т.е. получить некоторые координаты цветового пространства CIE XYZ.
  • Создать все комбинации пар.
  • Преобразовать в CIE Lab.
  • Вычислить 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

Вот блокнот Google Colab, если вы хотите попробовать вживую: https://colab.research.google.com/drive/1nxlq-QIhByrGiF24oZHFX7dNymG79BYg#scrollTo=IkdwsUvzob6h

...