Введение

Функция отображения яркости изображения

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

где неотрицательное вещественное входное значение возводится в степень γ и умножается на константу A для получения выходного значения. В наиболее распространенном случае, когда A = 1, входные и выходные значения обычно находятся в диапазоне от 0 до 1. Значение γ иногда называют гаммой кодирования, а процесс кодирования с использованием этой нелинейности степенного сжатия — гамма-сжатием; соответственно, значение γ называют гаммой декодирования, а применение нелинейности степенного расширения — гамма-расширением.

Пояснение

Гамма-кодирование изображений используется для оптимизации использования битов при кодировании изображения или пропускной способности, необходимой для передачи изображения, за счет использования нелинейного способа восприятия света и цвета человеком. Гамма-кодирование изображений с плавающей точкой не требуется (и может быть неэффективным), поскольку формат с плавающей точкой уже обеспечивает кусочно-линейное приближение логарифмической кривой. Хотя гамма-кодирование изначально было разработано для компенсации характеристик яркости дисплеев с электронно-лучевой трубкой (ЭЛТ), это не является его основной целью или преимуществом в современных системах. В ЭЛТ-дисплеях интенсивность света изменяется нелинейно в зависимости от напряжения электронного пушка. Изменение входного сигнала с помощью гамма-компрессии может компенсировать эту нелинейность, чтобы выходное изображение имело желаемую яркость. Однако гамма-характеристики устройства отображения не влияют на гамма-кодирование изображений и видео. Гамма-кодирование необходимо для максимизации визуального качества сигнала, независимо от гамма-характеристик дисплея. Фотопленка обладает гораздо большей способностью регистрировать тонкие различия в оттенках, чем может быть воспроизведено на фотобумаге. Аналогично, большинство видеоэкранов не способны отображать диапазон яркостей (динамический диапазон), который может быть зафиксирован типичными электронными камерами. По этой причине значительные усилия прилагаются к выбору оптимального способа представления исходного изображения. Гамма-коррекция, или выбор контраста, является частью арсенала фотографа, используемого для настройки воспроизводимого изображения. Аналогично, цифровые камеры записывают свет с помощью электронных сенсоров, которые обычно реагируют линейно. В процессе преобразования линейных исходных данных в стандартные RGB-данные (например, для сохранения в формате JPEG) выполняются преобразования цветового пространства и преобразования рендеринга. В частности, почти все стандартные цветовые пространства RGB и форматы файлов используют нелинейное кодирование (гамма-компрессию) предполагаемых интенсивностей основных цветов при фотографическом воспроизведении. Кроме того, желаемое воспроизведение почти всегда нелинейно связано с измеренной интенсивностью сцены посредством нелинейности воспроизведения тона.

Обобщенная гамма

Понятие гамма может быть применено к любой нелинейной зависимости. Для степенной зависимости кривая на логарифмическом графике является прямой линией, с наклоном, повсеместно равным гамма (наклон здесь представлен оператором производной):

То есть, гамма можно представить как наклон вход-выходной кривой при построении на логарифмических осях. Для степенной кривой этот наклон постоянен, но эта идея может быть расширена на любой тип кривой, в этом случае гамма (в строгом смысле, "точечная гамма") определяется как наклон кривой в конкретной точке.

Фотосъемка

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

Аналоговое телевидение

Вывод на телевизоры и мониторы с ЭЛТ обычно не требует дополнительной гамма-коррекции. Стандартные видеосигналы, передаваемые или хранящиеся в файлах изображений, содержат гамма-сжатие, соответствующее гамма-расширению ЭЛТ (хотя это и не является точной обратной функцией). Для телевизионных сигналов значения гаммы фиксированы и определяются аналоговыми видеостандартами. Системы CCIR M и N, используемые с цветным NTSC, применяют гамму 2.2; системы B/G, H, I, D/K, K1, L и M, используемые с цветным PAL или SECAM, применяют гамму 2.8.

Компьютерные дисплеи

В большинстве систем компьютерного отображения изображения кодируются с гаммой около 0,45 и декодируются с обратной гаммой 2,2. Заметным исключением, до выпуска Mac OS X 10.6 (Snow Leopard) в сентябре 2009 года, были компьютеры Macintosh, которые кодировали с гаммой 0,55 и декодировали с гаммой 1,8. В любом случае, двоичные данные в файлах изображений (таких как JPEG) явно кодируются (то есть содержат значения, закодированные с помощью гаммы, а не линейные интенсивности), как и файлы видео (такие как MPEG). Система может дополнительно управлять обоими случаями с помощью управления цветом, если требуется лучшее соответствие гамме выходного устройства. Стандарт цветового пространства sRGB, используемый большинством камер, ПК и принтеров, не использует простую степенную нелинейность, как описано выше, но имеет значение гаммы декодирования около 2,2 на большей части своего диапазона, как показано на графике справа/выше. Ниже сжатого значения 0,04045 или линейной интенсивности 0,00313 кривая является линейной (кодированное значение пропорционально интенсивности), поэтому 1 = γ = 1. Пунктирная черная кривая, расположенная за красной, представляет собой стандартную степенную кривую 1 = γ = 2,2 для сравнения. Гамма-коррекция в компьютерах используется, например, для правильного отображения изображения Apple с гаммой = 1,8 на мониторе ПК с гаммой = 2,2 путем изменения гаммы изображения. Другое применение – выравнивание гамм отдельных цветовых каналов для компенсации различий между мониторами.

Гамма метаинформация

Некоторые форматы изображений позволяют сохранять целевую гамму (преобразования между закодированными значениями пикселей и яркостью) в метаданных, что упрощает автоматическую гамма-коррекцию. Спецификация PNG включает в себя чанк gAMA для этой цели, а в форматах JPEG и TIFF можно использовать тег Exif Gamma. Некоторые форматы могут указывать профиль ICC, который включает в себя функцию передачи. Эти возможности исторически вызывали проблемы, особенно в веб-среде. Для цветов HTML и CSS, а также изображений JPG или GIF без прикрепленных метаданных цветового профиля, популярные браузеры передавали числовые значения цветов на дисплей без управления цветом, что приводило к значительному различию в отображении на разных устройствах. Однако те же браузеры передавали изображения с гаммой, явно указанной в метаданных, через систему управления цветом, и также применяли гамму по умолчанию к изображениям PNG, у которых метаданные отсутствовали. Это делало невозможным одновременное соответствие изображений PNG цветам HTML или немаркированных JPG на всех устройствах. Ситуация с тех пор улучшилась, поскольку большинство основных браузеров теперь поддерживают настройку гаммы (или её отсутствие).

Закон мощности для видеодисплея

Гамма-характеристика — это степенная зависимость, которая аппроксимирует взаимосвязь между закодированной яркостью в телевизионной системе и фактической желаемой светимостью изображения. При этой нелинейной зависимости равные шаги в закодированной яркости приблизительно соответствуют субъективно равным шагам в яркости. Эбнер и Фэрчайлд использовали показатель 0,43 для преобразования линейной интенсивности в светлоту (люму) для нейтральных цветов; было обнаружено, что обратный показатель, приблизительно 2,33 (достаточно близкий к значению 2,2, приводимому для типичной подсистемы отображения), обеспечивает приблизительно оптимальное перцептивное кодирование оттенков серого. Следующая иллюстрация показывает разницу между шкалой с линейно возрастающим закодированным сигналом яркости (линейный вход с гамма-сжатой люмой) и шкалой с линейно возрастающей шкалой интенсивности (линейный выход светимости). Линейное кодирование VS = 0.0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0 Линейная интенсивность I = 0.0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0

На большинстве дисплеев (с гаммой около 2.2) можно заметить, что линейная шкала интенсивности имеет резкий скачок в воспринимаемой яркости между значениями интенсивности 0.0 и 0.1, в то время как шаги в верхней части шкалы едва заметны. Гамма-закодированная шкала, имеющая нелинейно возрастающую интенсивность, покажет гораздо более равномерные шаги в воспринимаемой яркости. Электронно-лучевая трубка (ЭЛТ), например, преобразует видеосигнал в свет нелинейным образом, поскольку интенсивность (яркость) электронного пучка как функция приложенного видео напряжения является нелинейной. Интенсивность света I связана с исходным напряжением Vs следующим образом:

где γ — греческая буква гамма. Для ЭЛТ гамма, связывающая яркость с напряжением, обычно находится в диапазоне от 2,35 до 2,55; таблицы поиска видео в компьютерах обычно регулируют гамму системы в диапазоне от 1,8 до 2,2. Настройка этих таблиц называется аппаратной калибровкой. Некоторые современные мониторы позволяют пользователю изменять поведение гаммы (как будто это просто другая настройка яркости/контрастности), кодируя входные сигналы самостоятельно перед их отображением на экране. Это также калибровка аппаратным способом, но она выполняется на аналоговых электрических сигналах, а не на переназначении цифровых значений, как в предыдущих случаях. В правильно откалиброванной системе каждый компонент будет иметь заданную гамму для своих входных и/или выходных кодировок. Во многих случаях значения гамма-коррекции для основных цветов немного различаются. Настройка цветовой температуры или белой точки — следующий шаг в настройке монитора. Перед гамма-коррекцией желаемую гамму и цветовую температуру следует установить с помощью элементов управления монитора. Используя элементы управления гаммой, контрастностью и яркостью, гамма-коррекцию на ЖК-дисплее можно выполнить только для одного конкретного вертикального угла обзора, что подразумевает одну конкретную горизонтальную линию на мониторе, на одном конкретном уровне яркости и контрастности. ICC-профиль позволяет настроить монитор для нескольких уровней яркости. Качество (и цена) монитора определяет, насколько отклонение от этой рабочей точки все еще дает удовлетворительную гамма-коррекцию. Дисплеи с TN-матрицей (Twisted Nematic) с 6-битной глубиной цвета на основной цвет имеют самое низкое качество. Дисплеи с IPS-матрицей (In-Plane Switching) с типичной 8-битной глубиной цвета лучше. Хорошие мониторы имеют 10-битную глубину цвета, аппаратное управление цветом и позволяют проводить аппаратную калибровку с помощью тристимульного колориметра. Часто 6-битная панель плюс FRC продается как 8-битная, а 8-битная панель плюс FRC продается как 10-битная. FRC не является полноценной заменой большего количества бит. Форматы 24-битной и 32-битной глубины цвета имеют 8 бит на основной цвет. С Microsoft Windows 7 и выше пользователь может установить гамма-коррекцию с помощью инструмента калибровки цвета дисплея dccw.exe или других программ. Эти программы создают файл ICC-профиля и загружают его по умолчанию. Это упрощает управление цветом. Увеличьте ползунок гаммы в программе dccw до тех пор, пока последняя цветная область, часто зеленый цвет, не будет иметь одинаковую яркость в шахматном и однородном областях. Используйте ползунки цветового баланса или отдельные цветовые ползунки гамма-коррекции в программах гамма-коррекции для настройки двух других цветов. Некоторые старые драйверы графических карт не загружают таблицу поиска цветов (LUT) правильно после выхода из режима ожидания или гибернации и отображают неправильную гамму. В этом случае обновите драйвер графической карты. В некоторых операционных системах, работающих в X Window System, можно установить коэффициент гамма-коррекции (применяемый к существующему значению гаммы) с помощью команды xgamma 0.9 для установки коэффициента гамма-коррекции равным 0.9 и xgamma для запроса текущего значения этого коэффициента (по умолчанию 1.0). В системах macOS гамма и другие связанные с этим калибровки экрана выполняются через Системные настройки.

Размер и смешивание

Как правило, операции со значениями пикселей должны выполняться в "линейном свете" (гамма 1). Эрик Брассер подробно обсуждает эту проблему и предоставляет тестовые изображения. Они призваны указать на широко распространенную ошибку: многие программы выполняют масштабирование в цветовом пространстве с гаммой, а не в физически корректном линейном пространстве. Тестовые изображения построены таким образом, чтобы при некорректном уменьшении масштаба они выглядели совершенно иначе. Йонас Берлин создал изображение "ваше программное обеспечение для масштабирования ужасно/отлично" на основе этого принципа. Помимо масштабирования, проблема также относится к другим видам понижения дискретизации (уменьшения масштаба), таким как цветовая субдискретизация в JPEG с включенной гаммой Y′CbCr. WebP решает эту проблему, вычисляя средние значения цветности в линейном пространстве, а затем преобразуя их обратно в пространство с гаммой; для больших изображений используется итеративное решение. Тот же код YUV (ранее Smart YUV) используется в sjpeg и опционально в AVIF. Корнелски предлагает более простое приближение, основанное на взвешенном среднем по яркости. Альфа-композитинг, цветовые градиенты и 3D-рендеринг также подвержены влиянию этой проблемы. Парадоксально, но при увеличении масштаба изображения результат, обработанный в "неправильном" (нефизическом) гамма-цветовом пространстве, часто выглядит более эстетично. Это связано с тем, что ресэмплинг-фильтры с отрицательными долями, такие как Mitchell–Netravali и Lanczos, создают линейные артефакты звона, хотя человеческое восприятие нелинейно и лучше описывается гаммой. (Эмуляция "отдаления", которая мотивирует понижение дискретизации в линейном свете (гамма=1), не применима при увеличении дискретизации.) Связанный метод уменьшения видимости артефактов звона заключается в использовании сигмоидальной функции передачи света, впервые реализованной в ImageMagick и фильтре LoHalo в GIMP, а затем адаптированной для видео-увеличения масштаба в madVR, AviSynth и Mpv.