Разработчики из компании Google рассказали, как работает алгоритм в смартфоне Pixel 3, позволяющий ему улучшать качество снимков. Камера пользуется естественным дрожанием рук пользователя и вместо одного снимка делает серию кадров, снятых с немного различающихся ракурсов. После этого алгоритм распознает части изображения со статичными объектами и совмещает несколько снимков для увеличения детализации и яркости. Посвященная алгоритму статья будет представлена на конференции SIGGRAPH 2019.
Обычно смартфоны снимают фотографии, используя один набор заранее определенных параметров снимка, таких как время выдержки и светочувствительность. Кроме того, зачастую после съемки алгоритмы производят базовую обработку, к примеру, увеличивая резкость. Однако в последние годы разработчики стали применять более сложную схему, включающую в себя создание единого кадра из нескольких отдельных. Изначально это применялось для создания HDR-снимков с расширенным динамическим диапазоном. Во время создания HDR-снимка камера быстро создает несколько кадров с разными значениями экспозиции, а затем объединяет их таким образом, чтобы светлые области изображения не были пересвеченными, а темные — не были недосвеченными.
Позднее разработчики смартфонов пошли дальше и стали применять похожий принцип для более сложных задач. К примеру, смартфон Google Pixel 3 имеет функцию цифрового зума и ночной съемки с улучшением изображения благодаря совмещению нескольких кадров. Теперь разработчики из Google опубликовали статью с подробным описанием работы обоих алгоритмов. В основе метода лежит то, что обычно воспринимается как недостаток — дрожание рук во время съемки. Разработчики решили использовать это для съемки серии снимков с немного различающихся ракурсов.
Поскольку в камерах пиксели содержат цветовые фильтры, цвет для каждого пикселя итогового изображения формируется алгоритмически на основании цветов соседних пикселей. Это приводит к неточности, потому что значения цвета на каждом пикселе прогнозируются, а не измеряются напрямую. Чтобы не суммировать ошибку в расчетах цвета для каждого кадра, алгоритм, разработанный в Google, не производит демозаику для исходных изображений и работает с RAW-файлами.
Алгоритм затем накладывает все кадры на единую сетку и начинает обработку. Сначала он разбивает изображение на виртуальные области и работает отдельно с ними, анализируя их статистические отличия от области на исходном кадре, рассчитывая вектора смещений объектов на кадрах из-за движения камеры, а также подбирая ядерные функции для описания массивов пикселей на изображении. В результате алгоритм создает карту, отражающую согласованность областей на кадрах между собой.
Во время окончательной обработки алгоритм производит наложение областей друг на друга и улучшение качества только в том случае, если на карте эта область имеет высокое значение согласованности. Это позволяет улучшить качество для областей со статичными объектами и не создавать артефактов изображения для областей с двигающимися объектами. В результате благодаря использованию съемки с немного различающимися ракурсами алгоритм может достаточно эффективно заменять оптический зум или увеличивать экспозицию ночных снимков без увеличения шума и появления «смазанности».
Ранее Google начала использовать в своих сервисах алгоритм RAISR, повышающий разрешение изображений. Он анализирует контуры объектов на изображении и благодаря этому повышает разрешение без придания изображению «пикселизованности».
Григорий Копиев