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

11

Это связано с вопросом, который я задал на 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). Результат:

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

Спасибо!

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

Ответы:

10

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

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

Ник
источник
Это похоже на то, что я хочу! Спасибо. Однако я не могу использовать Lab напрямую со своим набором инструментов, поэтому мне нужен какой-то алгоритм преобразования. Коию предложил конвертировать RGB -> Lab -> RGB, и я постараюсь это реализовать.
Кристоф
1
Я нашел следующее: http://www.brucelindbloom.com/index.html?Equations.html . Я не знаю, правильны ли преобразования, и у меня сложилось впечатление, что какое-то волшебство все еще требуется.
Кристоф
Эти функции преобразования выглядят так, как будто они могут быть полезны.
Ник
И они действительно выглядят немного более прямыми ...
Кристоф
@ Ник Я могу делать все расчеты с помощью калькулятора, и это хорошо. Тем не менее, я должен реализовать преобразования цветовой модели в моем документе LaTeX, что вызывает головную боль здесь и там. Когда это будет сделано, я опубликую результаты и приму ваш ответ.
Кристоф
4

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

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

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

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

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

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

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

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

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

Удачи.

Серджио
источник