Первый вопрос
Если все цвета представляют собой комбинации красного, зеленого и синего, а пиксели моего монитора используют все три, почему его цветовое пространство ограничено столь малой частью фактического полного цветового пространства? Какие цвета мы не видим и почему?
Ответ на этот вопрос (относительно) прост. Я собираюсь сослаться на цветовое пространство sRGB (изображено ниже), поскольку оно является наиболее распространенным цветовым пространством для мониторов, но это относится к всем физически реализуемым цветовым пространствам .
![sRGB color gamut](https://i.stack.imgur.com/sYv6K.png)
Представьте, что все видимые цвета содержатся в толстой черной подкове на приведенной выше диаграмме. Чистый красный, зеленый и синий цвета, отображаемые на мониторе, обозначены точками соответствующего цвета (а белый цвет обозначен серой точкой в центре).
Каждый цвет, который может отображать ваш монитор, должен быть смесью этих трех основных цветов (красного, зеленого и синего), и любая смесь двух или более цветов появляется между этими цветами на диаграмме. Поэтому все цвета, представляющие собой смесь красного, зеленого и синего, должны попадать в заштрихованный треугольник, «гамму sRGB». Важно то, что:
Не все цвета представляют собой смеси красного, зеленого и синего!
Все цвета внутри кривой черной подковы, но за пределами гаммы sRGB, не могут отображаться на мониторе sRGB. Это включает в себя практически все цвета лазерного света, цвета в призме или радуге, а также много насыщенных сине-зеленых цветов (например, 2013 года ).
Обратите внимание, что поскольку стороны подковы изогнуты, независимо от того, какие три цвета вы выберете, треугольник, который образуют эти цвета, никогда не будет включать в себя всю подкову (пока вы выбираете настоящие цвета, но мы вернемся к что позже).
Чтобы понять, почему это так, давайте поговорим о цветовых пространствах CIE , основным из которых является XYZ цветовое пространство .
По сути, мы можем найти способ назначить набор из трех чисел любому цвету так, чтобы два цвета выглядели одинаково, если и только если им присвоены одинаковые три числа. Способ присвоения этих номеров называется цветовым пространством .
Цветовое пространство XYZ назначает эти три числа ( X , Y и Z , что неудивительно), взвешивая спектр цвета тремя функциями: длина волны. Эти функции ( x -bar, y -bar и z -bar) показаны ниже.
![CIE 1931 2 degree standard observer color matching functions](https://i.stack.imgur.com/mk9N5.png)
Пока это немного абстрактно, поэтому я приведу пример. Вот спектр «стандартного дневного света», более конкретно: CIE Standard Illuminant D65 :
![CIE illuminant D65 spectral power distribution](https://i.stack.imgur.com/XoUQU.png)
(Обратите внимание, что оси Y на этих диаграммах представлены в произвольных единицах. Поскольку мы имеем дело с цветом света, а не яркостью, масштаб не имеет значения, если мы масштабируем все компоненты одинаково.)
Название D65 происходит от того факта, что этот спектр близок к спектру идеального излучателя черного тела при температуре 6500 Кельвинов. Это немного горячее, чем поверхность Солнца (5780 Кельвин) из-за атмосферного поглощения и рассеяния.
Мы вычисляем значения этого цвета X , Y и Z путем умножения его спектра на три функции согласования цветов ( x *). 1086 * -bar, y -bar и z -bar) и взятие площади под полученными тремя кривыми:
![CIE XYZ tristimulus values calculation example: D65](https://i.stack.imgur.com/7a77x.png)
Обычно значения XYZ масштабируются таким образом, чтобы у белого было Y , равное 1, что дает нам:
X(D65) = 0.9505
Y(D65) = 1.0000
Z(D65) = 1.0888
Для удобства мы часто преобразуем это в цветовое пространство xyY , где:
x = X / (X + Y + Z)
y = Y / (X + Y + Z)
x(D65) = 0.3135
y(D65) = 0.3236
Два значения x и y зависят только от цвета света, а не от яркости, и они полностью описывают цвет. Ранее я говорил, что для описания цвета света необходимы три числа, но это верно только тогда, когда яркость включена в «цвет». Без яркости (одно число) нужно всего два. Цветовое пространство XYZ было разработано таким образом, чтобы Y представляло яркость цвета, поэтому оно включено в цветовое пространство xyY.
Мы можем вычислить значения x и y для различных длин волн монохроматического света и построить их на диаграмме:
![CIE chromaticity diagram, Planckian locus](https://i.stack.imgur.com/2I4EW.png)
Вот откуда взялась схема подковы! Галочки отмечают длину волны света по краю. Обратите внимание, что нижний край не имеет отметок: цвета, такие как пурпурный, не могут быть получены из одной длины волны света (не может быть пурпурного лазера).
Практически все другие цветовые пространства, включая sRGB, определены в терминах цветовых пространств CIE. Обычно они выбирают красную, зеленую и синюю первичную и белую точки (описанные в цветовом пространстве XYZ или xyY), что достаточно для полного определения цветового пространства.
Обратите внимание, что существует множество значений x и y , которые находятся за пределами подковы. Они не представляют настоящие цвета. Однако эти «мнимые» цвета иногда могут быть полезны. Например, цветовое пространство ProPhoto RGB использует «мнимые» зеленые и синие основные цвета. Таким образом, он может представлять больше цветов, чем цветовое пространство, которое использует три реальных цвета для основных цветов. Недостатком является то, что теперь вы должны быть осторожны с «воображаемыми» цветами, которые могут присутствовать в ваших файлах. Причина, по которой большие цветовые пространства, такие как ProPhoto RGB и Adobe RGB, не часто используются вне профессиональной среды, заключается в том, что не стоит иметь возможность записывать цвета, которые вы не можете отобразить!
В том же духе мы можем представить отрицательных количеств цвета. Математически вы можете найти три значения RGB, которые будут представлять любой цвет, но одно или несколько значений RGB будут отрицательными, если вы попытаетесь представить цвет за пределами гаммы вашего цветового пространства. Вполне допустимо использовать отрицательное значение R , G или B для представления цвета, но большинство файлов содержат только положительные значения, а физические дисплеи могут только показывать положительные значения (поскольку вы не можете излучать «отрицательный свет»).
Второй вопрос
Точно так же, если камера захватывает все три [красный, зеленый и синий свет], почему она не может захватить все видимое цветовое пространство?
Здесь на самом деле две различные проблемы. Первый связан с проблемой ограниченных гамм выше. Например, моя камера настроена на запись в цветовом пространстве sRGB. Камера может физически распознавать цвета вне гаммы sRGB, но не может их записывать!
Опять же, камеры, как правило, ограничиваются «небольшим» цветовым пространством sRGB, поскольку они, скорее всего, будут редактироваться и просматриваться на дисплеях sRGB, а запись цветов, которые вы не можете отобразить, не стоит хлопот для обычного пользователя. 1159 *
Вторая проблема немного сложнее и касается явления, называемого metamerism .
Это то же самое явление, при котором некоторые цвета выглядят по-разному при различных условиях освещения, таких как дневной свет, лампа накаливания и флуоресцентный свет. (Например, моя сумка для фотокамеры обычно выглядит черной в помещении, но на улице она имеет слегка коричневатый оттенок.)
Это связано с тем, что мы сократили непрерывный спектр только до трех чисел. Теперь все еще верно, что трех чисел достаточно для восприятия цвета. Тем не менее, получить эти три числа правильно трудно. Чтобы понять, почему это так, давайте рассмотрим пример. Я покажу тот же спектр D65, что и раньше, но давайте также рассмотрим метамер его.
![metamer spectral distribution](https://i.stack.imgur.com/0q2is.png)
Два спектра выглядят совершенно по-разному, не так ли? Давайте повторим наши шаги из первого раздела, чтобы вычислить значения X , Y и Z метамера:
![CIE XYZ tristimulus value calculation: metamer](https://i.stack.imgur.com/KgSFU.png)
Они оказываются точно такими же! Это означает, что свет со спектром «метамер» будет выглядеть идентично свету со спектром D65. Поскольку спектр света непрерывен, для каждого цвета существует бесконечное количество метамеров.
Теперь давайте посмотрим, как камера видит эту пару воспринимаемых одинаковых цветов. Здесь представлены те же функции сопоставления цветов, что и ранее, а также три новые функции ( Rcam , Gcam и Bcam ), которые представляют чувствительность воображаемой камеры к разная длина волны света.
![Example camera RGB sensitivity](https://i.stack.imgur.com/I7nQk.png)
Чтобы вычислить, какие необработанные значения RGB камера присваивает этим трем цветам, мы используем ту же процедуру, что и для вычисления значений XYZ: умножим спектр на кривые чувствительности и возьмем площадь под каждой кривой: (Обратите внимание, что я также масштабировал области так, чтобы максимальное значение было меньше 255.)
![Camera RGB value: D65 illuminant](https://i.stack.imgur.com/GVjQo.png)
![Camera RGB value: metamer](https://i.stack.imgur.com/erRjX.png)
Два значения RGB различны! Даже после преобразования в значения sRGB, значения Adobe RGB или даже значения xyY эти два значения останутся разными. Поэтому эти два цвета будут записываться и впоследствии отображаться по-разному, даже если они выглядят одинаково.
Это не было бы проблемой, если бы мы могли создавать фильтры, точно имитирующие функции соответствия цветов CIE (или линейно независимую их комбинацию); и хотя на практике мы можем приблизиться, почти невозможно точно подобрать их.
Кроме того, два человека могут иметь разные функции сопоставления цветов! Хотя разница невелика, этого может быть достаточно, чтобы некоторые цвета выглядели по-разному для разных людей. Это означает, что даже если мы сделаем все правильно в соответствии со спецификацией CIE, цвета все равно будут выглядеть не совсем правильно для некоторых людей.
В целом, цветопередача проста в теории, но практические ограничения означают, что несовершенные цвета являются нормой. Однако «несовершенный», как правило, «достаточно хорош», и вам, вероятно, об этом не нужно беспокоиться.