Если все интервалы сделать равными по длине, то получим линейное пространство (без гамма-коррекции). Сформируем в этом пространстве серый градиент, в котором rgb-координаты линейно меняются от нуля до 255 (точкам градиента 0.25, 0.50 и 0.75 соответствуют rgb-координаты (64, 64, 64), (128, 128, 128) и (191, 191, 191)). Изобразим полученный градиент в графическом редакторе и увидим, что светлая часть градиента непомерно велика (Рис. 2.3а). Это объясняется тем, что в отличие от сенсора фотокамеры система «глаз-мозг» воспринимает яркость нелинейно и лучше различает темные оттенки серого, чем светлые.

Рис. 2.3. Изображение градиента в разных цветовых пространствах:

а) без гамма-коррекции; б) с гамма-коррекцией.

Чтобы «подстроиться» под нелинейность зрительной системы человека, применяется гамма-кодирование. В этом случае диапазон яркостей каждого из rgb-каналов по-прежнему разбивается на 256 интервалов, но длины интервалов уже разные. Для малых яркостей интервалы маленькие и увеличиваются по мере увеличения яркости в соответствии со степенной функцией с показателем гамма (часто гамма = 2.2). Тем самым темный участок градиента растягивается, и для теней отводится больше бит и, соответственно, остается меньше бит для светлых частей (Рис. 2.3б).

Одна и та же точка голубого неба будет на экране выглядеть одинаково для линейного RGB-пространства и для пространства с гамма-коррекцией, в то время как значения координат будут различаться: будет что-то вроде (79, 170, 228) для линейного пространства и (151, 213, 243) для пространства с гамма-коррекцией.

Теперь перейдем к случаю цветового пространства с большей глубиной цветности, например, 16-бит на канал, плавающая запятая. В этом пространстве оба варианта нашего серого градиента на глаз будут выглядеть приблизительно так же, как и на рисунке 2.3. Но при 200 %-м увеличении разница заметна (Рис. 2.4). На рисунке 2.4а видны вертикальные полоски, отсутствующие на рисунке 2.4б.

Рис. 2.4. Левая четверть градиента при 200 %-м увеличении в разных цветовых пространствах:

а) 8 бит на канал, без гамма-коррекции;

б) 16 бит на канал, плавающая запятая, без гамма-коррекции.

Есть ли альтернатива гамма-коррекции? Существуют несколько способов превратить градиент на рисунке 2.3а в градиент на рисунке 2.3б, оставаясь в линейном пространстве:

1) «подкрутить» гамму дисплея;

2) добавить к изображению нужный профиль ICC (задающий «подкрученную» гамму);

3) растянуть темную часть градиента в графическом редакторе.

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

Растянуть темную часть градиента в графическом редакторе можно с помощью различных инструментов: «уровни», «кривые» и «градиент в нелинейном пространстве». Воспользуемся последним вариантом, так как он дает немного лучшие результаты и им проще получить то, что нам нужно. Проделаем это для глубины цветности 8 бит на канал и 32 бит на канал, целые числа. Поскольку на глаз разница малозаметна, то оценивать качество получившегося градиента будем с помощью гистограммы. Для идеального градиента количество точек с определенным значением яркости одно и то же для всех значений яркости. Поэтому гистограмма распределения значений яркости для такого градиента должна выглядеть как прямоугольник, лежащий на горизонтальной оси, и все столбики должны быть одной высоты. Результаты же нашего эксперимента приведены на рисунке 2.5.

Рис. 2.5. Гистограммы «растянутого» градиента в разных цветовых пространствах (пояснения в тексте).

Перейти на страницу:

Похожие книги