Ян Владимирович (vladimirovich) wrote,
Ян Владимирович
vladimirovich

This journal has been placed in memorial status. New entries cannot be posted to it.

Гамма коррекция

Яркость источника света измеряют в свечах, или канделах. В физических справочниках есть достаточно полные описания, того, что считается яркостью света в одну канделу. Например, там можно найти точную и довольно бесполезную информацию, что одна международная свеча – это 1,005 новой свечи (канделы).

Важно тут, что (при некотором фиксированном спектре) в численном измерении яркость будет пропорциональна количеству фотонов.

В компьютере цвета измеряются в пропорциях RGB – красного, зелёного и синего, от 0 до 255. [0; 0; 0] – самый черный цвет, [255; 255; 255] самый белый. Понятно, что яркость одного и того же уровня на различных мониторах сильно отличается друг от друга. Яркость картинки на бумаге вообще зависит от условий внешнего освещения. Сказать заранее, какой (в абсолютных единицах) яркости будет соответствовать некоторый определенный уровень серого, нельзя.

Можно попробовать установить, какой уровень серого ([x; x; x], где x - неизвестное) соответствует излучению в два раза более слабому, чем самый яркий цвет – белый в [255; 255; 255]. Сделать это очень просто – нарисовав вот такую картинку:


Если прищуриться или просто подальше отойти от монитора, то белые и черные полоски в левом столбце сольются в однотонный фон. Его яркость, разумеется, будет как раз в половину яркости самого яркого белого. Можно подобрать, в каком из правых квадратов яркость будет совпадать с левым лучше всего. Самый верхний, с яркостью в [127, 127, 127], что почти совпадает с 255/2, оказывается гораздо темнее, чем яркость половинной мощности. Почему так?

Ответ прост - шкала цветов нелинейная. Следующий резонный вопрос - почему она нелинейная?

Первая причина - историческая обусловленность. Одними из первых устройства вывода изображений были мониторы на электронно-лучевых трубках. Если на вход катода электронно-лучевой трубки подаётся напряжение V, то количество фотонов, или что то же самое, наблюдаемая интенсивность света I, будет пропорциональна

I~V g

Где параметр g характеризует конкретную электронно-лучевую трубку.

В реальных условиях формула довольно точно выражает зависимость яркости от "номера цвета". Кроме "чистого", физического эффекта могут применяться различные компенсирующие схемы.
Строго говоря, в данной формуле не учитывается тот факт, что самый черный цвет [0; 0; 0] на существующих мониторах (там более мониторах LCD и проекторах) - не совсем черный. Рассматривается некий идеальный монитор, контраст которого бесконечен, а черный - черён совершенно, то есть не отражает и не испускает фотонов света.
Пользуясь верхним рисунком, можно легко определить параметр g, или коэфициент гамма-коррекции для вашего монитора (он написан в левом столбце).

Вторая причина - лучшее соответствие человеческому восприятию. Дело в том, что гамма-компенсированная шкала (по сравнению с линейной) точнее передаёт тёмные цвета, близкие к черному. Чувствительность человеческого зрения также нелинейна, мы хорошо чувствуем относительные изменения яркости, а не абсолютные.

Когда микросхемы были большими, а программы маленькими, выделять больше одного байта на компоненту R, G и B казалось ненужным и расточительным. Если бы шкала была 8-битной и линейной, то градиент выглядел бы примерно так:


Вот иллюстрация разницы между 8-битными (256 уровней серого) линейной и гамма-компенсированной шкалой. Темные цвета вторая шкала передаёт значительно точнее. В линейной шкале для промежуточных тёмных цветов просто нет места.
Часто возникает вопрос - но ведь при гамма-компенсации теряется точность передачи светлых оттенков! С математической точки зрения - верно. Но с точки зрения человеческого зрения - не совсем. Как уже было сказано, человек чувствует относительные изменения яркости, а не абсолютные. Если в комнате включить третью лампочку на 60 ватт - разница будет заметна хорошо. Если тридцатую - практически неощутима.
Поскольку хранятся и обрабатываются цвета в шкале с гамма-компенсацией, то от всех устройств получения изображений (сканеров и цифровых фотоаппаратов) также требуется перевод в гамма-компенсированную шкалу. Скажем, для цветового пространства sRGB и AdobeRGB этот параметр составляет 2,2. Эта же величина является стандартом для среды Windows. В MacOS принят стандарт 1,8.
На самом деле в sRGB используется более сложная система (wikipedia:sRGB) - смесь линейной и гамма-компенсированой с показателем 2,4. В первом приближении она как раз похожа на просто гамма-шкалу, с коэфициентом в 2,2. Что же до Adobe RGB, то вот что: точный показатель гамма составляет не 2,2 а 2,19921875. Кому может понадобится такая точность?
Как результат, например в LCD мониторах, проекторах и так далее используется также гамма-компенсированная шкала, хотя зависимость между входным напряжением на вход одного элемента матрицы и яркостью этого элемента там гораздо сложнее, и для достижения нужного эффекта используются компенсирующие схемы.

Зачем это знать?

Если бы программисты графических редакторов писали их таким образом, что эффект гамма коррекции учитывался при применении фильтров, то всё вышесказанное было бы не так важно.

Однако возможность обработки изображения в линейной шкале была введена только в photoshop версии CS2. В этом режиме цвет хранится как число с плавающей запятой, что обеспечивает очень большую точность (32 битный float), а также возможность хранить цвета "светлее белого". Такие фильтры, как коррекция экспозиции (цифровой push/pull), корректировка баланса белого в линейной шкале записываются просто умножением компоненты на число. Для гамма-компенсированой нужна последовательность - перевод в линейную, обработка, перевод обратно. Ничего невозможного тут нет, но почему-то фильтры, реализующие эти операции, стали появляться относительно недавно.

Пример первый. Задача: уменьшить картинку stripes.jpg (~ 100 Kb) с размера 500 на 500 пикселей до размера 200 на 200 пикселей. Результаты:


Результат слева был получен стандартным способом, линейной интерполяцией 8 бит на канал. Картинка справа - в режиме 32 бита на канал, при этом точно также использовалась линейная интерполяция. Сравните муар на правой и левой картинке.

Пример второй. Предположим нам надо размыть картинку, максимально похоже на то, как это делает объектив.


Рассмотрим пока самый простой случай, когда есть картинка, и задний фон который нужно размыть. Фильтр Lens Blur учитывает достаточно тонкие моменты - например, количество лепестков у диафрагмы, и даже их форму. Увы, он не учитывает главного - гамма компенсацию. Вот результат:


Фильтр Lens Blur, обработка Shape Blur в линейном пространстве и гамма компенсированном, и честная съёмка фигурки на фоне того же заднего плана.

Мало? Вот еще примеры.

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

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

В линейном пространстве к гораздо более лучшим результатам, приводит использование фильтров повышения резкости (sharpen). Обработкой в линейном пространстве можно компенсировать недоэкспонированые снимки и править баланс белого - раньше для этого советовали долго играть "вручную" с кривыми и шаманить с фильтром levels (уровни), и всё равно результат был далёк от совершенства.
Tags: photonotes
Subscribe

  • Продал

    В 2008-м мой адвокат посоветовал взять мне хорошую машину с полным приводом, поставить в неё магнитофон для особой музыки и купить две рубашки…

  • Москва Собянина

    politota.d3.ru/comments/473168/

  • Про телефонный спам

    Участники штаба одного немалоизвестного кандидата, те кто был наблюдателями, а по некоторым данным и не только они жалуются на спам звонки. Можно…

  • Post a new comment

    Error

    default userpic

    Your IP address will be recorded 

    When you submit the form an invisible reCAPTCHA check will be performed.
    You must follow the Privacy Policy and Google Terms of use.
  • 12 comments

  • Продал

    В 2008-м мой адвокат посоветовал взять мне хорошую машину с полным приводом, поставить в неё магнитофон для особой музыки и купить две рубашки…

  • Москва Собянина

    politota.d3.ru/comments/473168/

  • Про телефонный спам

    Участники штаба одного немалоизвестного кандидата, те кто был наблюдателями, а по некоторым данным и не только они жалуются на спам звонки. Можно…