Как стать автором
Обновить

Почему непросто показать все цвета в одномерном пространстве, и сколько раз это можно сделать

Время на прочтение7 мин
Количество просмотров41K
Всего голосов 71: ↑68 и ↓3+65
Комментарии31

Комментарии 31

В самой первой картинке из пяти плашек точно не зашифровано гипнотическое послание?
Не совсем понятно, как там используются «новые результаты»? Докладчик мельком упомянул CIECAM02 (всё остальное вполне старое), но каким боком она к дефолтному градиенту для визуализации — я не понял.
А «логичность» получившегося пространства с точки зрения пользователя не рассматривали? А зря.
Итоговая сортировка на взгляд человека не логична на средний интервалах — не знаешь куда крутить.
А вот последние два варианта полученные отжигом как раз выглядят очень логичными — есть закономерность на всех масштабах и можно предположить, где находится нужный цвет относительного текущего.
Неплохая попытка. А мы тупо используем self-avoiding walk по RGB-кубу, и все цвета при этом получаются максимально близкими друг к другу и с использованные строго один раз.
Еще есть коэффициенты чувствительности человеческих глаз к RGB

R: 299
G: 587
B: 114

По идее, для вычисления «расстояния» между цветами — нужно учитывать восприятие цвета, а не абсолютную величину RGB.

Расстояние между R1,G1,B1 и R2,G2,B2 будет примерно такое: SQR ( ((R1-R2)*299)^2 + ((G1-G2)*587)^2 + ((G1-G2)*114)^2 )
Попробуйте с этим пересчитать шкалу, может будет красивее, как знать.
НЛО прилетело и опубликовало эту надпись здесь
Эти коэффициенты используются при рассчёте освещённости цвета по формуле Y = kRR + kGG + kBB (где Y является Y-координатой в пространстве XYZ), однако здесь R, G и B берутся в пространстве linear RGB, а не экранном. Кроме того, приведённые коэффициенты (0.30, 0.59, 0.11) задают пространство NTSC RGB, используемое в американском телевещании; в пространстве комьютерных экранов по умолчанию, sRGB, они равны (0.21, 0.72, 0.07). Впрочем, итоговая вормула воспринимаемой освещённости в очень грубом приближении похожа на L = k(kRr3 + kGg3 + kBb3), и было бы интересно найти коэффициенты, дающие в «наивной» формуле L = kRr + kGg + kBb наименьшую погрешность.

Если правильно воспользоваться этой формулой (по сути — рассчитать координату L в пространстве LAB), можно сравнивать освещённости цветов как |L1-L2|. Но если сравнивать все три координаты по приведённой вами формуле, результат будет неожиданный: (587 (G1-G2))2 + (114 (B1-B2))2 = 344569 (G1-G2)2 + 12996 (B1-B2)2: влияние зелёного будет настолько значительно, что различие в синем практически не будет учитываться.

На эту тему хорошо написал Bruce Lindbloom.
цитата
Perhaps you've learned that you can compute the luminance of an RGB color by taking 30% of its red component plus 59% of its green component plus 11% of its blue component. These weightings are often expressed in three-digit precision as 29.9% red, 58.7% green and 11.4% blue. Did you ever wonder where these weightings came from?

You can find them in the above table as the relative Y values for red, green and blue for the NTSC color model. The more precise weightings are 29.8839% red, 58.6811% green and 11.4350% blue. But it should also be obvious that the real RGB weightings depend upon the color system in use. So the «standard» weightings are incorrect for other RGB systems like sRGB or Adobe RGB (1998).

Another relevant fact is that these weightings must be made in a linear RGB space, that is, after the gamma companding function has been removed. It is very common to see the weightings applied bluntly to the companded RGB values, which is wrong.

Вообще те коэффициенты из так называемых рекомендаций 601 для телевидения. В более новых рекомендациях 709 и 2020 коэффициенты уже несколько другие.

И всё же luminance (Y) на русский переводят как «яркость», не «освещённость» (несмотря на потенциальную путаницу с brightness). Lightness (которая в CIE Lab) — «светлота». Освещенность это совершенно другой термин.

Коэффициенты можно применять и в линейных, и гамма-корректированных координатах — во втором случае получится Y', которая называется luma (адекватного перевода на русский, кажется, вообще нет).
Это не коэффициенты чувствительности глаз.
А почему цвета нужно было располагать по одной координате, если новы колдунщик — двухмерный?
Расположение на плоскости не проще, чем на линии (если специально не подбирать цвета, хорошо лежащие на плоскости, отказываясь при этом от части уже имеющегося словаря цветов). И как использовать вторую координату? Считать обе координаты равнозначными и располагать в форме, близкой к квадрату? Тогда перемещение в обоих направлениях будет частично непредсказуемым. Располагать в форме вытянутого прямоугольника? Много цветов будет на границе, без соседей, и, если располагать по степени близости, пропадёт возможность быстро перейти к далёкому, но связанному с данным цвету. И как показывать цвет по неименованному запросу вроде #ABC000? В одномерном расположении его можно просто вставить между двумя именованными, а в двумерном — заменить им один из именованных? Так может не найтись какой-либо значимый цвет, например, по запросу #FF0001 — потеряется красный.
Сам колдунщик очевидно использует координату L (светлота, от чёрного до белого) в качестве горизонтали. Ну и зациклить по тону, повышая с каждым оборотом насыщенность.
Цветовое пространство примерно так выглядит:
image
Вот здесь можно покрутить такую модель.
Ну это стандартный способ выбора цвета.
Вот хоть в GIMP, например:
GIMP colorpicker
По кругу тон, в центре — срез треугольника светлота-цветность по выбранному вектору тона.
Плюсую предыдущего оратора. Вынести lightness в отдельную координату — и размерность задачи уменьшится на единицу, что положительно скажется не только на сложности решения, но и на юзабилити.
В «итоговой сортировке» есть три больших «зеленых» кластера и еще больше «синих». Возможно, при использовании двух измерений дробление было бы меньшим.
Не могли бы вы приложить список цветов, чтобы я, если найду время, тоже попробовал посортировать? В статье что-то списка не найду.
Яндекс в который раз делает Хабр тортом.
Спасибо, что поиск по hex-представлению, обидно было, когда yandex.ru/yandsearch?text=%23adfaff сломалось.

P. S.
> Так родился плоский дизайн.
Приготовлен.
Отдельный.
Котел.
Вот кстати неплохой тест на восприятие цветов
www.xrite.com/online-color-test-challenge
Тест интересный, правда он, скорее, на качество цветопередачи вашего монитора.
Большинство воспринимает RGB как некий абсолют цифрового определения цвета. Мало кто чётко определяет какой именно RGB он имеет ввиду, а их много: sRGB, AdobeRGB и десяток других. Сайт Яндекса не исключение.Та же ситуация с CMYK: не могут разные печатные машины, печатающие на огромном ассортименте бумаг, дать один и тот же цвет на те же значения CMYK.

В большинстве случаев с RGB проблем не возникает, так как sRGB используется практически везде. Но можно найти десятки вопросов на форумах почему Фотошоп «меняет цвет» в файле, или почему пипетка показывает разный цвет, где всё идентично.

Да и если вы думаете что Ваш монитор практически соответствует sRGB (то есть показывает «правильно»), я Вас огорчу, типичные мониторы имеют довольно большой разброс характеристик: от 55 до 110% охвата sRGB. Говорю это после калибровки не одной сотни мониторов.
Кстати о калибровке. Нет ли у вас под рукой ссылочки на какой-нибудь ликбез типа «калибровка для чайников при помощи гвоздя и пластиковой бутылки»?
Ручной калибровкой больше шансов сделать хуже чем лучше. Программа калибровки при помощи спектрометра возиться с монитором около часа, делая при этом множество измерений и расчётов.
Используя ΔE, мы можем построить функцию оценки качества расположения цветов на барабане как сумму квадратов разностей между соседними цветами на барабане.

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

Можно предложить альтернативные функции качества. Например, потребовать, чтобы линейные расстояния между цветами были максимально близки к их реальным (модельным, евклидовым). Тогда минимизировать надо сумму квадратов отклонения линейного расстояния от модельного. Такая сумма и будет функцией качества.
Ничего, что в природе все цвета и так разложены по одной оси? По частоте источника света. Надо лишь поднять формулы по физике Hz -> RGB. Или я чего-то не понимаю? И рядом будут похожие цвета, да.
Так вы опишете только монохромные цвета. Посмотрите здесь ru.wikipedia.org/wiki/Цветовая_модель на хроматическую диаграмму, эти цвета будут на ее ободке, там даже длины волн указаны соответствующие.
Реальные цвета состоят из пучка волн различных частот. Ваше предложение сработает разве что для описания цвета лазера.
Вы все-таки не посмотрели на цветовую диаграмму. Цвет, который вы видите, не обязательно получен одной волной.
Интересная статья и захватывающие картинки.

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

а частично — придуманы самостоятельно

А это-то, вообще, на каком основании включено в список? Просто потому что было?

Лично мне, в реальной жизни, гораздо чаще приходится искать цвета из палитры RAL или PANTONE. И я бы с большей радостью видел в выдаче их, нежели какой-нибудь «серобуромалиновый».
Есть, конечно, нюанс — и RAL и PANTONE это системы описания цветов, которые мы видим в реальной жизни, и перевести их однозначно в цветовое пространство мониторов не получится. Но, думаю, тут такая задача и не стоит, учитывая дешевые и не калиброванные мониторы большинства «юзеров».

Тем не менее предлагаю подумать над предложением.
Пусть это будет не в виде колдунщика с палитрой (как сейчас для означенных 1010 цветов). Достаточно просто вывод цвета:


p.s. Всем рекомендую отличный сайт colorscheme.ru. Там можно найти и упоминаемые RAL и PANTONE, и многое другое.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий