Введение
Семейство цифровых цветовых пространств
YCbCr, Y′CbCr или Y Pb/Cb Pr/Cr, также записываемые как YCBCR или Y′CBCR, – это семейство цветовых пространств, используемых как часть конвейера обработки цветного изображения в видео- и цифровых фотосистемах. Y′ – компонент яркости (лумы), CB и CR – компоненты разностной синей и разностной красной цветности (хромы). Y′ (с штрихом) отличается от Y, который представляет собой светимость, то есть интенсивность света кодируется нелинейно на основе гамма-корректированных основных цветов RGB. Цветовые пространства Y′CbCr определяются математическим преобразованием координат из соответствующих основных цветов RGB и белой точки. Если базовое цветовое пространство RGB является абсолютным, то цветовое пространство Y′CbCr также является абсолютным цветовым пространством; и наоборот, если пространство RGB плохо определено, то и Y′CbCr также будет плохо определено. Преобразование определено в уравнениях 32 и 33 в ITU T H.273. Однако это правило не применяется к основным цветам P3 D65, используемым Netflix с матрицей BT.2020 NCL, что означает, что матрица не была получена из этих основных цветов, но теперь Netflix допускает использование основных цветов BT.2020 (с 2021 года). Аналогичная ситуация наблюдается и с JPEG: он использует матрицу BT.601, полученную из основных цветов системы M, в то время как основные цвета большинства изображений – BT.709.
Обоснование
Дисплеи на электронно-лучевой трубке управляются сигналами красного, зеленого и синего напряжения, но эти RGB-сигналы неэффективны для хранения и передачи из-за значительной избыточности. YCbCr и Y′CbCr – это практическое приближение к обработке цвета и перцептивной однородности, при котором основные цвета, приблизительно соответствующие красному, зеленому и синему, преобразуются в информацию, значимую для восприятия. Это позволяет осуществлять последующую обработку, передачу и хранение изображений/видео таким образом, чтобы операции и возникающие ошибки были значимы с точки зрения восприятия. Y′CbCr используется для разделения сигнала яркости (Y′), который можно хранить в высоком разрешении или передавать с высокой пропускной способностью, и двух цветовых компонент (CB и CR), пропускную способность которых можно уменьшить, выполнить субдискретизацию, сжать или обработать иным образом отдельно для повышения эффективности системы. Практическим примером может служить уменьшение пропускной способности или разрешения, выделяемого для "цвета" по сравнению с "черно-белым", поскольку человеческий глаз более чувствителен к черно-белой информации (см. пример изображения справа). Этот процесс называется субдискретизацией цветности.
CbCr
YCbCr иногда сокращается до YCC. Как правило, термины Y′CbCr, YCbCr, YPbPr и YUV используются как взаимозаменяемые, что может приводить к путанице. Основное различие заключается в том, что YPbPr используется с аналоговыми изображениями, а YCbCr – с цифровыми, что влечет за собой различные коэффициенты масштабирования для Umax и Vmax (в YCbCr они одинаковы) при преобразовании в/из YUV. Y′CbCr и YCbCr различаются в зависимости от того, применялась ли гамма-коррекция к значениям. Приведенные ниже уравнения дают более четкое представление об общих принципах и различиях между этими форматами.
Y′PbPr в Y′CbCr
При представлении сигналов в цифровой форме результаты масштабируются и округляются, а смещения обычно добавляются. Например, масштабирование и смещение, применяемые к компоненту Y′ согласно спецификации (например, MPEG 2), при использовании 8-битного представления приводят к значению 16 для черного и значению 235 для белого. Стандарт предусматривает 8-битные оцифрованные версии CB и CR, масштабированные к другому диапазону от 16 до 240. Следовательно, при выполнении цветовой матрицы или обработки в пространстве YCbCr иногда требуется перемасштабирование с коэффициентом (235 – 16) / (240 – 16) = 219/224, что может приводить к искажениям квантования, если последующая обработка не выполняется с использованием большей битовой глубины. Масштабирование, в результате которого используется меньший диапазон цифровых значений, чем может показаться желательным для представления номинального диапазона входных данных, позволяет избежать нежелательного отсечения при возникновении "перерегулирования" и "недорегулирования" во время обработки. Этот "запас по амплитуде" также может использоваться для расширения номинальной цветовой гаммы, как это определено в xvYCC. Значение 235 допускает максимальное перерегулирование (255 – 235) / (235 – 16) = 9,1%, что немного больше теоретического максимума перерегулирования (феномен Гиббса) – около 8,9% от максимального шага (от черного к белому). Запас по нижней границе меньше, позволяя лишь 16 / 219 = 7,3% перерегулирования, что ниже теоретического максимума в 8,9%. Кроме того, поскольку значения 0 и 255 зарезервированы в HDMI, фактический запас еще меньше.
Y′CbCr до xvYCC
Поскольку уравнения, определяющие Y′CbCr, построены таким образом, что они поворачивают весь номинальный цветовой куб RGB и масштабируют его для размещения в (большем) цветовом кубе YCbCr, существуют точки в цветовом кубе Y′CbCr, которые не могут быть представлены в соответствующей области RGB (по крайней мере, в пределах номинального диапазона RGB). Это создает определенные трудности при правильной интерпретации и отображении некоторых сигналов Y′CbCr. xvYCC использует эти значения Y′CbCr, выходящие за пределы диапазона, для кодирования цветов, находящихся за пределами цветового охвата BT.709.
ITU-R BT.709 конверсия
Другая форма Y′CbCr определена в стандарте ITU R BT.709, главным образом для использования в HDTV. Эта новая форма также применяется в некоторых приложениях, ориентированных на компьютерные дисплеи, например, в sRGB (хотя матрица, используемая для sRGB-формы YCbCr, sYCC, по-прежнему соответствует BT.601). В этом случае значения Kb и Kr отличаются, но формулы для их использования остаются прежними. Для ITU R BT.709 константы следующие:
Эта форма Y′CbCr основана на модели RGB, которая точнее соответствует характеристикам излучения люминофоров в новых ЭЛТ и другом современном оборудовании отображения. Матрицы преобразования для BT.709 следующие:
Определения сигналов R', G' и B' также различаются между BT.709 и BT.601, и различаются внутри BT.601 в зависимости от типа используемой телевизионной системы (625 строк, как в PAL и SECAM, или 525 строк, как в NTSC), и еще больше отличаются в других спецификациях. В различных реализациях существуют различия в определениях хроматических координат R, G и B, опорной белой точки, поддерживаемого цветового охвата, точных функций предварительной гамма-коррекции для получения R', G' и B' из R, G и B, а также в масштабировании и смещениях, применяемых при преобразовании из R'G'B' в Y′CbCr. Таким образом, корректное преобразование Y′CbCr из одной формы в другую – это не просто инвертирование одной матрицы и применение другой. На самом деле, при идеальной разработке Y′CbCr значения KB и KR выводятся из точной спецификации основных цветовых сигналов RGB, чтобы сигнал яркости (Y′) максимально точно соответствовал гамма-корректированному измерению светового потока (обычно основанному на измерениях CIE 1931 отклика человеческой зрительной системы на цветовые стимулы).
Коэффициенты для первичных источников BT.470-6 системы B, G
Эти коэффициенты не используются и никогда не применялись.
Системы свечения, полученные по цветности
H.273 также описывает системы постоянной и непостоянной яркости, которые выводятся строго из основных цветов и белой точки, чтобы избежать ситуаций, подобных использованию в sRGB/BT.709 первичных цветов по умолчанию в JPEG с применением матрицы BT.601 (которая, в свою очередь, основана на BT.470 6 System M).
Числовые приближения
До разработки быстрых SIMD-процессоров с плавающей точкой большинство цифровых реализаций RGB → Y′UV использовали целочисленную математику, в частности, приближения с фиксированной точкой. Приближение означает, что точность используемых чисел (входных данных, выходных данных и констант) ограничена, и, следовательно, допускается потеря точности, обычно в пределах последнего двоичного разряда, тем, кто использует этот вариант, как правило, в обмен на повышение скорости вычислений. Значения Y′ традиционно сдвигаются и масштабируются в диапазон [16, 235] (известный как студийный размах или "TV-уровни") вместо использования полного диапазона [0, 255] (известного как полный размах или "PC-уровни"). Эта практика была стандартизирована в SMPTE 125M для компенсации перерегулирования сигнала ("звона") из-за фильтрации. Значения U и V, которые могут быть как положительными, так и отрицательными, суммируются со 128, чтобы они всегда были положительными, что дает диапазон 16–240 для U и V. (Эти диапазоны важны при видеомонтаже и производстве, поскольку использование неправильного диапазона приведет либо к изображению с "обрезанными" черными и белыми цветами, либо к изображению с низкой контрастностью.)
Приблизительные 8-битовые матрицы для BT.601
Эти матрицы округляют все коэффициенты до ближайшей 1/256 доли. В результате для каждой компоненты формируется только одно 16-битное промежуточное значение, и простое сдвиг вправо с округлением позволяет выполнить деление.
Форматы и конверсия упакованных пикселей
Файлы RGB обычно кодируются в 8, 12, 16 или 24 бита на пиксель. В этих примерах мы будем считать, что используется 24 бита на пиксель, что записывается как RGB888. Стандартный формат байта выглядит следующим образом: r0, g0, b0, r1, g1, b1.
Упакованные пиксельные форматы YCbCr часто называют "YUV". Такие файлы могут быть закодированы в 12, 16 или 24 бита на пиксель. В зависимости от подвыборки, форматы обычно описываются как 4:4:4, 4:2:2 и 4:2:0p. Апостроф после Y и "p" (обозначающее плоскую структуру) после YUV420p часто опускаются. Что касается фактических форматов файлов, наиболее распространенным является 4:2:0, поскольку он обеспечивает меньший объем данных, а расширение файла обычно ".YUV". Связь между скоростью передачи данных и подвыборкой (A:B:C) определяется соотношением между каналами Y, U и V. Обозначение "YUV", за которым следуют три числа, является неоднозначным: эти три числа могут указывать на подвыборку (как в "YUV420"), или на битовую глубину каждого канала (как в "YUV565"). Наиболее однозначным способом обозначения этих форматов является код FourCC. Для преобразования из RGB в YUV и обратно проще всего использовать RGB888 и 4:4:4. Для форматов 4:1:1, 4:2:2 и 4:2:0 необходимо сначала преобразовать байты в формат 4:4:4.
4:4:4
4:4:4 прост, поскольку группировка пикселей не выполняется: разница заключается исключительно в количестве бит, выделяемых каждому каналу, и их расположении. Базовая схема использует 3 байта на пиксель, с порядком y0, u0, v0, y1, u1, v1 (где "u" обозначает Cb, а "v" – Cr; то же самое применимо и к описаниям ниже). Сначала записывается всё изображение в формате Y, а затем следуют чередующиеся строки, идущие в порядке U0, V0, U1, V1 и так далее. Существуют также "плиточные" варианты планарных форматов.