Конвейеры формирования изображений. Часть 3: Программная обработка изображения. denoising.. denoising. JPEG.. denoising. JPEG. lut.. denoising. JPEG. lut. rgb.. denoising. JPEG. lut. rgb. srgb.. denoising. JPEG. lut. rgb. srgb. цвет.. denoising. JPEG. lut. rgb. srgb. цвет. шумоподавление.

Всем привет! Это Егор Ершов, руководитель группы «Цветовая вычислительная фотография» в AIRI и заведующий сектором репродукции и синтеза цвета ИППИ РАН, и мы продолжаем разговаривать про конвейеры формирования изображений. Такие конвейеры запускаются каждый раз, когда вы нажимаете на кнопку спуска вашей камеры. 

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

Приятного чтения!

Конвейеры формирования изображений. Часть 3: Программная обработка изображения - 1

Стилизация и наложение фильтров

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

Если мы хотим выделить цвета кожи, мы выбираем один фильтр, если мы хотим больше и естественнее передавать цвета растительности — другой. M. Brown — Understanding color and your camera. London Imaging Meeting. 2020.

Если мы хотим выделить цвета кожи, мы выбираем один фильтр, если мы хотим больше и естественнее передавать цвета растительности — другой. M. Brown — Understanding color and your camera. London Imaging Meeting. 2020.

Как задавать такие фильтры? Самый общий, но в то же время самый тяжеловесный способ — это использовать трёхмерную таблицу поиска (lookup table, LUT). В этом подходе каждому значению исходного цвета пикселя задаётся некоторый целевой цвет. Задаётся вручную, дизайнерами и фотографами, которые проектируют LUT под стиль конкретного производителя. LUT’ы лишены произвола и максимально точно передают задумку дизайнера, однако они работают медленно и занимают много памяти, что для некоторых устройств вроде смартфона просто не доступно. 

Более простой альтернативой является использование различных кривых тонов (tone curves). Эти кривые в общем виде определяют, как должно преобразоваться значение в каждом канале в зависимости от его исходного значения. Как правило, это какие‑то нелинейные функции, похожие на функции гамма‑коррекции, но совершенно необязательно монотонные. Они позволяют, с одной стороны, сделать лучше контраст в наиболее яркой и наблюдаемой зоне, а с другой, сделать темнее тёмные зоны и менее зашкаленными светлые зоны. Их можно задавать как три различных 1D LUT, что гораздо компактнее и быстрее в применении по сравнению с одной 3D LUT.

Правильный применённый стиль способен существенно улучшить снимок. M. Brown — Understanding color and your camera. London Imaging Meeting. 2020.

Правильный применённый стиль способен существенно улучшить снимок. M. Brown — Understanding color and your camera. London Imaging Meeting. 2020.

Есть и другие способы преобразовывать и улучшать изображение, в том числе двумерные. Чтобы построить их, достаточно пройтись по RGB‑треугольнику и посмотреть, насколько сильно сдвигается цвет от исходного значения в итоговое. Можно убедиться, что разные стили у разных производителей могут сильно отличаться. 

Двумерные карты преобразований цветов для разных стилей у разных камер, цвет на шкале кодирует величину сдвига. Для нормального фильтра почти ничего не меняется, а для пейзажной съёмки сдвиги сильные.M. Brown — Understanding color and your camera. London Imaging Meeting. 2020.

Двумерные карты преобразований цветов для разных стилей у разных камер, цвет на шкале кодирует величину сдвига. Для нормального фильтра почти ничего не меняется, а для пейзажной съёмки сдвиги сильные.M. Brown — Understanding color and your camera. London Imaging Meeting. 2020.

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

Борьба с шумами

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

Простейший алгоритм шумоподавления и повышения резкости можно описать с помощью схемы, приведённой на рисунке ниже:

Конвейеры формирования изображений. Часть 3: Программная обработка изображения - 5

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

Пример работы алгоритма шумоподавления. M. Brown — Understanding color and your camera. London Imaging Meeting. 2020.
Пример работы алгоритма шумоподавления. M. Brown — Understanding color and your camera. London Imaging Meeting. 2020.

Описанный подход является классическим в обработке изображений, можно даже сказать примитивным. Это далеко не state of the art в своей области, но он, тем не менее, позволяет даже на довольно сложных сценах получать нормальные результаты и улучшать финальный пользовательский опыт.

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

Эволюция шумоподавления. Mauricio Delbracio, Damien Kelly, Michael S. Brown, Peyman Milanfar — Mobile Computational Photography: A Tour.

Эволюция шумоподавления. Mauricio Delbracio, Damien Kelly, Michael S. Brown, Peyman Milanfar — Mobile Computational Photography: A Tour.

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

Цветовые пространства

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

Как уже упоминал в одной из прошлых статей, наиболее распространенным стандартом на сегодня является стандарт sRGB. В 90-х годах прошлого века он был популяризован и распространен силами компании Microsoft и, конечно, сейчас он потихонечку отходит на второй план из‑за малости цветового охвата. Несмотря на это, он все ещё очень популярен, и большое количество контента производится, передается и хранится с использованием именно этого стандарта. 

И всё же ему на смену приходят новые разработки, например, DCI‑P3 от Apple, который используется даже в продуктах конкурентов: Samsung, Huawei и остальных. Развиваются и другие стандарты, см рисунок ниже:

Конвейеры формирования изображений. Часть 3: Программная обработка изображения - 8

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

Сжатие в JPEG

Традиционным методом сжать изображение остаётся стандарт JPEG. Как и в истории с sRGB, зарождение и популяризация JPEG приходится на 90-е годы, и по сей день он остаётся наиболее популярным в своей области. Но и его постепенно стараются вытеснять новые методы сжатия, например, HEIC, развиваемый Apple. Давайте коротко рассмотрим, как происходит сжатие в JPEG и при чём тут знания о устройстве зрительной системы человека.

video compression | Byteway

На первом шаге изображение, полученное в каждом канале после дебайринга и всех наших предыдущих операций, преобразуется в новое цветовое пространство YCrCb, где Y отвечает за яркость, а остальные две компоненты — за цветовую или цветностную составляющую этого сигнала. Поскольку известно, что в зрительной системе человека восприятие к изменению яркости гораздо более чувствительно, чем к цвету, JPEG позволяет сильнее сжимать информацию в цветовых компонентах, оставляя не тронутую информацию в яркостных. Мы фактически обманываем наш мозг, заставляя его думать, что цвета у нас столько же.

Дальше изображение разбивается на блоки пикселей 8 на 8, затем все это квантизуется, параметризуется и проходит через кодирование Хаффмана. После этого уже закодированное изображение помещается в соответствующий контейнер и таким образом хранится. Управляя параметрами сжатия — детализацией света, числом компонент DCT, размером префиксного дерева и другим, — можно влиять на баланс между размером и качеством. 

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

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


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

Автор: createcolor

Источник