Почему современные экраны не способны отобразить бирюзовый и еще 65% цветов реального мира

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

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

Прежде чем переходить к коду — краткий ликбез

Экран вашего устройства манипулирует всего тремя цветами: красным, зелёным и синим.

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

папка корзины под камерой смартфона
Пиксельная сетка под объективом камеры

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

(К слову, раки-богомолы с их 16 типами фоторецепторов восприняли бы наши экраны как хаотичное мерцание. Но, к счастью для индустрии, они не читают статьи.)

Проблема в том, что комбинация этих трёх «фонариков» охватывает далеко не всё, что видит глаз. Стандарт sRGB, используемый в большинстве мониторов, покрывает лишь около 35% видимого спектра. Оставшиеся 65% ваше устройство воспроизвести не способно и заменяет их ближайшими доступными аналогами.

Тот самый абхазский бирюзовый как раз входил в число «невозможных» 65%.

Задавшись вопросом, насколько велика погрешность моего экрана, я обратился за помощью к ChatGPT.


Акт первый: ChatGPT уверенно идёт по ложному следу

Мой запрос был предельно конкретным: «Напиши Python-скрипт, который принимает спектральные характеристики цвета и демонстрирует его вид в пространстве sRGB в сравнении с реальностью. Визуализируй различие».

Через полминуты я получил элегантный код с использованием colour-science, PIL.ImageCms и конвертацией через XYZ и Lab. Всё было оформлено по канонам: докстринги, вежливые комментарии, лаконичная структура. Я был впечатлён.

Запуск. На экране два цветных блока: «Оригинал» и «Монитор». И они абсолютно идентичны.

Анализ кода вскрыл подвох: нейросеть использовала sRGB и как источник, и как цель. Сконвертировав sRGB в sRGB, алгоритм с гордостью сообщил об отсутствии разницы. Это напоминало ответ на вопрос «сколько стоит эта вещь?», звучащий как «ровно столько, сколько вы за неё заплатили».


Акт второй: Спектральные галлюцинации «по наитию»

Признав свою вину в нечёткости формулировок, я уточнил задачу: требуется спектральное преобразование мощностного распределения через функции соответствия CIE 1931 в пространство XYZ, а затем в sRGB. «Истинный цвет» — это координаты XYZ, а «цвет монитора» — результат после отсечения гамута (gamut clipping).

Второй вариант был лучше. Использовалась функция colour.sd_to_XYZ(). Однако спектр GPT задал в виде плоской линии — идеального белого шума. Я пытался выяснить причину искажения бирюзового, а мне моделировали сферический белый свет в вакууме.

Когда я попросил подставить реальные данные для морской воды, GPT выдал гауссиану с пиком на 490 нм, снабдив её комментарием: «Типичный спектр отражения бирюзовой воды». Он просто выдумал этот график, основываясь на «ощущениях». Для примерной прикидки это могло бы подойти, но мне требовалась точность, а не усреднённые фантазии ИИ.

Акт третий: Беру контроль в свои руки

Оставив чат с нейросетью, я нашёл научную базу спектральных данных морской воды. Отыскал показатели для Чёрного моря: CSV-файл, 401 контрольная точка в диапазоне 380–780 нм с шагом в 1 нм. Настоящие замеры спектрофотометра.

Реализация на Python:

import colour
import numpy as np

# Загружаем достоверный спектр вместо галлюцинаций
data = np.loadtxt('black_sea_turquoise.csv', delimiter=",")
sd = colour.SpectralDistribution(
    dict(zip(data[:, 0], data[:, 1])),
    name="Black Sea Turquoise"
)

# Переход от спектра к XYZ и далее к sRGB
XYZ = colour.sd_to_XYZ(sd, illuminant=colour.SDS_ILLUMINANTS['D65'])
srgb_raw = colour.XYZ_to_sRGB(XYZ / 100)

# Применяем ограничение охвата
srgb_clipped = np.clip(srgb_raw, 0, 1)

# Вычисляем Delta E для оценки визуального различия
Lab_true = colour.XYZ_to_Lab(XYZ / 100)
Lab_clipped = colour.XYZ_to_Lab(colour.sRGB_to_XYZ(srgb_clipped))
delta_e = colour.delta_E(Lab_true, Lab_clipped, method='CIE 2000')

print(f'sRGB raw:     {srgb_raw}')
print(f'sRGB clipped: {srgb_clipped}')
print(f'Delta E:      {delta_e:.1f}')
print(f'Вне гамута:   {any(c < 0 or c > 1 for c in srgb_raw)}')

Итоги вычислений:

sRGB raw:     [0.2847, 1.0731, 0.7892]
sRGB clipped: [0.2847, 1.0000, 0.7892]
Delta E:      4.3
Вне гамута:   True

Зелёная составляющая составила 1.07. Монитору требовалось выдать 107% яркости субпикселя, что физически невозможно. Значение Delta E 4.3 указывает на заметную глазу разницу. Это уже не те «идентичные квадраты», что предлагал ChatGPT.

Любопытства ради я рассчитал Delta E для перехода в CMYK (печать). Результат — 11.2. Это колоссальный разрыв, превращающий глубокий бирюзовый в то самое унылое пятно на бумаге.

Вина лежала не на типографии, а на фундаментальных законах физики.


Масштабирование эксперимента

Следующий этап — анализ всего изображения. Я взял RAW-файл (в JPEG информация уже безвозвратно урезана), конвертировал его с помощью rawpy в пространство XYZ и проверил каждый пиксель на соответствие цветовому охвату.

import rawpy

raw = rawpy.imread('abkhazia_sunset.CR3')
rgb_linear = raw.postprocess(
    output_color=rawpy.ColorSpace.XYZ,
    no_auto_bright=True, gamma=(1, 1)
)
srgb = colour.XYZ_to_sRGB(rgb_linear / rgb_linear.max())
out_of_gamut = np.any((srgb < 0) | (srgb > 1), axis=-1)

print(f'Искажённых пикселей: {100 * out_of_gamut.sum() / out_of_gamut.size:.1f}%')

23% данных оказались за пределами возможностей монитора. Каждый четвёртый пиксель — ложь. Максимальная концентрация ошибок пришлась именно на воду.

Я визуализировал это в виде тепловой карты: красные зоны — критическое враньё монитора, зелёные — честная передача. Море на карте буквально «пылало». Небо местами «желтело» от ошибок. Лишь песок и камни оставались в зелёной зоне — sRGB неплохо справляется с бежевыми тонами.

Существуют ли способы исправления?

Инженеры бьются над проблемой ограниченности RGB-моделей с 1953 года. Три канала — это необходимый минимум, и за десятилетия многие пытались расширить этот базис.

Sharp и их жёлтый субпиксель (Quattron): В 2010 году компания добавила четвёртый цвет, логично предположив, что жёлто-зелёный сегмент — слабейшее звено RGB-треугольника. Но поскольку весь мировой контент заточен под три канала, телевизору приходилось искусственно синтезировать жёлтый. На тестах это выглядело эффектно, но в реальном кино профит исчезал. Технологию в итоге забросили.

Впрочем, в медицине идея жива. Мониторы NEC и Barco для хирургов могут иметь до 6 субпикселей. Цена вопроса — миллионы рублей, ведь там от точности розового оттенка зависит жизнь пациента.

SED-дисплеи от Canon и Toshiba: Попытка объединить преимущества ЭЛТ и плоских панелей. Каждый субпиксель имел свой эмиттер электронов. Контрастность и цветопередача были феноменальными. Однако производственные сложности и патентные споры похоронили проект стоимостью в миллиард долларов. LCD просто задавили их ценой.

Лазерные системы: Здесь кроется теоретический идеал. Лазер даёт узкую спектральную линию (менее 1 нм), что позволяет строить максимально широкие цветовые треугольники. Профессиональные проекторы Christie покрывают 96% Rec. 2020. Главное препятствие для масс-маркета — спекл-шум (зернистость из-за когерентности света), с которым борются сложными механическими системами.


Парадокс дорогих мониторов

Sony BVM-HX3110 стоит как премиальный автомобиль. При этом у него может быть ниже разрешение и меньше частота обновления, чем у вашего игрового монитора. Но за ними выстраиваются очереди.

Для профессионального колориста такой монитор — это эталон. Он показывает суровую правду. Если тень на нём кажется зелёной, значит, она будет такой на большинстве экранов мира. Обычные же потребительские модели часто грешат агрессивным перенасыщением, чтобы казаться привлекательнее на полке магазина.

Я даже заглянул на вторичный рынок: десятилетний EIZO 2014 года выпуска до сих пор стоит дороже современных геймерских новинок. Точность цветопередачи не теряет в цене.


Процесс деградации

Монитор не просто врёт — он делает это динамически, меняясь со временем.

OLED: Синий диод выгорает в разы быстрее красного. Если вы годами работаете в редакторе с белым фоном, цветовой профиль, созданный для новой панели, станет неактуальным. Баланс белого неизбежно сместится.

IPS: Засветы и IPS-glow — это не всегда брак, а часто особенность технологии. Поляризация света нарушается под углом, и единственное лекарство — смотреть строго перпендикулярно центру экрана.

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


Алгоритмическое искажение

Простое отсечение (clipping) — самый грубый способ. Если значение зашкаливает за 1.0, софт просто приравнивает его к единице. Десятки тонких нюансов бирюзового сливаются в один плоский голубой цвет.

Более продвинутые методы, такие как perceptual mapping, пропорционально сжимают весь диапазон к центру. Отношения между цветами сохраняются, но всё изображение становится менее насыщенным. Скорее всего, ваш экран сейчас работает именно так.


Итог

Я не стал переделывать ту фотографию. Она висит у меня на стене в своём «несовершенном» виде. Да, 23% пикселей — техническая ложь. Да, Delta E зашкаливает.

Но что есть «истинный цвет»? На экране нас обманывают светодиоды, на бумаге — смесь красок. Настоящий бирюзовый остался там, в июльской Абхазии, запечатлённый моей собственной биологической нейросетью — глазами, которые сами по себе являются результатом миллионов лет эволюционных компромиссов.

 

Источник

Читайте также