Предыдущая статья: субдискретизация.

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

В большинстве случаев, по крайней мере на момент написания этой статьи, каждый канал готового к публикации изображения описывается одним байтом на отсчет. Этого вполне достаточно для нормального восприятия изображения человеческим глазом. Давайте убедимся в этом.

Изображение в формате PNG (для исключения потерь информации), цветовое пространство RGB.Слева — 8 бит на канал, справа — 4 бита на канал.
Изображение в формате PNG (для исключения потерь информации), цветовое пространство RGB.
Слева — 8 бит на канал, справа — 4 бита на канал.

Мониторы и глаза у всех разные, поэтому возможно несколько вариантов:

  1. Левая часть картинки выглядит для вас естественно. На правой небо безнадежно испорчено, однако, обратите внимание, паруса и море почти не пострадали. Вероятнее всего, это справедливо для большинства читателей.

  2. Вы видите явную «полосатость» неба в левой половине. Тут две возможности:

    а) у вас профессиональный монитор и очень хорошее зрение, поздравляю!,

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

Кадр сделан на вполне приличный фотоаппарат в формате RAW с глубиной цвета 12 бит, с правильной экспозицией, поэтому вариант изначально дефектной картинки мы с негодованием отметаем.

Гистограммы показанной выше фотографии. Плавные области соответствуют левой половине изображения, тонкие пики — правой.
Гистограммы показанной выше фотографии. Плавные области соответствуют левой половине изображения, тонкие пики — правой.

Почему же для парусов и моря оказалось достаточно всего 4 бит на канал? Ответ прост: именно в этих областях изображения очень много мелких деталей. Психофизиология восприятия устроена так, что мы не замечаем в этом случае незначительные искажения яркости и оттенка отдельных пикселей. На этом же принципе основан дизеринг — преднамеренное добавление шума для устранения «полосатости».

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

При печати дело обстоит аналогично. В цветовой модели CMYK, используемой в полиграфии, часто ограничиваются шкалой от 0 до 100 в каждом из каналов. При этом не каждая комбинация значений описывает уникальный цвет, условия просмотра с бумаги обычно хуже, чем с экрана (непредсказуемое и неравномерное освещение, дефекты носителя и печати), так что и здесь 8-битного RGB-исходника достаточно. То же и с дорогой качественной фотопечатью: наверное, технически можно создать изображение с большей глубиной цвета, но зритель этого не увидит.

Зачем же тогда вообще нужно больше 8 бит на канал?

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

Иначе обстоит дело при фото- и видеосъемке. Камера не знает, на какой участок изображения следует обратить внимание, и поэтому вынуждена фиксировать всю картину как есть. Если сохранять изображение, полученное с матрицы, с глубиной цвета 8 бит на канал, будет неизбежно потеряна детализация или в светах, или в тенях, а чаще сразу и там, и там. Именно так происходит при сохранении снимков в формате JPEG, и впоследствии никакая дополнительная обработка не позволяет «вытянуть» ранее потерянную информацию.

Если же при съемке задать пониженную контрастность, чтобы в динамический диапазон файла «влезли» и света, и тени, то картинка будет выглядеть блеклой и невыразительной. Потребуется дополнительная обработка, в результате которой середина диапазона яркостей будет растянута, а края сжаты.

Сверху вниз: градиент от черного до белого с глубиной цвета 8 бит, тот же градиент, «растянутый» посередине, и то же самое, но с глубиной цвета 4 бита.
Сверху вниз: градиент от черного до белого с глубиной цвета 8 бит, тот же градиент, «растянутый» посередине, и то же самое, но с глубиной цвета 4 бита.

Если у вас качественный монитор и хорошее зрение, вы увидите разницу между верхней и следующей полосой. Ниже я продублировал ту же ситуацию, но с уменьшенной глубиной цвета для наглядности иллюстрации принципа. Прошу прощения за некоторую математическую неточность, выразившуюся в смещении центра — на ход рассуждений она не влияет. (Фотошоп лучше знает, как должен выглядеть градиент.)

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

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

Для борьбы с этим дефектом исходный материал сохраняют с большей глубиной цвета — 10, 12 и даже 14 бит, в зависимости от технических возможностей оборудования. Обычно это формат RAW для фото и MPEG 10 бит 4:2:2 для видео, хотя видеокамеры среднего и высокого уровня тоже умеют сохранять RAW. Тогда при сохранении готового изображения в 8-битном представлении после обработки градиенты остаются визуально плавными. Важно всю обработку проводить при глубине цвета не меньшей, чем у оригинала, и загрублять данные только при финальном сохранении.

Другое применение большей глубины цвета — HDR, технология, позволяющая сохранить детализацию на небольших по площади участках кадра с очень высокой яркостью. Например, если в кадр попадает Солнце, оно не размазывается в невыразительную кляксу, а остается на изображении точечным источником небольшим кругом, вблизи которого небо имеет более или менее естественный вид. У этой технологии есть несколько разновидностей, но общий принцип одинаков: младшие биты яркостной составляющей используются для описания «нормальной» яркости, которую без проблем воспринимает глаз, а старшие подключаются для очень ярких участков, которые не могут быть слишком большими из-за технологических ограничений (например, слишком высокого потребления энергии и перегрева).

HDR используется не только для отображения на «продвинутых» мониторах и телевизорах, но и в приложениях компьютерной графики для текстур, над которыми при рендеринге сцены совершаются дополнительные операции, и важно не потерять точность, когда результат нормально помещается в 8 бит.

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

И на закуску упомяну ныне экзотический формат, 16 бит на три канала (RGB). Каждый канал получает по 5 бит, что почти эквивалентно правой половине показанной в самом начале фотографии, а оставшийся бит используется как альфа-канал или отдается зеленому, поскольку к нему человеческий глаз наиболее чувствителен. Такая схема широко применялась в системах с недостаточным количеством видеопамяти, и в последние годы встречается редко.

Комментарии (7)


  1. Astroscope
    08.11.2023 15:41

    Левая часть картинки выглядит для вас естественно.

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


    1. GeorgeTudosi Автор
      08.11.2023 15:41
      +2

      А что не так? Левая половина нормальная, правая — испорченная.


      1. Astroscope
        08.11.2023 15:41

        Вроде бы все так. :)


  1. Zara6502
    08.11.2023 15:41
    +3

    а) у вас профессиональный монитор и очень хорошее зрение, поздравляю!,

    У меня вроде бы обычный монитор с матрицей PVA откалиброванный для работы с фото и печати на струйнике. Вижу много разных дефектов которые не видно на TN матрицах, но в вашем примере небо для меня равномерное без дефектов.

    Но у меня есть самописная программа, которая использует какую-то библиотеку по обработке изображений и там я часто дефекты смотрю с помощью фильтра CLAHE, ниже собственно результат фильтра, я им иногда пользуюсь чтобы убрать "квадратные" зоны на градиентах, так как при печати они могут коварны проявиться.

    А вот ниже левую верхнюю часть я обработал размытием гаусса

    И вот оно же с CLAHE


    1. GeorgeTudosi Автор
      08.11.2023 15:41

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

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

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

      Наконец, шум не всегда является дефектом изображения. Обычно разумное количество шума полезно, хоть и съедается компрессией. Я не случайно упомянул в статье дизеринг — он делает градиенты визуально более плавными, даже при 8 битах на канал.


      1. Zara6502
        08.11.2023 15:41

        Ваш фильтр занимается неким преобразованием

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

        не все и не на всех мониторах их увидят

        Да, я мне их не видно.

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

        Ну сравнение идёт в контексте, я же неразрывно работаю и с исходником.


    1. GeorgeTudosi Автор
      08.11.2023 15:41

      Другое дело, что ваш фильтр на первой картинке проявил несовершенство камеры — чуть разное усиление при чтении разных строк, что заметно в виде горизонтальных равноотстоящих друг от друга линий. Это известный тип дефекта, бороться с которым теоретически можно калибровкой, но на практике ни в одном софте я такой функции не видел.