Понимание глубина цвета

Вольный перевод статьи Understanding Color Processing.
Автор: Дмитрий Чайник

В последнее время я получаю достаточно много вопросов о новых иконках в панели эффектов Premiere Pro, в частности, о ярлыке с надписью "32":

Люди спрашивают, как эти эффекты связаны с 64-битным движком Меркурий и являются ли они ограниченными? Сразу отвечу: "Нет!" - ярлыки означают, что эффекты могут работать с цветом глубиной в 32 бита. Это золотой стандарт обработки цвета.

Тот, кто когда-либо пытался разобраться с вопросом точности цвета, знает, как это непросто. Существует множество разнообразных терминов в этой сфере – 8- и 10-битный цвет используется в описании камер, в то время как программное обеспечение предоставляет 8, 16 и 32 бита на цветовой канал. Что все это значит? Как правильно осуществить цветокоррекцию в Premiere Pro? Если эти вопросы до сих пор прожжжигают ваш мозг, то читайте дальше.

Как известно, во время записи камера обрабатывает свет, пропущенный через объектив, так, что каждому цвету присваивается число, тем самым, формируя цифровые данные. Каждый пиксель матрицы формирует свой набор чисел. Как правило, чем меньше число, тем меньше информации о цвете. Например, значение 0,0,0 в цветовом пространстве RGB означает полностью черный цвет.

Если 0,0,0 представляет собой черный цвет, то, что представляет собой белый? Ответ на это вопрос зависит от того, какую разрядность цвета мы используем. Чем больше битовая глубина, тем больше число на каждый канал мы можем получить.

В качестве примера рассмотрим синий цвет. В 8-битном мире, синий цвет может быть представлен числом в диапазоне между 0 и 255 (т.е. имеем 2^8 = 256 числовых значений. – Прим. переводчика). Если бы у меня была ручка (верньер) для настройки синего цвета, то выглядела бы она следующим образом:

Условимся, что такая ручка может принять одно из 256 дискретных значений. Положение ручки на отметке 255 означает самый яркий и самый насыщенный синий цвет, а при установке на 128 получим "умеренный" синий. Допустима установка только целых чисел, т.е. значения 127.5 в 8-битным цвете не существует.

Теперь посмотрим на 10-битный синий цвет. Ручка настройки в этом режиме может выглядеть следующим образом:

Отлично! Теперь ручку можно установить на значение 1023 (т.е. имеем 2^10 = 1024 числовых значений. – Прим.переводчика)! Это совсем не значит, что 10-битный синий цвет стал более насыщенным. Это означает, что число положений ручки, между минимально и максимально насыщенным синим цветом, увеличилось. Цвета, полученные установкой ручки на значение 255 в первом случае и установкой ручки на значение 1023 во втором случае, будут одинаковыми. Точно так, одинаковым будет и "умеренный" синий, при установке ручки на значение 128 и 512 для первого и второго случая соответственно. Просто на ручке для 10-битного цвета можно выбрать ГОРАЗДО больше оттенков синего. Опять же, как и в случае с 8-битным цветом, возможна установка только целых чисел. Доступно 1024 дискретных значения.

Хохмы ради, представим 12-битный регулятор цвета:

Итак, чем больше глубина (битность) цвета, тем выше точность его передачи. Большая битность цвета означает большее его разнообразие и более широкий выбор цветов, доступных для каждого пикселя.

Каждый пиксель фиксирует больше, чем просто один цвет. Если вы работаете с цветовым пространством RGB или с нечто под названием YUV (описывать которое сейчас я не собираюсь), то каждому пикселю присваивается 3 числовых значения (разряда). Каждый из этих трех разрядов имеет одинаковую битность. Например, если камера имеет 8-битный формат записи, то и разряды каждого цвета, полученного пикселем, являются 8-битными числами.

Запись 8-, 10- и 12-разрядного цвета является стандартом для устройств видеозаписи. Подавляющее большинство камер используют 8-битный цвет. Камеры более высокого класса используют 10 бит, при этом в литературе также используется понятие "10-битной точности АЦП преобразования". 12 бит используют лишь немногие избранные камеры, как например цифровая кинокамера RED ONE.

Программное обеспечение, такое как After Effects или Premiere Pro1), обрабатывают цвет с глубиной 8 и 16 бит, а также в режиме 32 бита с плавающей запятой. Вы, наверное, видели эти цветовые режимы в After Effects, а новый 32-битный режим для некоторых эффектов доступен и в Premiere Pro CS5.

8-битная обработка на самом деле работает так же, как в 8-битной видеокамере - каждый цвет для каждого пикселя представлен значением в диапазоне 0-255. Во время цветокоррекции происходит изменение этого значения в отведенном диапазоне. Так, например, если имеется синий цвет со значением 128, то не составит труда, что бы его изменить на 127 или 129.

Для более точной цветокоррекции используется 16-битный цвет. 16-битный цвет используется в After Effects и Photoshop2), но, к сожалению, в Premiere Pro CS5 он не доступен. Работа с 16-битным цветом такая же, как и с 8-битным, за исключением того, что каждый канал имеет 32768 значений.

Каждый раз, когда вы добавляете исходный файл с 8-битным цветом в проект, в настройках которого указан 16-битный, то происходит банальное масштабирование значений в рамках нового диапазона. Т.е. нуль остается нулем, а 255 становится 32768. Середина диапазона, т.е. 128, в этом случае, будет отождествлена со значением 16384. Это дает возможность использовать большее количество значений, что позволяет делать точную настройку синего цвета в изображении. Вы по-прежнему должны использовать целые (не дробные) числа в указании значения цвета.

Изменением значений я могу сделать цвет ярче или темнее. При установке больших значений яркие области в 8-битном цвете превращаются в большие неопределенные пятна. В 16-битном цвете, чуть больше свободы предоставлено в центре диапазона, но при указании значений, близких к крайним, мы опять теряем информацию о цвете. Т.е. и 8- и 16-битному цветам присуще ограничение, проявляющееся при задании крайних значений диапазона.

Ниже представлен пример изображения с 8- или 16-битным цветом, к которому применен фильтр увеличения яркости, а в районе головы актера наложен фильтр затемнения:

Если внимательно посмотреть на затемненную область в районе головы актера, то можно заменить большое яркое пятно. Все детали в этой области потеряны. Увеличение яркости привело к тому, что для группы пикселей было установлено максимальное значение 255, 255, 255 (в случае 8-бит) или 32768, 32768, 32768 (в случае 16-бит), а фильтр затемнения просто уменьшил эти значения, но уже не до исходных значений, которые утрачены в результате достижения лимита диапазона (255/32768 – чистый белый цвет), а до менее яркого белого, или, иными словами, оттенков серого.

32-битный режим предоставляет особый механизм обращения с цветом, обеспечивая дополнительными возможностями при работе с более яркими и темными областями. Вместо того, чтобы масштабировать нуль к нулю, а 255 к какому-то огромному числу, приняли решение о размещении нуля в середине диапазона. Т.е. нуль размещается точно по середине циферблата нашей виртуальной ручки, при этом с каждой стороны имеется достаточное количество положений для установки нужного значения.

Ниже представлено то же изображение, но с применением фильтров для 32-битной последовательности:

Как можно видеть, в области применения фильтра затемнения детали сохранены, так как для 32-битного цвета можно сохранить различия в пикселях, даже если значения белого выставлены выше 100%.

32-битное значение цвета записывается в виде десятичной дроби. Стандартный диапазон цветов масштабируется от 0,0000 и до 1,0000. Так, нуль 8-битного режима, в 32-битном станет 0,0000, а 255 – 1,00000. В середине диапазона используется значение 0,50003). Благодаря запятой, имеется возможность задать практически бесконечное количество значений, но при этом важно помнить, что можно выйти за границы диапазона и указать значение, которое визуально не приведет к изменению цвета.

Теперь, используя уже знакомую нам ручку настройки, мы постоянно должны помнить о 32-битной плавающей запятой. Поэтому оснастим ее циферблатом, ведь точность хода ручки очень высока:

Кстати, назван режим с "плавающей запятой" потому, что положение запятой, по мере необходимости, может меняться. При этом допустимое максимальное значение составляет 99999 (!), а не 9,9999, как можно было предположить! Десятичные значения теряются в крайних концах шкалы, но крайние концы шкалы практически никогда не используются.

Крис Майер (Chris Meyer) опубликовал прекрасный учебник, в котором он описал работу с 32-битным цветом.

Хорошо, теперь выясним, как все это связано с Premiere Pro. Как нам уже известно, некоторые эффекты из Premiere Pro теперь поддерживают режим обработки цвета 32 бита с плавающей запятой. Что бы иметь возможность работать в этом режиме, необходимо в настройках секвенции включить опцию:

Включение этой опции позволяет на таймлайне секвенции работать с 32-битным цветом, при условии, если его поддерживает видеоэффект. Обратите внимание, что включение этой опции потребует больше оперативной памяти, так что работать рекомендуется на современном оборудовании. Опцию использования максимальной глубины цвета можно выключить в любой момент, когда это необходимо.

В свою очередь, большинство видео форматов используют 8-битный цвет, поэтому при работе с цветом высокой битности и рендеринге в DV- или QuickTime-файл, происходит "понижение" к 8-битам.

В случае, если видео формат поддерживает высокую цветовую точность (DPX и AVC-Intra P2 – два формата, которые поддерживают 10-битную точность), то в диалоговом окне при экспорте будет доступна опция "Render at "Maximum Depth" (Кодировать с максимальной глубиной). Пример включения опции при выводе в формат AVC-Intra:

Некоторые форматы, например, DPX, уже имеют встроенные пресеты для вывода с активацией опции максимальной глубины:

Стив Хоуг (Steve Hoeg), один из инженеров Premiere Pro, привел несколько примеров того, как в Premiere Pro будет происходить обработка цвета в различных ситуациях:

  1. DV-файл с размытием (blur) и цветокоррекцией, экспортируемый в DV-файл при отключенной опции максимальной глубины.
    Импортируем 8-битный DV-файл в проект, применяем 8-битное размытие, осуществляем корректировку 8-битного кадра с получением иного 8 битного кадра, а затем записываем в 8-битный DV-файл.
  2. DV-файл с размытием и цветокоррекцией, экспортируемый в DV-файл при включенной опции максимальной глубины.
    Импортируем 8-битный DV-файл в проект, применяем 32-битное размытие, осуществляем корректировку 32-битного кадра с получением иного 32-битного кадра, а затем записываем в 8-битный DV-файл. Цветокоррекция в 32-битном режиме даст более высокое качество, чем в предыдущем примере.
  3. DV-файл с размытием и цветокоррекцией, экспортируемый в формат DPX при включенной опции максимальной глубины.
    Импортируем 8-битный DV-файл в проект, применяем 32-битное размытие, осуществляем корректировку 32-битного кадра с получением иного 32 битного кадра, а затем записываем в 10-битный DPX-файл. В результате получим материал более высокого качества, поскольку окончательный файл поддерживает высокую цветовую точностью.
  4. DPX-файл с размытием и цветокоррекцией, экспортируемый в формат DPX при отключенной опции максимальной глубины.
    Импортируем 10-битный DPX-файл в проект, понижаем точность с 10 бит до 8, применяем 8-битное размытие, осуществляем цветкор 8-битного кадра с получением иного 8 битного кадра, а затем записываем 10-битный DPX-файл на основе 8-битной информации.
  5. DPX-файл с размытием и цветокоррекцией, экспортируемый в формат DPX при включенной опции максимальной глубины.
    Импортируем 10-битный DPX-файл в проект, применяем 32-битное размытие, осуществляем цветкор 32-битного кадра с получением иного 32-битного кадра, а затем записываем в DPX-файл с 10-битной точностью. При этом сохранится полная цветовая точность всей цепочки операций.
  6. Титры с градиентом и размытием на 8-битном мониторе.
    Изображение будет 8-битным, может проявиться т.н. "бэндинг" (т.е., дискретность или ступенчатость градиента).
  7. Титры с градиентом и размытием на 10-битном мониторе (с включенным аппаратным ускорением).
    Размытие будет просчитано в режиме 32 бита, затем будет выведено 10-битное изображение. Градиент должен быть плавным.

1) Premiere Pro не поддерживает работу с 16-битным цветом. — Прим. переводчика.
2) При работе с 16-битным цветом продукты Adobe реально используют 15 бит (диапазон от 0 до 32768). Такой функционал, по всей видимости, был унаследован еще от Aldus. Скорее всего, это объясняется тем, что при работе с 15-битным цветом можно однозначно получить середину диапазона, т.е. 16384, и вероятность переполнение буфера стека меньше, чем при 16 битах. Учитывая возможности современных компьютеров, последний довод весьма спорный. Тем не менее, код, используемый в Photoshop, благополучно используется и в After Effects и переписывать его никто не собирается. – Прим. переводчика.
3) Внимательный читатель мог заметить неточность: ранее в статье говорилось о размещении нуля в середине диапазона, то сейчас автор говорит о прямом масштабировании для всего диапазона. К сожалению, информации, подтверждающей утверждение о размещении нуля в середине диапазона для 32-битного цвета, найти не удалось. Скорее всего, имеется в виду то, что в 32-битном режиме для собственно информации о цвете используется только часть диапазона (24 бита), в то время как оставшийся диапазон используется для хранения информации о значениях ниже минимального и выше максимального, дабы они не утрачивались безвозвратно во время обработки. Подробности см. на сайте Wikipedia. – Прим. переводчика.

Социальные комментарии Cackle