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. [1]
Черно-белое телевидение широко использовалось до появления цветного телевидения. Из-за большого количества существующих телевизоров и камер для новых цветных трансляций требовалась некоторая форма обратной совместимости . Французский инженер Жорж Валенси разработал и запатентовал систему передачи цвета RGB в виде сигналов яркости и цветности в 1938 году. Это позволило бы существующим черно-белым телевизорам обрабатывать только информацию о яркости и игнорировать цветность, по сути упаковывая черно-белое видео в цветное видео. Из-за этой обратной совместимости система, основанная на идее Валенси, была названа совместимым цветом . Таким же образом черно-белая трансляция могла приниматься цветным телевизором без каких-либо дополнительных схем обработки. Чтобы сохранить существующие распределения частот вещания, новой информации о цветности была предоставлена более низкая полоса пропускания, чем информации о яркости. Это возможно, потому что люди более чувствительны к черно-белой информации (см. пример изображения справа). Это называется субдискретизацией цветности .
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]
Программные ресурсы для упакованных пикселей: