YCbCr , Y′CbCr , или Y Pb/Cb Pr/Cr , также обозначаемое как YC B C R или Y′C B C R , представляет собой семейство цветовых пространств, используемых как часть конвейера цветного изображения в системах видео и цифровой фотографии . Y′ — это компонент яркости , а C B и C R — это компоненты цветности с синей и красной разницей . 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 года). [1] То же самое происходит с JPEG: у него есть матрица BT.601, полученная из основных цветов System M, однако основными цветами большинства изображений являются BT.709.
Дисплеи на электронно-лучевых трубках (ЭЛТ) управляются красным, зеленым и синим сигналами напряжения, но эти сигналы RGB неэффективны для хранения и передачи, поскольку имеют большую избыточность .
YCbCr и Y′CbCr являются практическим приближением к обработке цвета и перцептивной однородности, где основные цвета, примерно соответствующие красному, зеленому и синему, обрабатываются в перцептивно значимую информацию. Благодаря этому последующая обработка изображений/видео, передача и хранение могут выполнять операции и вносить ошибки перцептивно значимыми способами. Y′CbCr используется для разделения сигнала яркости (Y′), который может храниться с высоким разрешением или передаваться с высокой пропускной способностью, и двух компонентов цветности (C B и C R ), которые могут быть уменьшены по полосе пропускания, подвергнуты субдискретизации, сжаты или иным образом обработаны отдельно для повышения эффективности системы.
Одним из практических примеров может быть уменьшение полосы пропускания или разрешения, выделенного для «цвета» по сравнению с «черно-белым», поскольку люди более чувствительны к черно-белой информации (см. пример изображения справа). Это называется цветовой субдискретизацией .
YCbCr иногда сокращается до YCC . Обычно термины Y′CbCr, YCbCr, YPbPr и YUV используются взаимозаменяемо, что приводит к некоторой путанице. Основное отличие заключается в том, что YPbPr используется с аналоговыми изображениями, а YCbCr — с цифровыми, что приводит к разным значениям масштабирования для U max и V max (в YCbCr оба равны ) при преобразовании в/из YUV. Y′CbCr и YCbCr различаются из-за того, скорректированы ли значения гамма-коррекцией или нет.
Приведенные ниже уравнения дают более четкое представление об общих принципах и основных различиях между этими форматами.
Сигналы Y′CbCr (до масштабирования и смещения для перевода сигналов в цифровую форму) называются YPbPr и создаются из соответствующего источника RGB (красный, зеленый и синий) с гамма-коррекцией с использованием трех определенных констант KR , KG и KB следующим образом:
где K R , K G и K B обычно выводятся из определения соответствующего пространства RGB и должны удовлетворять .
Эквивалентную матричную манипуляцию часто называют «цветовой матрицей»:
И обратное:
Здесь символы штриха (′) означают, что используется гамма-коррекция ; таким образом, R′, G′ и B′ номинально находятся в диапазоне от 0 до 1, где 0 представляет минимальную интенсивность (например, для отображения черного цвета), а 1 — максимальную (например, для отображения белого цвета ). Результирующее значение яркости (Y) будет тогда иметь номинальный диапазон от 0 до 1, а значения цветности (P B и P R ) будут иметь номинальный диапазон от -0,5 до +0,5. Обратный процесс преобразования можно легко получить, инвертировав приведенные выше уравнения.
При представлении сигналов в цифровой форме результаты масштабируются и округляются, и обычно добавляются смещения. Например, масштабирование и смещение, применяемые к компоненту Y′ согласно спецификации (например, MPEG-2 [2] ), приводят к значению 16 для черного и значению 235 для белого при использовании 8-битного представления. Стандарт имеет 8-битные оцифрованные версии C B и C R, масштабированные до другого диапазона от 16 до 240. Следовательно, при выполнении цветовой матрицы или обработки в пространстве YCbCr иногда требуется перемасштабирование на дробь (235-16)/(240-16) = 219/224, что приводит к искажениям квантования, когда последующая обработка не выполняется с использованием более высокой битовой глубины.
Масштабирование, которое приводит к использованию меньшего диапазона цифровых значений, чем тот, который может показаться желательным для представления номинального диапазона входных данных, допускает некоторые "перерегулирования" и "недорегулирования" во время обработки без необходимости нежелательного отсечения . Этот " headroom " и "toeroom" [3] также может быть использован для расширения номинальной цветовой гаммы , как указано в xvYCC .
Значение 235 обеспечивает максимальный выброс (255 - 235) / (235 - 16) = 9,1%, что немного больше теоретического максимального выброса ( феномен Гиббса ) около 8,9% от максимального (черно-белого) шага. Toeroom меньше, допуская только 16 / 219 = 7,3% выброса, что меньше теоретического максимального выброса 8,9%. Кроме того, поскольку значения 0 и 255 зарезервированы в HDMI, фактически room немного меньше.
Поскольку уравнения, определяющие Y′CbCr, сформированы таким образом, что вращают весь номинальный цветовой куб RGB и масштабируют его для вписывания в (больший) цветовой куб YCbCr, есть некоторые точки внутри цветового куба Y′CbCr, которые не могут быть представлены в соответствующей области RGB (по крайней мере, не в номинальном диапазоне RGB). Это вызывает некоторые трудности в определении того, как правильно интерпретировать и отображать некоторые сигналы Y′CbCr. Эти выходящие за пределы диапазона значения Y′CbCr используются xvYCC для кодирования цветов за пределами гаммы BT.709.
Форма Y′CbCr, которая была определена для использования в телевидении стандартной четкости в стандарте ITU-R BT.601 (ранее CCIR 601 ) для использования с цифровым компонентным видео , получена из соответствующего пространства RGB (основные цвета ITU-R BT.470-6 System M) следующим образом:
Из приведенных выше констант и формул можно вывести следующее для ITU-R BT.601.
Аналоговый YPbPr из аналогового R'G'B' выводится следующим образом:
Цифровой Y'CbCr (8 бит на выборку) получается из аналогового R'G'B' следующим образом:
или просто покомпонентно
Результирующие сигналы находятся в диапазоне от 16 до 235 для Y′ (Cb и Cr находятся в диапазоне от 16 до 240); значения от 0 до 15 называются footroom , а значения от 236 до 255 называются headroom . Те же диапазоны квантования, отличающиеся для Y и Cb, Cr, также применяются к BT.2020 и BT.709.
В качестве альтернативы цифровой Y′CbCr может быть получен из цифрового R'dG'dB'd (8 бит на выборку, каждая из которых использует полный диапазон, где ноль представляет черный цвет, а 255 представляет белый цвет) в соответствии со следующими уравнениями:
В приведенной ниже формуле коэффициенты масштабирования умножаются на . Это позволяет получить значение 256 в знаменателе, которое можно вычислить одним битовым сдвигом .
Если цифровой источник R'd G'd B'd включает в себя пространство для ног и пространство для головы, то сначала из каждого сигнала необходимо вычесть смещение пространства для ног 16, а в уравнения необходимо включить масштабный коэффициент.
Обратное преобразование:
Обратное преобразование без округлений (с использованием значений, взятых непосредственно из рекомендации ITU-R BT.601):
Эта форма Y′CbCr используется в основном для старых систем телевидения стандартной четкости , поскольку она использует модель RGB, которая соответствует характеристикам излучения люминофора старых ЭЛТ.
Другая форма 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 спроектирован идеально, значения K B и K R выводятся из точной спецификации основных цветовых сигналов RGB, так что сигнал яркости (Y′) максимально соответствует измерению яркости с поправкой на гамма-коррекцию (обычно основанному на измерениях CIE 1931 реакции зрительной системы человека на цветовые стимулы). [4]
Стандарт ITU-R BT.2020 использует ту же гамма-функцию, что и BT.709. Он определяет: [5]
Для обоих вариантов коэффициенты, полученные в результате праймериз, следующие:
Для NCL определение классическое: ; ; . Преобразование кодирования, как обычно, можно записать в виде матрицы. [5] Матрица декодирования для BT.2020-NCL имеет вид с 14 десятичными знаками:
Меньшие значения в матрице не округляются; они являются точными значениями. Для систем с ограниченной точностью (например, 8 или 10 бит) может использоваться более низкая точность вышеуказанной матрицы, например, сохраняя только 6 цифр после десятичной точки. [6]
Версия CL, YcCbcCrc, кодирует: [5]
Функция CL может использоваться, когда сохранение яркости имеет первостепенное значение (см.: Chroma subsampling § Gamma luminance error ), или когда «ожидается улучшение эффективности кодирования для доставки». Спецификация ссылается на отчет ITU-R BT.2246 по этому вопросу. [5] BT.2246 утверждает, что CL улучшил эффективность сжатия и сохранение яркости, но NCL будет более знакома персоналу, который ранее занимался смешиванием цветов и другими производственными практиками в HDTV YCbCr. [7]
BT.2020 не определяет PQ и, следовательно, HDR, он дополнительно определен в SMPTE ST 2084 и BT.2100 . BT.2100 представит использование IC T C P , полуперцепционного цветового пространства, полученного из линейного RGB с хорошей линейностью оттенков. Это «почти постоянная яркость». [8]
Стандарт SMPTE 240M (используемый в аналоговой системе телевидения высокой четкости MUSE ) определяет YCC с помощью следующих коэффициентов:
Коэффициенты получены на основе основных цветов SMPTE 170M и точки белого, используемых в стандарте 240M.
Использование JFIF в JPEG поддерживает модифицированный Rec. 601 Y′CbCr, где Y′, C B и C R имеют полный 8-битный диапазон [0...255]. [9] Ниже приведены уравнения преобразования, выраженные с точностью до шести десятичных знаков. (Идеальные уравнения см. в ITU-T T.871. [10] ) Обратите внимание, что для следующих формул диапазон каждого входа (R,G,B) также является полным 8-битным диапазоном [0...255].
И обратно:
Приведенное выше преобразование идентично sYCC , когда входные данные указаны как sRGB, за исключением того, что IEC 61966-2-1:1999/Amd1:2003 дает только четыре десятичных знака.
JPEG также определяет формат "YCCK" от Adobe для ввода CMYK . В этом формате значение "K" передается как есть, в то время как CMY используются для получения YCbCr с помощью указанной выше матрицы, предполагая , , и . В результате может использоваться аналогичный набор методов подвыборки. [11]
Эти коэффициенты не используются и никогда не использовались. [12]
H.273 также описывает системы постоянной и непостоянной яркости, которые выводятся строго из основных цветов и точки белого, так что такие ситуации, как основные цвета по умолчанию sRGB/BT.709 JPEG, использующие матрицу BT.601 (которая выводится из BT.470-6 System M), не возникают.
До разработки быстрых процессоров SIMD с плавающей точкой большинство цифровых реализаций RGB → Y′UV использовали целочисленную математику, в частности, аппроксимации с фиксированной точкой . Аппроксимация означает, что точность используемых чисел (входных данных, выходных данных и постоянных значений) ограничена, и, таким образом, потеря точности, обычно около последней двоичной цифры, принимается тем, кто использует эту опцию, как правило, в качестве компромисса для улучшения скорости вычислений.
Значения Y′ традиционно смещаются и масштабируются до диапазона [16, 235] (называемого студийным размахом или «уровнями ТВ»), а не используют полный диапазон [0, 255] (называемый полным размахом или «уровнями ПК»). Эта практика была стандартизирована в SMPTE-125M для того, чтобы компенсировать выбросы сигнала («звон») из-за фильтрации. [13] Значения U и V, которые могут быть положительными или отрицательными, суммируются с 128, чтобы сделать их всегда положительными, что дает студийный диапазон 16–240 для U и V. (Эти диапазоны важны при редактировании и производстве видео, поскольку использование неправильного диапазона приведет либо к изображению с «обрезанными» черными и белыми цветами, либо к изображению с низкой контрастностью.)
Эти матрицы округляют все факторы до ближайшей 1/256 единицы. В результате для каждого компонента формируется только одно 16-битное промежуточное значение, а простой сдвиг вправо с округлением (x + 128) >> 8
может позаботиться о делении. [13]
Для студийного свинга:
Для полного хода:
Google Skia использовала указанную выше 8-битную полнодиапазонную матрицу, что приводило к небольшому эффекту позеленения на изображениях JPEG, закодированных устройствами Android, более заметному при повторном сохранении. Проблема была исправлена в 2016 году, когда вместо нее использовалась более точная версия. Благодаря оптимизации SIMD в libjpeg-turbo точная версия на самом деле быстрее. [14]
Файлы 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" (для planar) после YUV420p. С точки зрения фактических форматов файлов, 4:2:0 является наиболее распространенным, так как данные более сокращены, а расширение файла обычно ".YUV". Соотношение между скоростью передачи данных и дискретизацией (A:B:C) определяется соотношением между Y к U и V каналом. [15] [16] Обозначение «YUV», за которым следуют три числа, неопределенно: три числа могут относиться к подвыборке (как это сделано в «YUV420») или к битовой глубине в каждом канале (как это сделано в «YUV565»). Однозначный способ обозначения этих форматов — через код FourCC . [17]
Для преобразования из RGB в YUV или обратно проще всего использовать RGB888 и 4:4:4. Для 4:1:1, 4:2:2 и 4:2:0 байты сначала необходимо преобразовать в 4:4:4.
4:4:4 прост, так как не выполняется группировка пикселей: разница заключается только в том, сколько бит дано каждому каналу и в их расположении. Базовая YUV3
схема использует 3 байта на пиксель с порядком y0, u0, v0, y1, u1, v1
(используя «u» для Cb и «v» для Cr; то же самое относится к содержимому ниже). [17] В компьютерах чаще можно увидеть AYUV
формат, который добавляет альфа-канал и идет a0, y0, u0, v0, a1, y1, u1, v1
, потому что с группами по 32 бита проще иметь дело. [15]
4:2:2 группирует 2 пикселя вместе по горизонтали в каждом концептуальном «контейнере». Два основных расположения: [16]
y0, u, y1, v
.u, y0, v, y1
.4:1:1 используется редко. Пиксели располагаются в горизонтальных группах по 4. [16]
4:2:0 используется очень часто. Основные форматы — IMC2, IMC4, YV12 и NV12. [16] Все эти четыре формата являются «плоскими», что означает, что значения Y, U и V сгруппированы вместе, а не перемешаны. Все они занимают 12 бит на пиксель, предполагая 8-битный канал.
Существуют также «плиточные» варианты плоских форматов. [20]
Программные ресурсы для упакованных пикселей: