sRGB — это стандартное цветовое пространство RGB (красный, зеленый, синий), которое HP и Microsoft совместно создали в 1996 году для использования на мониторах, принтерах и во Всемирной паутине . [2] Впоследствии оно было стандартизировано Международной электротехнической комиссией (МЭК) как IEC 61966-2-1:1999. [1] sRGB — это текущее определенное стандартное цветовое пространство для Интернета, и обычно это предполагаемое цветовое пространство для изображений, которые не помечены для цветового пространства и не имеют встроенного цветового профиля .
sRGB по сути кодифицирует спецификации дисплеев для компьютерных мониторов, которые использовались в то время, что значительно способствовало его принятию. sRGB использует те же основные цвета и белую точку, что и стандарт ITU-R BT.709 для HDTV [3] , передаточную функцию ( или гамму ), совместимую с ЭЛТ-дисплеями той эпохи , и среду просмотра, разработанную для соответствия типичным условиям просмотра дома и в офисе.
sRGB определяет хроматичности основных цветов красного, зеленого и синего , цветов, где один из трех каналов не равен нулю, а два других равны нулю. Гамма хроматичностей, которая может быть представлена в sRGB, — это цветовой треугольник, определяемый этими основными цветами, которые установлены таким образом, что диапазон цветов внутри треугольника находится в пределах диапазона цветов, видимых человеку с нормальным трихроматическим зрением. Как и в случае с любым цветовым пространством RGB , для неотрицательных значений R, G и B невозможно представить цвета за пределами этого треугольника.
Основные цвета взяты из HDTV ( ITU-R BT.709 ), которые несколько отличаются от цветов для старых систем цветного телевидения ( ITU-R BT.601 ). Эти значения были выбраны для отражения приблизительного цвета люминофоров потребительских ЭЛТ на момент их разработки. Поскольку в то время плоские дисплеи, как правило, проектировались для имитации характеристик ЭЛТ, эти значения также отражали преобладающую практику для других устройств отображения. [1]
Характеристика эталонного дисплея основана на характеристике в CIE 122. Эталонный дисплей характеризуется номинальной степенной гаммой 2,2, которая, по определению рабочей группы sRGB, была репрезентативной для ЭЛТ, используемых с операционными системами Windows в то время. [2] Возможность непосредственного отображения изображений sRGB на ЭЛТ без какого-либо поиска значительно способствовала принятию sRGB. [ необходима цитата ] Гамма также полезно кодирует больше данных вблизи черного, что снижает видимый шум и артефакты квантования .
Стандарт также определяет оптоэлектронную передаточную функцию (OETF), которая определяет преобразование линейного света или интенсивности сигнала в гамма-сжатые данные изображения. Это кусочно-составная функция, имеющая приближение 2,2, с линейной частью вблизи нуля, чтобы избежать бесконечного наклона, который подчеркивает шум сигнала (камеры). [4] [5] Вблизи нуля кривая степенного закона пересекает прямолинейный участок, который ведет к нулю.
На практике все еще ведутся споры и путаница по поводу того, следует ли отображать данные sRGB с чистой гаммой 2,2, как определено в стандарте, или с обратной OETF. Некоторые производители дисплеев и калибраторы используют первый вариант, а некоторые — второй. Когда степенной закон используется для отображения данных, которые должны были отображаться на дисплеях, использующих кусочную функцию, результатом является то, что детали теней будут «раздавлены» в сторону жесткого черного. [6]
Прямая линия, проходящая через (0,0), называется , а гамма-кривая, проходящая через (1,1) , называется
Если их соединить в точке ( X , X /Φ) , то:
Чтобы избежать перегиба в месте соединения двух сегментов, производные в этой точке должны быть равны:
Теперь у нас есть два уравнения. Если мы возьмем два неизвестных X и Φ, то мы можем решить и получить
Значения A = 0,055 и Γ = 2,4 были выбраны [ как? ], так что кривая очень похожа на кривую gamma-2,2. Это дает X ≈ 0,0392857, Φ ≈ 12,9232102 . Эти значения, округленные до X = 0,03928, Φ = 12,92321 , иногда описывают преобразование sRGB. [7]
Черновые публикации создателей sRGB дополнительно округлили Φ = 12,92 , [2] что привело к небольшому разрыву кривой. Некоторые авторы приняли эти неправильные значения, отчасти потому, что черновик был в свободном доступе, а официальный стандарт IEC находится за платным доступом. [8] Для стандарта округленное значение Φ было сохранено, а X был пересчитан как 0,04045 , чтобы сделать кривую непрерывной, [a] что привело к разрыву наклона от 1/12,92 ниже пересечения до 1/12,70 выше.
Спецификация sRGB предполагает слабоосвещенную среду кодирования (создания) с внешней коррелированной цветовой температурой (CCT) 5003 K. Это отличается от CCT источника света ( D65 ). Использование D50 для обоих случаев сделало бы белую точку большинства фотобумаг чрезмерно синей. [10] [11] Другие параметры, такие как уровень яркости, являются типичными для типичного ЭЛТ-монитора.
Для достижения оптимальных результатов ICC рекомендует использовать среду просмотра с кодированием (т. е. приглушенное рассеянное освещение), а не типичную среду просмотра с менее строгими требованиями. [2]
Значения компонентов sRGB , , находятся в диапазоне от 0 до 1. При цифровом представлении в виде 8-битных чисел эти значения компонентов цвета находятся в диапазоне от 0 до 255 и должны быть разделены (в представлении с плавающей точкой) на 255 для преобразования в диапазон от 0 до 1.
где , , или .
Эти гамма-расширенные значения (иногда называемые «линейными значениями» или «линейно-световыми значениями») умножаются на матрицу для получения CIE XYZ (матрица имеет бесконечную точность, любые изменения ее значений или добавление ненулевых значений не допускаются):
На самом деле это матрица для основных цветов BT.709, а не только для sRGB, вторая строка соответствует коэффициентам яркости BT.709-2 (в BT.709-1 в этих коэффициентах была опечатка).
Значения CIE XYZ должны быть масштабированы так, чтобы Y D65 («белый») был равен 1,0 ( X = 0,9505, Y = 1,0000, Z = 1,0890). Обычно это так , но некоторые цветовые пространства используют 100 или другие значения (например, в CIELAB при использовании указанных белых точек).
Первым шагом в вычислении sRGB из CIE XYZ является линейное преобразование, которое может быть выполнено путем умножения матриц. (Приведенные ниже числовые значения соответствуют значениям в официальной спецификации sRGB [1] [12] , в которой исправлены небольшие ошибки округления в оригинальной публикации [2] создателей sRGB, и предполагается стандартный колориметрический наблюдатель 2° для CIE XYZ [2] ) Эта матрица зависит от битовой глубины.
Эти линейные значения RGB не являются окончательным результатом; гамма-коррекция все равно должна быть применена. Следующая формула преобразует линейные значения в sRGB:
где , , или .
Эти гамма-сжатые значения (иногда называемые «нелинейными значениями») обычно обрезаются до диапазона от 0 до 1. Это обрезание может быть сделано до или после вычисления гаммы, или сделано как часть преобразования в 8 бит. Если требуются значения в диапазоне от 0 до 255, например, для отображения видео или 8-битной графики, обычная техника заключается в умножении на 255 и округлении до целого числа.
Из-за стандартизации sRGB в Интернете, на компьютерах и принтерах многие потребительские цифровые камеры и сканеры начального и среднего уровня используют sRGB в качестве рабочего цветового пространства по умолчанию (или единственного доступного). Однако ПЗС потребительского уровня обычно не калибруются, что означает, что даже если изображение помечено как sRGB, нельзя сделать вывод, что оно имеет точную цветопередачу sRGB.
Если цветовое пространство изображения неизвестно и это 8-битный формат изображения, sRGB обычно предполагается по умолчанию, отчасти потому, что цветовые пространства с большей гаммой требуют большей битовой глубины для поддержания низкого уровня ошибок цвета (∆E). Профиль ICC или таблица поиска могут использоваться для преобразования sRGB в другие цветовые пространства. Профили ICC для sRGB широко распространены, и ICC распространяет несколько вариантов профилей sRGB, [13] включая варианты для ICCmax, версии 4 и версии 2. Версия 4 обычно рекомендуется, но версия 2 по-прежнему широко используется и является наиболее совместимой с другим программным обеспечением, включая браузеры. Версия 2 спецификации профиля ICC официально не поддерживает кусочно-параметрическое кодирование кривой («para»), хотя версия 2 поддерживает простые степенные функции. [13] Тем не менее, таблицы поиска используются чаще, поскольку они вычислительно более эффективны. [ необходима цитата ] Даже при использовании параметрических кривых программное обеспечение часто сводится к таблице поиска во время выполнения для эффективной обработки. [ необходима цитата ]
Поскольку цветовой охват sRGB соответствует или превосходит охват струйного принтера низкого класса , изображение sRGB часто считается удовлетворительным для домашней печати. Профессионалы в области высококлассной полиграфии иногда избегают sRGB, поскольку его цветовой охват недостаточно велик, особенно в сине-зеленых цветах, чтобы включить все цвета, которые могут быть воспроизведены в печати CMYK . Изображения, предназначенные для профессиональной печати с помощью полностью управляемого по цвету рабочего процесса (например, допечатная подготовка), иногда используют другое цветовое пространство, такое как Adobe RGB (1998) , которое обеспечивает более широкий охват. Такие изображения, используемые в Интернете, можно преобразовать в sRGB с помощью инструментов управления цветом , которые обычно включены в программное обеспечение, работающее в этих других цветовых пространствах.
Оба основных интерфейса программирования для 3D-графики, OpenGL и Direct3D , имеют встроенную поддержку гамма-кривой sRGB.
OpenGL поддерживает текстуры с цветовыми компонентами, закодированными в гамме sRGB (впервые представленными с расширением EXT_texture_sRGB, [14] добавленным в ядро OpenGL 2.1) и рендеринг в фреймбуферы, закодированные в гамме sRGB (впервые представленными с расширением EXT_framebuffer_sRGB, [15] добавленным в ядро OpenGL 3.0). Корректное mipmapping и интерполяция текстур гаммы sRGB имеют прямую аппаратную поддержку в текстурных модулях большинства современных графических процессоров (например, nVidia GeForce 8 выполняет преобразование из 8-битной текстуры в линейные значения перед интерполяцией этих значений) и не имеет никаких потерь производительности. [16]
Поправка 1 к IEC 61966-2-1:1999, утвержденная в 2003 году, включает определение цветового представления Y′Cb′Cr′, называемого sYCC . Хотя основные цвета RGB основаны на BT.709, уравнения для преобразования из sRGB в sYCC и наоборот основаны на BT.601 . sYCC использует 8 бит для компонентов, что приводит к диапазону приблизительно 0–1 для Y; -0,5–0,5 для C. [17] Поправка также содержит 10-битное или более кодирование, называемое bg-sRGB , где 0–1 отображается в -384 ⁄ 510 ... 639 ⁄ 510 , а bg-sYCC использует то же количество бит для диапазона приблизительно -0,75–1,25 для Y; -1–1 для C. [17]
Поскольку это преобразование может привести к значениям sRGB за пределами диапазона 0–1, поправка описывает, как применять гамма-коррекцию к отрицательным значениям, применяя − f (− x ), когда x отрицателен (а f — это sRGB↔linear функции, описанные выше). Это также используется scRGB .
Поправка также рекомендует использовать матрицу XYZ в sRGB с более высокой точностью, использующую семь десятичных знаков, чтобы более точно инвертировать матрицу sRGB в XYZ (которая сохраняет точность, указанную выше):