Ycbcr что это такое
Поддержка Икбкр JPEG
YCbCr пиксель Data потребляет значительно меньше памяти, чем стандартные форматы пикселей BGRA. Кроме того, доступ к данным YCbCr позволяет разгрузить некоторые этапы конвейера декодирования и кодирования JPEG в DIRECT2D, который поддерживает процессор с ускорителем. С помощью YCbCrприложение может сократить потребление памяти JPEG и время загрузки для тех же образов размеров и качества. Или приложение может использовать более высокое разрешение изображений JPEG, не низкий от потерь производительности.
В этом разделе описывается, как работают данные YCbCr и как использовать их в WIC и Direct2D.
О формате JPEG YCbCr Data
В этом разделе объясняются некоторые основные понятия, необходимые для понимания того, как работает YCbCr в WIC и его основные преимущества.
Цветовая модель YCbCr
компонент WIC в Windows 8 и более ранних версий поддерживает четыре различные цветовые модели, наиболее распространенный из которых — RGB/BGR. Эта цветовая модель определяет цвет данных с помощью красного, зеленого и синего компонентов; также можно использовать Четвертый альфа-компонент.
Ниже приведено изображение, разстоящее в красном, зеленом и синем компонентах.
YCbCr — это альтернативная цветовая модель, определяющая цветовые данные с помощью компонента освещенности (Y) и двух компонентов чроминанце (cb и cr). Она обычно используется в сценариях работы с цифровыми изображениями и видео. Термин YCbCr часто используется с YUV, хотя эти два являются неизменными.
Плоские и чередующиеся макеты памяти
В этом разделе описываются некоторые различия между доступом и хранением данных пикселей RGB в памяти и YCbCr Data.
Данные пикселей RGB обычно хранятся с использованием чередования макета памяти. Это означает, что данные для одного компонента цвета чередуются между пикселями, и каждый пиксель хранится непрерывно в памяти.
Ниже приведен рисунок, показывающий пиксельные данные типа RGBA, хранящиеся в макете памяти с чередованием.
Данные YCbCr обычно хранятся с помощью плоского макета памяти. Это означает, что каждый компонент цвета хранится отдельно в отдельной непрерывной плоскости для всего трех плоскостей. В другой распространенной конфигурации компоненты Cb и cr чередуются и хранятся вместе, а компонент Y остается в собственной плоскости, что составляет всего две плоскости.
Подвыборка чрома
Цветовая модель YCbCr хорошо подходит для сценариев работы с цифровыми образами, поскольку она может использовать преимущества некоторых аспектов системы человеческого визуального элемента. В частности, люди более чувствительны к изменениям светимости (яркости) изображения и менее чувствительны к чроминанце (цвету). Разделив данные цвета на отдельные компоненты светимости и чроминанце, можно выборочно сжимать только компоненты чроминанце, чтобы добиться экономии места с минимальной потерей качества.
Один из способов сделать это называется подвыборкой чрома. Плоскости Cb и cr являются подвыборкой (довнскалед) в одном или обоих горизонтальных и вертикальных измерениях. По историческим причинам каждый чрома режим подвыборки часто именуется с использованием трех частей Ж:а: b.
Режим подвыборки | Горизонтальное довнскале | Вертикальный довнскале | Бит на пиксель* |
---|---|---|---|
4:4:4 | 1x | 1x | 24 |
4:2:2 | 2x | 1x | 16 |
4:4:0 | 1x | 2x | 16 |
4:2:0 | 2x | 2x | 12 |
В приведенной выше таблице при использовании YCbCr для хранения несжатых данных изображения можно добиться экономии памяти от 25% до 62,5% относительно 32 бит на пиксельные данные RGBA в зависимости от того, какой режим подвыборки чрома используется.
Использование JPEG для YCbCr
На высоком уровне конвейер распаковки JPEG состоит из следующих этапов:
Использование JPEG YCbCr Data
Использование изображений в формате JPEG YCbCr
Подавляющее большинство изображений JPEG хранится в виде YCbCr. Некоторые файлы JPEG содержат данные CMYK или градации серого и не используют YCbCr. Это означает, что обычно, но не всегда, может напрямую использовать уже существующее содержимое JPEG без каких-либо изменений.
Windows API компонентов работы с образами
ивикпланарбитмапсаурцетрансформ
ивикпланарбитмапфраминкоде
Ивикпланарбитмапфраминкоде предоставляет возможность кодирования плоских данных пикселей, в том числе Yc bC r Data. Этот интерфейс можно получить, вызвав QueryInterface в реализации ивикбитмапфраминкодекодека JPEG.
ивикпланарформатконвертер
Ивикпланарформатконвертер позволяет ивикформатконвертер использовать данные плоской точки, включая Yc bC r, и преобразовывать их в формат пикселей с чередованием. Он не предоставляет возможность преобразования чередующихся данных пикселей в плоский формат. этот интерфейс можно получить, вызвав QueryInterface на Windows предоставленной реализации ивикформатконвертер.
API-интерфейсы Direct2D
Определение, поддерживается ли конфигурация YCbCr
Как отмечалось ранее, приложение должно быть устойчивым к случаям, когда поддержка YCbCr недоступна. В этом разделе обсуждаются условия, которые должно проверить приложение. При сбое любой из следующих проверок приложение должно вернуться к стандартному конвейеру на основе BGRA.
Поддерживается ли запрошенное преобразование WIC для YCbCr?
Поддерживает ли графический драйвер функции, необходимые для использования YCbCr с Direct2D?
Пример кода
Ниже приведен пример кода, демонстрирующий Рекомендуемые проверки. Этот пример взят из оптимизации Икбкр JPEG в примере Direct2D и WIC.
Декодирование данных YCbCr Pixel
Образец кода
Ниже приведен пример кода, демонстрирующий действия по декодированию и визуализации данных YCbCr в Direct2D. Этот пример взят из оптимизации Икбкр JPEG в примере Direct2D и WIC.
Преобразование данных YCbCr Pixel
Преобразование данных YC bC r практически идентично декодированию, как и в случае с ивикпланарбитмапсаурцетрансформ. Единственное отличие заключается в том, какой объект WIC получил интерфейс. Windows предоставленный масштабируемый объект, перелистывание вращения и преобразования цветов поддерживают YCbCr access.
Объединение преобразований
WIC поддерживает понятие объединения нескольких преобразований. Например, можно создать следующий конвейер WIC:
Оптимизация кодека JPEG
Кроме того, при сцеплении одного или нескольких преобразований WIC после декодера JPEG он может использовать собственное масштабирование и вращение JPEG для удовлетворения запрошенной операции агрегирования.
Преобразования формата
Используйте ивикпланарформатконвертер для преобразования плоских данных Yc bв C пикселей в формат ПИКСЕЛЕЙ с чередованием, например GUID _ WICPixelFormat32bppPBGRA. WIC в Windows 8.1 не обеспечивает возможность преобразования в плоский YCbC в формате пикселей.
Кодирование YCbCr пиксель Data
Используйте ивикпланарбитмапфраминкоде для кодирования данных Yc bC r x в кодировщик JPEG. Кодировка YC bData ивикпланарбитмапфраминкоде похожа, но не идентична кодированию данных с чередованием с помощью ивикбитмапфраминкоде. Плоский интерфейс предоставляет возможность записи данных изображения с плоскими кадрами, поэтому следует продолжать использовать интерфейс кодирования фрейма для установки метаданных или эскиза и фиксации в конце операции.
В типичном случае необходимо выполнить следующие действия.
Декодирование данных YCbCr Pixel в Windows 10
Дополнительные сведения об использовании ID2D1ImageSourceFromWicсм. в образцепакета SDK Direct2D Photo корректировок.
YCbCr
Y’CbCr не является абсолютным цветовым пространством, скорее, это способ кодирования информации сигналов RGB. Для систем отображения используются сигналы основных цветов RGB (красный, зеленый и синий). Эти сигналы не являются эффективными для хранения и передачи изображений, так как они имеют большую избыточность. Поэтому перевод в систему Y’CrCb позволяет передать информацию о яркости с полным разрешением, а для цветоразностных компонент произвести субдискретизацию, то есть выборку с уменьшением числа передаваемых элементов изображения, так как человеческий глаз менее чувствителен к перепадам цвета. Это повышает эффективность системы, позволяя уменьшить поток видеоданных. Значение, выраженное в Y’CbCr будет предсказуемо, если первично использовались сигналы основных цветов RGB.
Содержание
Формулы преобразования
YCbCr иногда сокращают до YCC. Y’CbCr часто называют YPbPr, когда речь идет о системах аналогового компонентного видео, хотя термин Y’CbCr обычно используется для обеих систем.
Y’CbCr часто путают с цветовым пространством YUV, и, как правило, термины YCbCr и YUV используются как взаимозаменяемые, что приводит к некоторой путанице. Когда речь идет о видео или сигналах в цифровой форме, термин «YUV» в основном означает «Y’CbCr».
Сигналы Y’CbCr (до нормирования и смещения для перевода сигналов в цифровую форму) называют YPbPr. Они формируются с примененеим гамма-коррекции из соответствующих RGB источников с помощью двух определенных констант KB и KR следующим образом:
где KB и KR коэффициенты, которые обычно выводятся из определения соответствующего пространства RGB.
При представлении сигналов в цифровой форме, результат нормируется и округляется, и, как правило, добавляется смещение. Так, например, нормирование и смещение, применяемое к компоненте Y’ согласно спецификации (например, MPEG-2 [1] ), приводит к значению 16 для черного и значению 235 для белого при использовании 8-битного представления. Стандарт имеет 8-битные цифровые версии Cb и Cr, нормированные в другом диапазоне: от 16 до 240.
Так как в пространстве YCRCB можно представить существенно более широкую гамму значений сигнала, чем поддерживаемая в соответствующих диапазонах сигналов R, G и B, то существует вероятность получения таких сигналов Y, CR и CB, которые, несмотря на пригодность каждого из них по отдельности, могут, при преобразовании к RGB, привести к получению значений, лежащих вне допустимых пределов. Это можно предотвратить наложенив ограничения на сигналы Y, CR и CB, также такие ограничения применяются для поддержания значений яркости и цветовых оттенков, при этом субъективные искажения минимизируются посредством потери только насыщенности цвета.
Преобразования по рекомендации ITU-R BT.601
Форма Y’CbCr, которая была определена для телевидения стандартной чёткости (стандарт МСЭ-R BT.601 (бывшая CCIR 601)) для использования с цифровыми компонентным видео формируется из соответствующего пространства RGB следующим образом:
Из приведенных выше констант и формул, могут быть получены следующие уравнения для МСЭ-R BT.601. Преобразование аналоговых компонент R’G’B’ в аналоговые YPbPr происходит следующим образом:
Цифровые компоненты Y’CbCr (8 бит) расчитываются из аналоговых R’G’B ‘следующим образом:
или просто покомпонентно
Полученные сигналы находятся в диапазоне от 16 до 235, значения от 0 до 15 и от 236 до 255 формируют два запасных диапазона.
Кроме того, цифровые компоненты Y’CbCr происходит от цифровых компонент R’dG’dB’d (8 бит на сэмпл) в соответствии со следующими уравнениями:
Обратное преобразование без округления (с использованием значений исходит непосредственно из рекомендации ITU-R BT.601) составляет:
Эта форма Y’CbCr используется в основном для старых систем телевидения стандартной чёткости, поскольку она использует модель RGB, что соответствует характеристикам излучения люминофоров старых ЭЛТ-мониторов.
Преобразования по рекомендации ITU-R BT.709
В стандарте ITU-R BT.709 указаны различные формы Y’CbCr, в первую очередь для использования в ТВЧ. Новая форма также используется в некоторых компьютерных дисплеях. В этом случае, значения Kb и Kr отличаться, но уравнения с ними будут такими же. Для МСЭ-R BT.709 коэффициенты определены как:
Эта форма Y’CbCr основана на модели RGB, который более точно соответствует характеристикам новых ЭЛТ и другим современным дисплеям.
Определения сигналов R’G’B’ также отличаются между BT.709 и BT.601. Также они различны в BT.601 в зависимости от типа применяемой телевизионной системы (625 строк, как в PAL и SECAM или 525 строк, как в NTSC ), и отличаются некоторыми характеристиками. В разных системах существуют различия при определении координат цветности R, G, B, точкой отсчета белого цвета, поддерживаемой цветовой палитры, гамма-коррекции для получения R’G’B’ из RGB, а также нормирования и смещения, которые должны применяться во время преобразования из R’G’B’ к Y’CbCr. [2]
JPEG преобразования
Формат обмена файлами JPEG позволяет использовать Y’CbCr, где Y, CB и CR имеют полный 8-битный диапазон 0-255: [3]
Видеоинтерфейсы. Композитный и Компонентный
Содержание
Содержание
Чтобы создать цветную картинку на экране, от источника проводится передача данных о цвете и яркости каждой точки монитора или дисплея. Все обилие цветовой палитры передается путем «смешивания» 3-х основных цветов различной яркости (RGB). Само сокращение RGB расшифровывается как Red, Green, Blue (красный, зеленый, синий). Три цвета при максимальной яркости дают белую точку на экране, а их полное отсутствие — черную.
В зависимости от типа соединения (интерфейса) применяются разные форматы передачи этих данных на принимающее устройство. Оба интерфейса (композитный и компонентный) используют разъемы, получившие название RCA. Компания Radio Corporation of America (RCA) предложила его для стандарта соединений аудиоаппаратуры еще в далеком 1940 году. В России эти разъемы известны под названиями «тюльпаны» или «колокольчики».
Проводником между разъемами является коаксиальный кабель. В кабелях этого типа защитный экран от помех выполнен в одной оси с сердечником-проводником (co — совместно и axis — ось).
Сами по себе кабель и разъемы RCA идентичны (взаимозаменяемы) в обоих интерфейсах.
Композитный интерфейс
Интерфейс, в котором сигналы цветности и яркости не разделены, а передаются по одному каналу связи, называется «композитным» (т.е. многокомпонентный). Это один их самых первых упрощенных интерфейсов. Из-за «смешивания» сигнала на входе в кабель и его последующего разделения при прочтении на устройстве вывода, возникают паразитные перекрестные помехи. Исключить их полностью невозможно. Появляется «смазанность» картинки.
Это считается основным недостатком «композита», который ограничивает качество передаваемого видеосигнала. Композитный кабель, как правило, трехжильный. Желтым цветом обозначается разъем RCA для передачи видео, белым и красным (моно и 2-й канал стерео) — звуковые проводники. Технических различий в свойствах всех 3 жил кабеля нет. Цветовая маркировка необходима для прослеживания концов одного провода (вход-выход), чтобы пользователь их не перепутал.
Компонентный интерфейс
По мере развития видеоиндустрии повысились требования к качеству сигнала. Избалованный пользователь готов платить за картинку высокого качества. Так почему бы не предоставить ему желаемое? Интерфейс, в котором данные о цветности и яркости передаются каждый по своему каналу, не смешиваясь между собой, называется компонентным. Он выполнен аналогично 3х-жильному «композиту» с одним каналом для видео и двумя для стереозвука с разъемами RCA, но в «компоненте» по всем 3 каналам передается информация о видео. Для передачи аудиосигнала можно купить отдельный кабель или взять компонентный из 5 жил: 3 для видео, 2 для аудио.
В компонентном интерфейсе разделена яркость и цветность красного, синего. Разъемы имеют синюю, красную и зеленую маркировку соответственно. Несмотря на наличие зеленого «тюльпана» данные о цветности зеленого не передаются. По нему передаются данные о яркости. Цветность зеленого рассчитывается на принимающем устройстве по определенному алгоритму. В основе этих вычислений лежат данные об общей яркости и цветности синего и красного.
Выделение отдельной линии для яркости понадобилось для воспроизведения развивающегося цветного телевидения на старых черно-белых телевизорах. В компонентном кабеле смазывание картинки не возникает, так как тут отсутствует смешивание (мультиплексирование).
Остаются незначительные потери при передаче сигнала на его естественное затухание, в зависимости от длины и материалов проводника. Сильное затухание выражается в ухудшении яркости картинки на экране. Эти потери могут быть рассчитаны при помощи таблицы специальных коэффициентов, которая поможет подобрать максимальную длину кабеля между устройствами.
Отличие компонентного YPbPr от YCbCr
Сам компонентный разъем на устройствах может иметь 2 обозначения: YPbPr или YCbCr. По каналу, обозначаемому Y, передается сигнал уровня яркости. По каналу с обозначением b (blue) передается сигнал разности между яркостью и синим, а по каналу r (red) — сигнал разности между яркостью и красным цветом. Буквы P и С обозначают различные алгоритмы записи и считывания информации о цветовом пространстве изображения (последовательность и очередность кодирования). Разница между этими обозначениями заключается в типах формирования видео на экране. Их всего два: чересстрочная (i– interlaced, «интерлейс») и как альтернатива, прогрессивная развертки. При интерлейсе каждый кадр видео формируется из 2 «полукадров», напоминающих жалюзи. В первом полукадре проходит сигнал для «четных» строк изображения, во втором для «нечетных».
Это позволяет при одной и той же пропускной способности канала увеличить частоту изображения в 2 раза, по сравнению с прогрессивной разверткой.
При прогрессивной (p — progpessive) развертке каждый кадр передается целиком, построчно. Это убирает эффекты искажения. Пропадает «гребенка» при просмотре динамичных сцен. Нет половины строк, ожидающих обновления, но необходима удвоенная пропускная способность канала. Интерфейс YPbPr компонентного разъема означает, что это порт «универсал». Он поддерживает и прогрессивную, и интерлейс развертки.
Маркировка YCbCr говорит о том, что разъем поддерживает только чересстрочную развертку. На это стоит обратить особое внимание при подборе компонентов домашнего кинотеатра или при подключении видеокамеры к монитору/телевизору. В этом случае во время воспроизведения видео с неподдерживаемым типом развертки могут возникнуть искажения, а иногда просмотр вообще будет невозможен.
Так что же лучше?
При выборе компонентов аппаратуры следует основное внимание уделить «языку» (интерфейсу), на котором принимающие и передающие устройства будут «общаться» между собой. Он должен быть одинаков или полностью поддерживать возможности разъема сопрягаемого устройства.
Воспроизведение прогрессивного видео на интерлейсе будет с искажениями. Видео с чересстрочным типом развертки на приемнике с YPbPr интерфейсом будет выглядеть безукоризненно.
В споре компонентного и композитного интерфейсов несомненно лучше «не складывать все цвета в одну корзину» и выбрать YPbPr-компонент. Хотя с победным наступлением эры 4К оба эти интерфейса рано или поздно канут в лету, так как через «колокольчики» RCA максимум возможна передача сигнала только в HD-разрешении.
Как работает видеокодек. Часть 1. Основы
Вторая часть: Принципы работы видеокодека
Любое растровое изображение можно представить в виде двумерной матрицы. Когда речь заходит о цветах, идею можно развить, рассматривая изображение в виде трехмерной матрицы, в которой дополнительные измерения используются для хранения данных по каждому из цветов.
Если рассматривать итоговый цвет как комбинацию т.н. основных цветов (красного, зеленого и синего), в нашей трёхмерной матрице определяем три плоскости: первая для красного цвета, вторая для зеленого и последняя для синего.
Статья опубликована при поддержке компании EDISON.
Альтернативные способы кодирования цветного изображения
Для представления цветов, из которых состоит изображение, есть немало и других моделей. Например, можно использовать индексированную палитру, в которой потребуется только один байт для представления каждого пикселя, вместо трёх, необходимых при использовании модели RGB. В такой модели можно использовать 2D-матрицу вместо 3D-матрицы для представления каждого цвета. Это экономит память, но даёт меньшую цветовую гамму.
Например, взгляните на эту картинку ниже. Первое лицо полностью окрашено. Другие — это красная, зеленая и синяя плоскости (интенсивность соответствующих цветов показана в градации серого).
Видим, что оттенки красного в оригинале будут в тех же местах, в которых наблюдаются самые яркие части второго лица. В то время как вклад синего цвета в основном можно увидеть только в глазах Марио (последнее лицо) и элементах его одежды. Обратите внимание, куда все три цветовые плоскости вносят наименьший вклад (самые темные части изображений) — это в усы Марио.
Для хранения интенсивности каждого цвета требуется определенного количества битов — эта величина называется битовой глубиной. Допустим, тратится 8 бит (исходя из значения от 0 до 255) на одну цветовую плоскость. Тогда имеем глубину цвета в 24 бита (8 бит * 3 плоскости R/G/B).
Другое свойство изображения — это разрешение, представляющее из себя количество пикселей в одном измерении. Частенько обозначается как как ниже на изображение-примере 4 на 4.
Ещё одно свойство, с которым имеем дело при работе с изображениями/видео — это соотношение сторон, описывающее обычную пропорциональную взаимосвязь между шириной и высотой изображения или пикселя.
Когда говорят, что некий фильм или картинка имеют размер 16 на 9, обычно имеется в виду соотношение сторон дисплея (DAR — от Display Aspect Ratio). Однако иногда могут быть различные формы отдельных пикселей — в этом случае речь идёт о соотношении пикселей (PAR — от Pixel Aspect Ratio).
Хозяюшке на заметку: DVD соответствует DAR 4 на 3
Хотя реальное разрешение DVD составляет 704×480, тем не менее оно сохраняет соотношение сторон 4:3, поскольку PAR имеет значение 10:11 (704×10 / 480×11).
Ну и, наконец, можем определить видео как последовательность из n кадров за период времени, которое можно считать дополнительным измерением. А n тогда — это частота кадров или количество кадров в секунду (FPS — от Frames per Second).
Количество бит в секунду, необходимое для показа видео, является его скоростью передачи — битрейтом.
битрейт = ширина * высота * бит глубина * кадров в секунду
Например, для видео с 30 кадрами в секунду, 24 битами на пиксель, разрешением 480×240 потребуется 82,944,000 бит в секунду или 82,944 Мбит/с (30x480x240x24) — но это если не используется какой-либо из методов сжатия.
Если скорость передачи почти постоянна, то она называется постоянной скоростью передачи (CBR — от constant bit rate). Но она также может и варьироваться, в этом случае называется переменной скоростью передачи (VBR — от variable bit rate).
Этот график демонстрирует ограниченный VBR, когда тратится не слишком много битов в случае полностью тёмного кадра.
Изначально инженеры разработали метод удвоения воспринимаемой частоты кадров видеодисплея без использования дополнительной полосы пропускания. Этот способ известен как чересстрочное видео; в основном, он отправляет половину экрана в первом «кадре», а другую половину — в следующем «кадре».
В настоящее время визуализация сцен, в основном, происходит с использованием технологии прогрессивного сканирования. Это способ отображения, хранения или передачи движущихся изображений, в котором все линии каждого кадра прорисовываются последовательно.
Ну что ж! Теперь мы в курсе, как изображение представляется в цифровом виде, как устроены его цвета, сколько бит в секунду мы тратим, чтобы показать видео, если скорость передачи постоянная (CBR) или переменная (VBR). Знаем про заданное разрешение с использованием заданной частоты кадров, ознакомились со многими другими терминами, такие как чересстрочное видео, PAR и некоторыми другими.
Удаление избыточности
Известно, что видео без сжатия нормально использовать невозможно. Часовое видео с разрешением 720p и частотой 30 кадров в секунду занимало бы 278 Гб. К такому значению приходим, перемножив 1280 x 720 x 24 x 30 x 3600 (ширина, высота, биты на пиксель, FPS и время в секундах).
Использование алгоритмов сжатия без потерь, вроде DEFLATE (используется в PKZIP, Gzip и PNG), не даст достаточного уменьшению необходимой полосы пропускания. Приходится искать другие способы сжатия видео.
Для этого можно использовать особенности нашего зрения. Мы лучше различаем яркость, чем цвета. Видео это набор последовательных изображений, повторяющихся со временем. Между соседними кадрами одной сцены различия небольшие. Кроме того, каждый кадр содержит много областей, использующих один и тот же (или похожий) цвет.
Цвет, яркость и наши глаза
Наши глаза более чувствительны к яркости, чем к цвету. Вы можете убедиться в этом сами, посмотрев на эту картинку.
Если вы не видите, что в левой половине изображения цвета квадратов A и B на самом деле одинаковы, то это нормально. Наш мозг заставляет нас уделять больше внимания светотени, а не цвету. С правой стороны между означенными квадратами есть перемычка того же цвета — поэтому мы (т.е. наш мозг) легко определяем, что, на самом деле, там один и тот же цвет.
Давайте разберём (упрощенно) как работают наши глаза. Глаз — сложный орган, состоящий из многих частей. Однако нас больше всего интересуют колбочки и палочки. Глаз содержит около 120 миллионов палочек и 6 миллионов колбочек.
Рассмотрим восприятие цвета и яркости как отдельные функции определённых частей глаза (на самом деле, всё обстоит несколько сложнее, но мы упростим). Палочковые клетки, в основном, отвечают за яркость, в то время как колбочковые клетки отвечают за цвет. Колбочки подразделяются на три типа, в зависимости от содержащегося пигмента: S-колбочки (синий цвет), M-колбочки (зеленый цвет) и L-колбочки (красный цвет).
Поскольку у нас гораздо больше палочек (яркость), чем колбочек (цвет), можно сделать вывод, что мы более способны различать переходы между темнотой и светом, чем цвета.
Функции контрастной чувствительности
Исследователи экспериментальной психологии и многих других областей разработали множество теорий человеческого зрения. И одна из них называется функциями контрастной чувствительности. Они связаны с пространственным и временны́м освещением. Если кратко, то речь о том, сколько требуется изменений, прежде чем наблюдатель их заметит. Обратите внимание на множественное число слова «функция». Это связано с тем, что мы можем измерять функции чувствительности к контрасту не только к черно-белому изображению, но и цветному. Результаты этих экспериментов показывают, что в большинстве случаев наши глаза более чувствительны к яркости, чем к цвету.
Раз известно, что мы более чувствительны к яркости изображения, можно попытаться использовать этот факт.
Цветовая модель
Мы немножко разобрались, как работать с цветными изображениями, используя RGB-схему. Есть и другие модели. Существует модель, которая отделяет яркость от цветности и она известна как YCbCr. Кстати, есть и другие модели, которые делают аналогичное разделение, но мы рассмотрим только эту.
В этой цветовой модели Y — это представление яркости, а также используются два цветовых канала: Cb (насыщенный синий) и Cr (насыщенный красный). YCbCr может быть получен из RGB, равно как возможно и обратное преобразование. Используя эту модель, мы можем создавать полноцветные изображения, как видим ниже:
Преобразование между YCbCr и RGB
Кто-то возразит: как возможно получить все цвета, если не используется зеленый?
Чтобы ответить на этот вопрос, преобразуем RGB в YCbCr. Воспользуемся коэффициентами, принятыми в стандарте BT.601, который был рекомендован подразделением МСЭ-Р. Это подразделение определяет стандарты цифровом видео. Например: что такое 4K? Каковы должны быть частота кадров, разрешающая способность, цветовая модель?
Сначала вычислим яркость. Воспользуемся константами, предложенные МСЭ, и заменим значения RGB.
После того, как мы получили яркость, отделим синий и красный цвет:
И мы также можем преобразовать обратно и даже получить зеленый с помощью YCbCr:
Как правило, дисплеи (мониторы, телевизоры, экраны и т. д.) используют только модель RGB. Но эта модель может быть организована по-разному:
Цветовая субдискретизация
С изображением, представленным в виде комбинации яркости и цветности, мы можем использовать более высокую чувствительность человеческой зрительной системы к яркости, чем к цветности, если будем выборочно удалять информацию. Цветовая субдискретизация — это метод кодирования изображений, с использованием меньшего разрешения для цветности, чем для яркости.
Насколько допустимо уменьшать разрешение цветности?! Оказывается, уже есть некоторые схемы, которые описывают, как обрабатывать разрешение и слияние
a — эталон горизонтальной выборки (как правило, равен 4)
x — количество выборок цветности в первой строке пикселей (горизонтальное разрешение по отношению к a)
y — количество изменений выборок цветности между первой и второй строками пикселей.
Исключение составляет 4:1:0, обеспечивающее одну выборку цветности в каждом блоке разрешения яркости 4 на 4.
Общие схемы, используемые в современных кодеках:
YCbCr 4: 2: 0 — пример слияния
Вот объединенный фрагмент изображения с использованием YCbCr 4:2:0. Обратите внимание, что мы тратим только 12 бит на пиксель.
Вот так выглядит одно и то же изображение, закодированное основными типами цветовой субдискретизации. Первый ряд — это окончательный YCbCr, нижний ряд показывает разрешение цветности. Весьма достойные результаты, учитывая небольшие потери в качестве.
Помните, мы насчитали 278 Гб дискового пространства для хранения часового видеофайла с разрешением 720p и 30 кадрами в секунду? Если воспользуемся YCbCr 4:2:0, то этот размер сократится наполовину — 139 Гб. Пока что всё равно далеко до приемлемого результата.
Вы можете сами получить гистограмму YCbCr с помощью FFmpeg. В этом изображении синее превалирует над красным, что хорошо видно на самой гистограмме.
Цветность, яркость, цветовая гамма — видеообзор
Рекомендуется к просмотру вот это обалденное видео. Тут объясняется, что такое яркость, да и вообще расставлены все точки над ё о яркости и цвете.
Типы кадров
Двигаемся дальше. Попробуем устранить избыточность по времени. Но сначала давайте определим некоторую базовую терминологию. Предположим, у нас есть фильм с 30 кадрами в секунду, вот его первые 4 кадра:
Мы можем видеть много повторений в кадрах: например, синий фон, не изменяющийся от кадра к кадру. Чтобы решить эту проблему, мы можем абстрактно классифицировать их как три типа кадров.
I-кадр (Intro Frame)
I-кадр (кадр-ссылка, ключевой кадр, внутренний кадр) является автономным. Вне зависимости от того, что нужно визуализировать, I-кадр является, по сути, статичной фотографией. Первый кадр обычно является I-кадром, однако будем регулярно наблюдать I-кадры и среди далеко не первых кадров.
P-кадр (Predicted Frame)
P-кадр (прогнозируемый кадр) использует преимущество того факта, что почти всегда текущее изображение может быть воспроизведено с использованием предыдущего кадра. Например, во втором кадре единственным изменением является движущийся вперёд мяч. Мы можем получить кадр 2 просто немного видоизменив кадр 1, только используя разницу между этими кадрами. Для построения кадра 2 ссылаемся на предшествующий ему кадр 1.
←
B-кадр (Bi-predictive Frame)
А как насчет ссылок не только на прошлые, а заодно и на будущие кадры, чтобы обеспечить еще лучшее сжатие?! Это, в основном и есть B-кадр (двунаправленный кадр).
← →
Промежуточный вывод
Эти типы кадров используются для обеспечения наилучшего сжатия. Мы разберём, как это происходит, в следующем разделе. А пока отметим, что наиболее «дорогим» по затраченной памяти является I-кадр, P-кадр обходится заметно дешевле, а вот самым выгодным вариантом для видео является B-кадр.
Временна́я избыточность (межкадровое прогнозирование)
Давайте рассмотрим какие у нас есть возможности для минимизации повторений по времени. Этот тип избыточности решим с помощью методов взаимного прогнозирования.
Постараемся потратить как можно меньше битов для кодирования последовательности кадров 0 и 1.
Мы можем произвести вычитание, просто вычитаем кадр 1 из кадра 0. Получаем кадр 1, только используем разницу между ним и предыдущим кадром, фактически кодируем только получающийся остаток.
Но что, если я вам скажу, что есть ещё более лучший метод, который использует еще меньше битов?! Сначала давайте разобьём frame 0 на чёткую сетку, состоящую из блоков. А затем попробуем сопоставить блоки из кадра 0 с кадром 1. Иными словами, оценим движение между кадрами.
Из Википедии — блочная компенсации движения
Блочная компенсация движения делит текущий кадр на непересекающиеся блоки и вектор компенсации движения сообщает, происхождение блоков (распространенное заблуждение состоит в том, что предыдущий кадр делится на непересекающиеся блоки, а векторы компенсации движения сообщают, куда переходят эти блоки. А фактически наоборот — анализируется не предыдущий кадр, а последующий, выясняется не куда перемещаются блоки, а откуда они появились). Обычно исходные блоки перекрываются в исходном кадре. Некоторые алгоритмы сжатия видео собирают текущий кадр из частей даже не одного, а сразу нескольких ранее переданных кадров.
В реальной ситуации этот шарик был бы разделен на n блоков, но сути дела это не меняет.
Объекты в кадре перемещаются в трёх измерениях, поэтому при движении шарика он может стать визуально меньше (или больше, если движется в сторону зрителя). Это нормально, что не будет идеального соответствия между блоками. Вот совмещенный вид нашей оценки и реальной картины.
Но видим, что когда применяем оценку движения, данных для кодирования заметно меньше, чем при использовании более простого метода высчитывания дельты между кадрами.
Как будет выглядеть реальная компенсация движения
Эта методика применяется сразу ко всем блокам. Зачастую наш условный движущийся мячик будет разбит сразу на несколько блоков.
Вы можете сами пощупать эти концепции, используя Jupyter.
Чтобы увидеть векторы движения можно создать видео с внешним предсказанием с помощью ffmpeg.
Ещё можно воспользоваться Intel Video Pro Analyzer (он платный, но есть бесплатная пробная версия, которая ограничена только первыми десятью кадрами).
Пространственная избыточность (внутренний прогноз)
Если проанализировать каждый кадр в видео, то обнаружим множество взаимосвязанных областей.
Пройдемся по этому примеру. Эта сцена в основном состоит из синего и белого цветов.
Это I-кадр. Предыдущие кадры для прогнозирования взять не можем, но получится его сжать. Закодируем выделение красного блока. Если мы посмотрим на его соседей, то замечаем, что вокруг него есть кое-какие цветовые тенденции.
Предполагаем, что в кадре цвета распространяются по вертикали. Что означает, что цвет неизвестных пикселей будут содержать значения его соседей.
Такой прогноз может оказаться и неверным. Именно по этой причине нужно применить этот метод ( внутренний прогноз), а затем ещё вычесть реальные значения. Это даст нам остаточный блок, что приведёт к гораздо более сжатой матрице по сравнению с оригиналом.
Если хотите попрактиковаться с внутренними предсказаниями, то можете создать видео с макроблоками и их предсказаниями с помощью ffmpeg. Чтобы понять значение каждого цвета блока придётся ознакомиться с документацией ffmpeg.
Или же можно использовать Intel Video Pro Analyzer (как я уже упоминал выше, в пробной бесплатной версии ограничение на первые 10 кадров, но вам этого на первых порах хватит).