Это трудно. Во-первых, набор значений RGB не определяет цвет. Их необходимо интерпретировать в свете основных цветов, к которым они относятся (цветовое пространство), таких как sRGB, Rec.709, Rec.2020, Adobe RGB (1998) и т. Д.
Кроме того, значения RGB, с которыми мы обычно сталкиваемся, не пропорциональны линейному свету: они «кодируются» с помощью нелинейной функции (гамма). И иногда (в основном в видеоприложениях) значение «черного» не равно нулю, а смещено от нуля, обычно 16 для 8-битных значений. А «белый» - это не 255, а 235. sRGB и Rec.709 имеют общие основные цвета RGB, но их гамма-функции различны.
Преобразование цветового пространства начинается с удаления любого смещения черного, чтобы черный был равен нулю. Если гамма-функция имеет точку останова (например, sRGB и Rec.709), вам нужно будет тщательно масштабировать значения RGB, чтобы «белый» был равен 1.0.
Затем «декодируйте» гамму, выполняя инверсию исходной гамма-функции. (Один ответ предполагал возведение значений в квадрат, что является приближением гамма-декодирования.) Теперь у вас есть значения RGB с линейным освещением в некотором цветовом пространстве. На этом этапе вы можете преобразовать это цветовое пространство в пространство Lab. Большинство преобразований из RGB в Lab проходят через промежуточное цветовое пространство под названием XYZ.
Шаги как вызовы вложенных функций:
Lab = XYZ2Lab (RGB2XYZ (gamma_decode (offset_and_scale (RGB), gammaFunction), цветовое пространство RGB))
(Лабораторное пространство было разработано в 1976 году как попытка создать перцептивно-однородную деформацию стандартного пространства CIE XYZ. (Luv была еще одной попыткой). Идея состоит в том, что евклидово (прямолинейное) расстояние между двумя цветами, которые были просто -заметно различное (1 «JND») будет одинаковым расстоянием для любых двух цветов. Расстояние между двумя цветами в Lab известно как «дельта-E». Простая формула дельта-евклидова расстояния теперь называется dE76. См. https://en.wikipedia.org/wiki/Color_difference)
В вашем случае вы можете усреднить два цвета Lab, чтобы получить новый цвет Lab, а затем отменить все преобразования, чтобы вернуться к RGB в выбранном вами цветовом пространстве.
Это приблизит вас, но не гарантируется, просто потому, что «цвет» - это человеческое восприятие, а не физическая величина, и его, как известно, трудно надежно охарактеризовать. Лаборатория на самом деле не очень хорошо справлялась с единообразием восприятия. Поэтому вместо исправления Lab они предложили новую, более сложную функцию дельта-E с еще одним встроенным деформированием: DE94. Это было лучше, но не идеально, поэтому в 2000 году появилось другое предложение: DE2000. Тоже лучше, но не идеально. См. Эту страницу Wiki выше для получения дополнительной информации.
Если DE2000 недостаточно хорош (или слишком сложен!), Вы можете взглянуть на альтернативу Lab под названием ICtCp, который считается более однородным по восприятию, чем Lab.
person
user1539094
schedule
28.06.2017