Многие считают камеру Google Pixel лучшей. В плане железа она мало чем отличается от конкурентов — главное в софте. Но обработка изображения ИИ есть и у других производителей. Тем не менее Pixel (даже «бюджетный» 3a) на одном месте всех возил. Давайте разберемся, в чем уникальность обработки фото на Google Pixel, и как поисковик стал королем мобильной фотографии.
В современных мобильных камерах алгоритмы обработки важнее, чем железо. Но когда начинаешь разбираться, понимаешь, что камеру Google конструировали гребаные гении. Сегодня расскажу, как это устроено.
Технология HDR+
Многие из вас помнят, что первый телефон, на котором появился знаменитый режим HDR+ был Nexus 5. Но разрабатывался алгоритм не для него и даже не для смартфонов, а для футуристичных Google Glass.
Всё началось в 2011 году, когда глава экспериментального подразделения Google X Себастьян Трун (Sebastian Thrun) обратил внимание, что большую матрицу и оптику в очки не поставить, а снимать как-то надо. Поэтому, единственным выходом оставалось, улучшить картинку софтом. Для решения этой задачи был приглашен профессор Стэнфордского Университета, эксперт в области вычислительной фотографии — Марк Левой.
Именно он в 2011 году выпустил приложение SynthCam для iPhone 4, которое симулировало размытие фона как в зеркалках. Так себе симулировало будем честны. Марк Левой возглавил команду разработчиков, которые назвали себя Gcam.
При разработке алгоритма было сразу заложено 4 принципа, которые сильно повлияли на развитие вычислительной фотографии:
- Быть мгновенным
На обработку снимка не должно тратиться более нескольких секунд и все вычисления должны проходить локально на устройстве, а не в облаке, например. А значит, алгоритм должен быть простым для вычисления. - Быть автоматическим
Никаких ручных настроек. Пользователь должен получать качественные снимки не задумываясь о тонкостях алгоритма. - Быть естественным
Эффект не должен делать изображение сюрреалистичным, мультяшным. А ночь не должна выглядеть как плохая дневная фотография. Кстати, этот принцип и сейчас заметен: например, Pixel далеко не всегда делает такой ядреный HDR, как конкуренты, хотя мог бы. - Быть консервативным
HDR+ должен рассматриваться как режим по умолчанию, не содержать артефактов, а результат должен быть, как минимум, не хуже чем обычная фотография.
Эти принципы побудили команду Gcam подойти к работе нестандартно, потому как все остальные решения того времени этим принципам не отвечали.
Обычно в мобильной фотографии динамический диапазон расширяют при помощи техники брекетинга (вилки). Делается несколько снимков: один нормальной яркости, один светлее, один темнее. А потом они склеиваются: тени берутся из светлого снимка, света с темного, остальное с обычного. За счёт этого мы получаем расширение ДД, то есть HDR. Сейчас это умеет любой смартфон.
Но у такого метода есть и недостатки. Во-первых, снимки с разной освещенностью и выдержкой сложно склеить между собой, и поэтому возможны артефакты, типа гоустинга. Во-вторых, совсем не решается проблема с шумами, поэтому из-за агрессивного шумоподавления теряются детали и возникает эффект мокрой губки. В-третьих, при таком методе можно сильно переборщить с компрессией теней и света и на выходе получить неестественную, мультяшную картинку. Все эти проблемы, в той или иной степени, по-прежнему встречаются в смартфонах.
Так что же придумали инженеры Gcam? Они решили, что эффективнее будет склеивать между собой снимки не с разной экспозицией, а с одинаковой, причем чуть недоэкспонированные, т.е. темные или недосвеченные. Звучит нелогично! Чем вообще может помочь склейка темных снимков? А откуда взять информацию в тенях? А как это вообще поможет избавиться от шума? И вот тут начинается магия Google.
Начнём с того, что в этом случае, снимки не склеиваются, а как бы накладываются друг на друга, усредняя информацию о цвете при каждом наложении. На этом не всё. Из-за того что снимки делаются с более короткой выдержкой, они получаются чётче, объекты меньше размываются.
Потом, так как снимки одинаковые по яркости и размытию их становится существенно проще склеивать. И, конечно, с короткой выдержкой снимки делаются быстрее, а значит можно сохранить больше кадров за одно и то же время. За счёт усреднения значения каждого пикселя с разных фото, существенно уменьшается шум, но детали сохраняются.
Плюс ко всему, увеличивается глубина цвета с 10 до 14 бит. И это даёт возможность искусственно высветить тени без видимых артефактов! Звучит всё гениально и просто, но на самом деле алгоритм чрезвычайно сложный, потому как он должен работать во всех условиях при съёмке с рук, не сажать мгновенно батарейку и не выдавать артефактов.
Как работает алгоритм
Когда вы запускаете приложение камера, оно начинает непрерывно снимать, загружая в циклический буфер от 15 до 30 фотографий, в зависимости от уровня освещённости. В момент, когда вы делаете снимок, запись прекращается и берутся последние кадры из буфера. Из первых трёх кадров выбирается самый резкий, а потом на него накладываются другие снимки исключая фрагменты которые не изменились. Каждый снимок сравнивается покадрово и все измененные области отсекаются. После получения склеенного кадра в дело вступают всякие улучшатели, убираются шумы, аберрации, дымка, виньетка, повышается контраст, резкость и прочее. В этот момент происходит автобаланс белого, дебаеризация, устранение шумов, тональная компрессия, устранение хроматических аберраций, виньетирования, дымки, сглаживание полутонов, гамма коррекция, повышение контрастности, четкости и насыщенности. И это всё автоматически!
При этом для опытных фотографов и просто любителей повыкручивать фотографии в Adobe Lightroom в Pixel 3 появилась возможность сохранять RAW-файлы, полученные в результате объединения нескольких кадров. Они одновременно сочетают в себе все преимущества вычислительной фотографии и при этом остаётся полная свобода творчества.
Конечно, Google не единственный кто умеет в вычислительную фотографию. Вместе с iPhone XS Apple предоставила свою версию магического алгоритма. Со слов Фила Шиллера, технология работает следующим образом. В циклическом буфере вращается 4 кадра с нормальной экспозицией и 4 промежуточных кадра с пониженной экспозицией, а также 1 светлый кадр с более длинной выдержкой. Далее нейронный движок анализирует все кадры и склеивает удачные фрагменты между собой.
Принцип работы похож на вариант реализации от Google, но за счёт того, что нужно склеить снимки с 3 разными экспозициями, такой алгоритм гораздо сложнее реализовать на практике, не получив артефакты типа гоустинга и агрессивной компрессии цвета. Более того, такой метод теоретически должен быть более затратен для вычисления. Но стоит отдать должное Apple, потому, что они не только успешно это реализовали, но добились вычисления в реальном времени, за счёт плотной интеграции со своим железом. То есть на экране iPhone в камере вы видите то, что получится на фотографии, Google таким похвастаться не может.
Но Google может другое: они реализовали подобный алгоритм и в при съёмке видео вплоть до 30 кадров в секунду, что вообще взрывает мозг!
Итого, преимущества алгоритма от команды Gcam:
- Значительно уменьшаются шумы, практически без потери детализации.
- Почти полное отсутствие артефактов.
- Естественная цветопередача.
- Чёткая краника даже при условии быстрого движения в кадре.
Но у такого подхода, конечно есть недостатки. Во-первых, во время съёмки непонятно, каким получится итоговый снимок, потому как в видоискателе отображается картинка прямиком с матрицы, без особых улучшений. А во-вторых, чтобы посмотреть результат придётся немного подождать пока снимок обработается. И иногда это прям раздражает. Но итоговый результат того стоит!
А если вам интересно поглубже изучить как работает алгоритм полное описание его работы, вплоть до математических формул, есть в свободном доступе на сайте Стэндфордского университета.
За подготовку материала благодарим Антона Евстратенко.