Это сложно. Во-первых, набор значений 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 известно как "delta-E". Простая формула дельта-евклидова расстояния теперь называется dE76. https://en.wikipedia.org/wiki/Color_difference)
В вашем случае вы могли бы усреднить два цвета Lab, чтобы получить новый цвет Lab, а затем обратить все преобразования, чтобы вернуться к RGB в выбранном вами цветовом пространстве.
Это сблизит вас, но не гарантирует, просто потому, что «цвет» - это восприятие человека, а не физическая величина, и его, как известно, трудно надежно охарактеризовать. Лаборатория на самом деле не работала так хорошо, чтобы быть одинаково воспринимаемой. Поэтому вместо исправления Lab они предложили новую, более сложную функцию delta-E с еще одной встроенной функцией деформации: DE94. Это было лучше, но не идеально, поэтому в 2000 году появилось еще одно предложение: DE2000. Также лучше, но не идеально. Смотрите эту страницу вики выше для получения дополнительной информации.
Если DE2000 недостаточно хорош (или слишком сложен!), Вы можете взглянуть на альтернативу Lab под названием ICtCp , которая, как утверждается, более однородна в восприятии, чем Lab.