Выбор цветового пространства при работе с цифровым видео

Речь в сегодняшней статье пойдет о цветовых пространствах. Ограничимся рассмотрением лишь тех из них, которые сейчас широко применяются в компьютерном видео. Как уже говорилось в предыдущей статье "Захват видео с помощью Virtual Dub" (см. КГ №№ 19, 20), от выбора цветового пространства зависит размер получаемого промежуточного файла. Забегая вперед, можно сказать, что правильный выбор цветового пространства позволит ускорить и последующую обработку видео. В свое время, пытаясь найти дополнительную информацию о таинственном формате YUV, я обратил внимание на ничтожно малое количество источников по этой теме в Интернет. Что касается русскоязычных, то их вовсе нет. В конце концов, читая о том, что кодек "теперь поддерживает цветовое пространство YUV, и поэтому быстрее и качественнее кодирует и декодирует видео", пытаешься найти этому обоснование. Но в итоге это лишь собственное мнение того или иного автора. Англоязычный источник оказался буквально один — книга Video Demystified. Судя по всему, ее в свое время читал и Avery Lee — автор программы Virtual Dub. Материалы по цветовым пространствам в ней просто собраны из различных официальных документов. Существует несколько очень похожих документов, отличающихся от вышеназванной книги объемом представленных материалов.

Перейдем к делу. Прежде всего, цветовое пространство — это математическое представление некоторого набора цветов. Существует несколько основных математических моделей, среди которых нас интересуют только YUV и RGB. На основе теоретических данных попробуем определить, которая из них больше подходит для кодирования видео.
RGB. Название цветового пространства — аббревиатура от слов Red (красный), Green (зеленый), Blue (синий). Эти три составляющих используются для представления произвольного цвета. Куб RGB представлен на рис. 1. Данное цветовое пространство применяется в компьютерной графике, потому что такая организация упрощает архитектуру системы.


Рис. 1. Куб RGB

YUV. Может показаться, что это тоже аббревиатура. Однако нет, это просто буквенные обозначения составляющих. Назначение этого цветового пространства — видеотехника. Оно и применяется в стандартах PAL (Phase Alternation Line), NTSC (National Television System Committee), SECAM (Sequential Color with Memory). Модель основана на представлении в виде трех составляющих: яркости (luma — Y) и цветоразностей (U и V). Как видим, для представления черно-белого изображения потребуется всего одна составляющая (против трех у RGB), что существенно упрощает хранение, обработку и передачу такой информации. Координата Y является диагональю куба RGB, поэтому и возникает резонный вопрос: а как эти цветовые пространства сопоставимы между собой? Формулы для представления YUV через известные значения RGB следующие:

Y=0.299R'+0.587G'+0.114B'
U=-0.147R'-0.289G'+0.436B'=0.492 (B'-Y)
V=0.615R'-0.515G'-0.100B'=0.877(R'-Y)

Обратные формулы имеют следующий вид:

R'=Y+1.140V
G'=Y-0.394U-0.581V
B'=Y+2.032U

Здесь вместо значений R, G, B используются скорректированные значения R', G', B'. Формулы корректирования просты и зависят от конкретного стандарта, поэтому подробно на этом останавливаться не будем. В цифровой технике диапазон значений RGB составляет [0; 255] для каждого компонента, тогда как для компонентов цветового пространства YUV диапазоны следующие: [0; 255] для Y, [-112; 112] для U и [-157; 157] для V. Обратите внимание на формулы U и V. Они связаны с возможностями современной техники. Из них следует, что на современном этапе техника может воспроизводить лишь около половины диапазона значений B'-Y и почти вдвое больше значений диапазона R'-Y. Кроме YUV, можно встретить еще и такие названия: YIQ, YDbDr, YCbCr. Это не другие модели, это разновидности YUV. Отличаются они коэффициентами в формулах и стандартами, в которых применяются. YIQ применяется в стандарте NTSC, YDbDr — в SECAM. На YCbCr мы остановимся подробнее, потому что именно эта версия цветового пространства YUV применяется для цифрового видео и, значит, имеет прямое отношение к таким понятиям, как DVD, DVB, MPEG — словом, ко всему тому, с чем сегодня ассоциируется цифровое видео.

Это цветовое пространство описано в рекомендациях ITU-R BT.601 (или, как часто упоминается в различного рода документах, сокращенно BT.601). Y может принимать значения [16; 235], Cb и Cr могут принимать значения [16; 240]. Значения, исключенные из этого диапазона, используются при видеообработке. В ином случае их принято относить к шумам. Обращайте внимание при изучении документации, что тот или иной программный продукт написан с учетом рекомендаций BT.601. Это будет означать, что продукт не выдает значений YCbCr вне указанных диапазонов. К слову, значения составляющих для различных цветов будут разными в зависимости от того, имеем мы дело с SDTV (Standart Definition TV — телевидение стандартной четкости) или HDTV (High Definition TV — телевидение высокой четкости). Кроме того, формулы RGB<=>YCbCr для компьютерных систем будут немного отличаться от "оригинальных". Рекомендации BT.601 относятся к SDTV, о котором и пойдет речь далее (для HDTV у рекомендаций другой номер — 709). Итак, формулы получения значений YCbCr из известных RGB для компьютерных систем:

Y=0.257R'+0.504G'+0.098B'+16
Cb=-0.148R'-0.291G'+0.439B'+128
Cr=0.439R'-0.368G'-0.071B'+128

И обратные формулы:

R'=1.164(Y-16)+1.596(Cr-128)
G'=1.164(Y-16)-0.813(Cr-128)-0.392(Cb-128)
B'=1.164(Y-16)+2.017(Cb-128)

Обратите внимание, что обратные формулы могут давать значения R'G'B' вне допустимого диапазона [0; 255]. Об этом немного ниже. А сейчас постараемся разобраться в понятиях YUY2 и YV12, которые так часто встречаются. Перед тем или иным вариантом YCbCr написан его код — например, 4:4:4 или 4:2:0. Для простоты восприятия можно предложить следующую "расшифровку". Для описания точки требуется 3 фрагмента (сэмпла): Y, Cb, Cr. Первая цифра кода указывает, в скольких из 4 столбцов присутствует сэмпл Y. Информация о яркости является более важной в сравнении с информацией о цветоразности, и поэтому не исключается. Вторая цифра указывает, сколько столбцов из 4 содержат сэмплы Cb и Cr в нечетных строках или в нечетных полукадрах, третья содержит такую же информацию, но только о четных строках или четных полукадрах. В некоторых точках отсутствует часть информации об изображении. Отсутствующий сэмпл восстанавливается на основе информации о соседних точках или о соответствующих точках соседних полукадров. Однако цифровое обозначение ничего не говорит о структуре, и поэтому деление на четные и нечетные строки условное, поскольку бывают случаи, когда сэмплы Cb, Cr располагаются вообще между строк и являются вычисленными на основе ранее присутствовавшей информации о соседних точках. Формат 4:4:4 YCbCr является полным вариантом YCbCr. На представление каждой составляющей отводится 8 бит (на что указывает код 4:4:4. Т.е. для хранения информации об одной точке в формате X:Y:Z отводится (X+Y+Z) * 2 бит). На рис. 2 схематически изображена структура изображения.



Рис. 2. Структура формата 4:4:4

Формат 4:2:2 YCbCr является 16-битным. И, как видно из рис. 3, каждый второй сэмпл Cb и Cr исключен. А при декодировании видео отсутствующие значения досчитываются, исходя из информации о соседних "неурезанных" точках. Как уже говорилось, информация о цветоразности не так важна, как о яркости. Исходя из того, что резко изменяться значения составляющих для двух соседних точек не могут, и стало возможным исключение каждого второго сэмпла Cb и Cr. Обратите внимание на окно Color Depth (рис. 4) программы Virtual Dub (см. статью "Virtual Dub. Настройки и
разновидности"). Как видим, в списке присутствуют три формата 4:2:2 YCbCr. Разница между UYVY и YUY2 такова, что в макропикселе (это условная точка, состоящая из двух реальных точек) у них разный порядок следования информации о составляющих. Говоря проще, YUY2 — это инвертированный формат UYVY. Формат YV16 отличается тем, что использует совершенно иной способ хранения информации о точках.



Рис. 3. Структура формата 4:2:2

Рис. 4. Окно Color Depth программы Virtual Dub

Есть смысл внести некоторую ясность в способы хранения информации о точках. Способов этих два. Первый, как говорилось выше, заключается в том, что информация хранится в макропикселях. Группа форматов, использующих такой способ, называется packed (упакованный). Другая группа называется planar (плоскостной, планарный) и отличается тем, что информация о каждой составляющей хранится в отдельном массиве. То есть отдельная точка может быть получена путем извлечения соответствующих значений составляющих из отдельных массивов (плоскостей). Формат 4:2:0 YCbCr является 12- битным. Но не стоит думать, что он годится для воспроизведения видео для мобильных телефонов:). Удивитесь, но именно этот формат используется стандартами MPEG-1 и MPEG-2 (самое время ужаснуться: DVD-видео использует 12-битный цвет). На рис. 5, 6 показаны две разновидности 4:2:0 YCbCr, отличающиеся в стандартах MPEG-1 и MPEG-2. Есть и еще одна разновидность 4:2:0 YCbCr — так называемая совмещенная (предыдущие форматы, которые мы рассмотрели, были совмещенными, потому что сэмплы Cb, Cr "совмещены" с Y). Она используется DV-приложениями. В Virtual Dub есть один планарный формат 4:2:0 YCbCr-YV12. Отвлечемся и еще раз затронем тему воспроизведения оцифрованного в MPEG-2 видео — тех самых DVD, которые должны обеспечивать высокое качество. Можно заметить, что при оцифровке видео на DVD не нужно использовать Deinterlace-фильтр. И правда, эффект "расчески" никак не проявляется. Объяснить это очень просто. "Истинный" размер одного кадра в случае PAL/SECAM 720х288, а "истинная" частота — 50 кадров в секунду. Собственно, тут ничего нового — все те же полукадры, следующие с удвоенной частотой. При воспроизведении на компьютере эти полукадры будут "собраны" в один полный кадр. Естественно, возникает эффект "расчески", который убирается декодером MPEG-2. Ну, а для того, чтобы на декодирование видео не затрачивалось много ресурсов, декодер выполнит быстрый и низкокачественный деинтерлейс. В связи с этим напрашивается очень смелый вывод. В сравнении со случаем, когда видео кодируется в MPEG-4 с применением высококачественных (медленных) деинтерлейсеров, оцифровка видео в MPEG-2 может приводить к уменьшению вертикального разрешения и/или смазыванию движений в динамичных сценах. 



Рис. 5. Структура формата 4:2:0 (MPEG-2)


Рис. 6. Структура формата 4:2:0 (MPEG-1, H.261, H.263)

Формат 4:1:1 YCbCr рассматривать не будем ввиду того, что он мало распространен и используется в DV-приложениях. На рис. 7 приведена так называемая хроматическая диаграмма, разработанная в 1931 году CIE (International Commission on Illumination — Международная комиссия по освещению). Уникальность ее в том, что видимый человеческим глазом спектр представлен на ней в виде двухмерной области, целиком лежащей в первой четверти декартовой системы координат. Значения координат получены по следующим формулам:

x=R/(R+G+B)
y=G/(R+G+B)
z=B/(R+G+B)

Координаты называются хроматическими. И, так как одна координата (в данном случае z) может быть получена по известным x и y, она не используется. Эта диаграмма совмещена с областями, которые представляют возможные диапазоны устройств различных стандартов и печатающих устройств (как все неоднозначно в этом мире). Сравнивая области, можно сделать вывод, что современная техника обеспечивает воспроизведение лишь примерно половины видимого спектра.


Рис. 7. Хроматическая диаграмма CIE 1931 г.

На рис. 8 представлены кубы YCbCr и RGB. Из рисунка видно, что пространство YCbCr шире пространства RGB. В связи с этим напрашивается пара интересных выводов. Учитывая тот факт, что для описания одинакового диапазона цветов в цветовом пространстве используется меньшее количество значений, можно сказать, что произвольная точка будет точнее описана в цветовом пространстве RGB, чем в YCbCr. Хотя, с другой стороны, менее точное цветовое пространство YCbCr передает и меньшее количество шумов. По взаимному расположению кубов сразу становится понятно, почему многие значения YCbCr из допустимых областей могут давать недопустимые значения RGB.


Рис. 8. Относительное расположение кубов RGB и YCbCr

Подведем итоги. Цветовое пространство YUV больше подходит для передачи, обработки и сжатия информации о видео, чем RGB. Конвертация RGB => YUV => RGB приводит к потере части информации о видео, которая происходит на этапе RGB => YUV. Поэтому нецелесообразно захватывать видео в RGB для последующей его обработки, передачи и сжатия в цветовом пространстве YUV. Что касается карт захвата на базе Connexant BT8x8, то для них использование RGB при захвате вообще противопоказано, т.к. "родным" цветовым пространством для них является YUY2. RGB для этих карт при захвате видео можно получить только программно.
При подготовке статьи были использованы материалы книги Video Demystified и сайта FOURCC — информационного ресурса о цветовых пространствах и кодеках.

Ссылки:
FOURCC: сайт
Сайт книги "Video Demystified": сайт (автор Keith Jack)

Продолжение следует

Maxe Erte the Mad, maxe.erte@gmail.com


Компьютерная газета. Статья была опубликована в номере 21 за 2006 год в рубрике софт

©1997-2023 Компьютерная газета