Как рассчитать другие цвета с такой же воспринимаемой яркостью, как и заданное значение серого?

Это связано с вопросом, который я задал на tex.stackexchange , который имеет цветовой аспект. Результатом этого вопроса является следующее изображение:
значение и контраст насыщенности

Я нарисовал серию серых квадратов слева, с красной ветвью, уходящей вправо. Цель состоит в том, чтобы получить разные красные квадраты с разной насыщенностью, но с одинаковым значением серого. В цветовой модели hsv все они имеют одинаковые v, но когда я конвертирую изображение в оттенки серого с помощью Gimp, они не преобразуются в один и тот же серый цвет. Также визуальное впечатление такое, что красные квадраты справа темнее, чем слева.

Как я могу, имея определенный серый цвет, вычислить цвета с определенным оттенком и тем же значением серого (или, что еще лучше, с тем же оттенком серого ) ? Все цвета, используемые в изображении, рассчитываются, поэтому я предпочитаю решения, которые также включают вычисления.

Возможно, я использовал здесь неправильные термины - я инженер-механик, поэтому, пожалуйста, поправьте меня, где это уместно, или попросите разъяснений.


Предложение использовать цветовое пространство Lab привело меня к некоторым выводам:

  • Я могу использовать значение модели Lab, Lчтобы установить какое-то значение серого для разных цветов. В модели hsv это v. Я не уверен, что мне действительно разрешено их сравнивать, но я буду делать это, пока кто-нибудь не пожалуется.

  • В модели hsv я также могу установить некоторый «базовый цвет» (оттенок), который я не могу найти в модели Lab.

  • В модели hsv у меня есть 2 константы (на изображении выше: h= 0, v= 0,375) и одна переменная ( s).

  • До этого момента у меня была только одна константа в модели Lab. Этого недостаточно, чтобы создать что-то похожее на то, что я уже сделал с моделью hsv.

Думаю, пришло время для экспериментов.


Сделанный! После того, как я запустил код преобразования, это было очень легко. Первым шагом было определение «мишени красного цвета» справа. Я вычислил RGB2Lab(255,0,0) и изменил значение L результата на желаемое L на рисунке (L = 62,5). Цвета рассчитываются с помощью линейной интерполяции в пространстве Lab от (L,0,0) до (L,aTarget,bTarget). Результат:

введите описание изображения здесь

Благодарю вас!

В статье в Википедии есть множество вещей, которые могут оказаться полезными, но я нашел ( en.wikipedia.org/wiki/HSL_and_HSV#Disadvantages ) возможное отношение к вашей проблеме, в частности: «Поскольку HSL и HSV определяются исключительно с помощью ссылаясь на некоторое пространство RGB, они не являются абсолютными цветовыми пространствами: для точного указания цвета необходимо сообщать не только значения HSL или HSV, но и характеристики пространства RGB, на котором они основаны, включая используемую гамма-коррекцию».
Таким образом, очевидная идея состоит в том, чтобы указать гамму и цветовое пространство RGB (если возможно!) при попытке преобразования.
Еще лучшая идея: RGB → L*a*b* → RGB; поскольку Лаборатория предназначена для приближения к человеческому зрению, и Легкость является одним из ее измерений.
@koiyu Lab — это то, как я предлагаю найти и серые спички. (Вы меня опередили! Я издевался над ответом ниже, когда вы опубликовали это.)
Я избегал проблемного обсуждения восприятия цвета :)

Ответы (2)

Вы можете использовать цветовое пространство Lab , чтобы найти совпадения. Цвета с тем же значением L, что и у целевого серого, будут выглядеть почти одинаково при преобразовании в оттенки серого.

Например, лабораторно-серый (50, 0, 0) будет очень похож на лабораторно-красный (50, 30, 0), (50, 50, 30) и (50, 50, 50) при преобразовании в оттенки серого. В приведенных ниже примерах используется Photoshop («Изображение» > «Режим» > «Оттенки серого») для преобразования из лабораторного в серый:Оригинальные лабораторные цвета
Преобразовано в оттенки серого

Это похоже на то, что я хочу! Спасибо. Однако я не могу использовать Lab напрямую со своим набором инструментов, поэтому мне нужен какой-то алгоритм преобразования. Koiyu предложил конвертировать RGB -> Lab -> RGB, и я попробую это реализовать.
Я нашел следующее: http://www.brucelindbloom.com/index.html?Equations.html . Я не знаю, правильны ли преобразования, и у меня сложилось впечатление, что некоторая магия все еще требуется.
Эти функции преобразования выглядят так, как будто они могут быть полезны.
И они действительно выглядят немного более прямолинейными...
@Ник, я могу делать все расчеты с помощью калькулятора, и это хорошо. Однако мне приходится реализовывать преобразования цветовой модели в моем документе LaTeX, что то тут, то там вызывает у меня головную боль. Когда это будет сделано, я опубликую результат и приму ваш ответ.
@Кристоф Браво! Спасибо за публикацию результата и молодцы, что довели до конца.
@Nick На самом деле это было весело! Однако мне нужно подробнее изучить лабораторную модель. Я не знаю, является ли красный цвет, показанный в моем результате, таким же красным, как красный с L = 62,5. В пространстве RGB я могу сказать, что «255,0,0 — это максимальный красный цвет», но я не могу указать эти максимальные значения в пространстве Lab. У меня сложилось впечатление, что красный цвет, который у меня сейчас есть, слишком желтоватый. Кроме того, при преобразовании в оттенки серого (с помощью Gimp) значения варьируются от 59 до 38 (было от 63 до 13, так что это улучшение). В конце концов, цветовые пространства интересны!
Лучше думать об этом как о цветовом пространстве Lch с цилиндрическими координатами яркости, цветности и оттенка. и убедитесь, что вы не превышаете куб RGB, иначе он будет обрезан до неправильного цвета. и есть разные способы «преобразовать в оттенки серого», поэтому, если ваше цветовое пространство делает это не так, как ваш преобразователь оттенков серого, это не сработает.

Итак, приведенный выше совет от Ника работает только для 50% Luminance. Если вы примените любое другое значение L к разным цветам, результат серого будет другим.

Для этого должна быть математика, но вы можете сделать это на экране на глаз.

Если вы создадите все цвета, которые хотите, а затем поместите серый элемент (иллюстратор) или слой (фотошоп) с его режимом прозрачности в «цвет» (или насыщенность, или оттенок), это заставит все элементы ниже раскрыть свою яркость.

Вы должны убедиться, что все цвета ниже этого серого элемента имеют насыщенность 100, иначе у вас будут серые результаты, а не приятные цвета.

Теперь проблема в следующем: со всеми описанными выше методами вы сделаете все элементы «одинаковой яркости внутри используемого профиля RGB», т.е. одного и того же серого цвета для выбранного «устройства», и худшая часть: глаз — это устройство. , а отличия есть.

Вы можете показывать одни и те же цвета разным людям, и они не найдут такой же «ровности», как у других.

Добавьте к этому тот факт, что вы устанавливаете эти цвета как «одинаковую яркость» на выбранном устройстве, и мало того, что все они «оцениваются», как только вы показываете их на другом устройстве, эффект не будет работать, потому что каждое устройство имеет собственную способность подсвечивать красные зеленые или синие элементы с разной интенсивностью, так что вы можете получить, например, красные элементы.

Кроме того, если вы создаете переход от серого к цвету, как было предложено выше, вы должны убедиться, что серый элемент имеет минимум 1/255 в каждом канале (т. е. не больше серого), иначе программное обеспечение будет рассматривать исходный серый как 0-оттенок, который даст вам красноватые средние тона (потому что смесь между нулевым оттенком и любым другим цветом будет на полпути к красному)

Я эксперт по допечатной подготовке с 90-х годов, и мой совет: если вы собираетесь использовать математику, вы должны использовать математику для глаза (визуальные возможности), а также для устройства, которое вы будете демонстрировать. эти цифры на.

Удачи.