Почему и как Google Camera снимает так классно ночью? Пытаемся разобраться!
В феврале 2016 года программист из команды Google Dream Флориан Кайнц делает потрясающий ночной снимок моста Золотые ворота на свой верный зеркальный фотоаппарат и демонстрирует его своим коллегам.
— Красота, браво! — восхищаются коллеги из Daydream. И только один дерзкий паренёк из команды Gcam говорит: «А почему бы тебе не сделать такую на фотографию на телефон?»
Флориан воспринимает этот комментарий как вызов! Он немедленно открывает ноутбук и, строка за строкой, начинает писать свою версию приложения Google Camera, в которой можно будет вручную задирать ISO и снимать серию аж до 64 кадров с 4 секундной выдержкой за раз!
Сделав это, он хватает в руки Nexus 6P, свой верный штатив и мчится навстречу мраку ночной калифорнии. Вернувшись домой он вручную обрабатывает полученные серии снимков и добивается феноменального результата.
Это триумф! Коллеги ликуют!
И только из тёмного угла, освещенного одной лишь свечой, содрогая пламя, звучит знаменитый баритон главы подразделения Gcam Марка Левоя: «Это всё фигня! Я тут приложение написал SeeInTheDark называется, оно позволяет делать такие же снимки но без штатива и без всяких мучений с настройками! Давайте-ка добавим такой режим в Google Камеру!
Вероятно, именно так зародилась идея сделать ночной режим в камере Pixel 3. Хоте это был не первый смартфон с такой опцией. Google своей разработкой задали новый стандарт ночной мобильной фотографии. И сейчас это есть почти у всех от Xiaomi до даже iPhone. Так давайте же разберёмся, что такого революционного в технологии Night Sight!
Тем интереснее, что последние слухи про Pixel 4 и утечки приложения Google Camera 7.0 намекают что в новой камере будет серьезный упор на ночную съёмку! Это второй материал из серии про магию Google, подготовленный нами совместно с Антоном Евстратенко (спасибо, бро!).
Сложности
C одной стороны идея ночного режима в камере Pixel лежала на поверхности. Что тут сложного? Берёшь и без того классный алгоритм HDR+, про который мы рассказывали в одном из недавних материалов, да увеличиваешь выдержку каждого снимка. Вот тебе и ночная фотография!
Но, как вы помните по прошлой статье — ключевой особенностью и вообще инновационной идеей алгоритма было то, что он склеивает недосвеченные фотографии с короткой выдержкой. Поэтому если увеличить выдержку, во-первых сложно будет что-то склеить, ведь пройдёт слишком много времени между кадрами. Во-вторых, нужно чтобы это как-то работало при съёмке с рук. Поэтому перед инженерами Google встали две ключевые проблемы:
- Как бы сделать так, чтобы на сенсор поступало больше света, но при этом чтобы фотографии не смазывались.
- Как это всё потом склеить?
Смазывание
Начнём с первой проблемы. Очевидно, что стандартного замера выдержки исходя из яркости сцены в данном случае будет недостаточно. Ведь нам нужно получить сцену ярче, чем мы видим. Если мы вообще что-то видим!!! А потом, ещё и не смазать всё к чертям! Поэтому ребята из Google сделали абсолютно гениальную вещь! Они стали “измерять движение” в кадре на основании оптического потока сцены. Согласен — звучит как-то непонятно и слишком сложно. Давайте, объясню попроще.
Условно говоря, камера измеряет насколько сильно движутся объекты в кадре, определяя насколько сдвинулись пиксели в сравнении с предыдущими кадрами, если сильно — берётся выдержка покороче, если движения в кадре нет — длиннее.
При этом ещё учитывается тряска рук: используются данные с акселерометра и гироскопа, чем больше тряска тем — короче выдержка.
Получив данные о движении в кадре и тряске, алгоритм определяет оптимальную выдержку. И это можно проверить в приложении Google Camera.
При съёмке с рук максимальная выдержка ограничивается 1/15 секунды. А если камера неподвижна, например стоит на штативе, то выдержка может увеличится аж до 1 секунды. Поэтому, дружище, возьми свой тремор под контроль — чем меньше тряски — тем выше качество!
Отлично! За счёт более длинной выдержки мы получаем больше света, из-за, чего ещё и упало —количество шумов. При этом объекты в кадре не размыты! Проблема решена.
Склеивание
Теперь оставалось решить проблему со склейкой полученных кадров. Очевидно, что чем больше выдержка, тем больше шансов, что кадры будут отличаться, а значит придется отбрасывать больше неудачных участков со вспомогательных кадров.
Поэтому, при съёмке с рук камера делает целых 15 снимков и в обработку попадают все 15, а не 7-9 как в обычном HDR+, что даёт больше материала для склейки.
При этом, опять же, если камера неподвижна, то делается только 6 снимков, но большей выдержкой.
Конечно, такой подход не идеальный и на подвижных объектах в кадре всегда можно заметь больше шума. Но это мелочи можно заметить, только если уже совсем вглядываться в каждый пиксель.
Баланс белого
На этом проблемы с ночным режимом не закончились. Человеческий глаз, а точнее мозг, очень хорошо справляется с определением баланса белого, почти в любых условиях освещения мы видим цвет объекта примерно одинаково. Это называется цветопостоянство. Джентльмены в солнцезащитных очках в ночных клубах подтвердят.
Так вот, у современных камер с этим дела обстоят сильно хуже. И если при хорошем освещении камеры неплохо справляются, то ночью определить, что снег желтый или на него просто светит желтый фонарь для камеры бывает сложновато. Впрочем и люди иногда тоже ошибаются в такой ситуации. И здесь команде Gcam на помощь пришли нейросети и безумное упорство инженеров.
Они сделали тысячи, возможно даже десятки тысяч снимков на телефоны Pixel в разных сценах и условиях освещенности. И потом вручную выставили правильный баланс белого для каждого снимка на хорошо откалиброванных мониторах.
На основе этих данных они обучили нейросеть правильно определять баланс белого уже без помощи человека. В итоге им удалось сделать алгоритм который на 20% меньше ошибается и работает до 3000 раз быстрее, чем предыдущий!
При этом алгоритм всё время учится становиться лучше, и на Pixel 4, исходя из планов Google он должен стать основным во всех режимах.
И раз уж мы заговорили про Pixel 4 и слухи.
Судя по утекшим промо-роликам, а также приложению Google Camera 7.0, в новом смартфоне нас ждёт более прокачанный, более мощный, ну вообще мозговзрывающий Night Sight 2.0 c поддержкой астро-фотографии! О чём мечтал наш друг Флориан с первого дня!
Основное нововведение будет видимо в том, что смартфон еще лучше будет подстраивать выдержку под тряску рук или штатив. Я потестировал программу и не могу сказать, что результат шокировал, но звезды видно. Как и шумы, но думаю дело в нефинальной прошивке. Выпускать в таком виде явно не будут. Но пока об этом рано судить, давайте подождем официальной презентации Google 15 октября и увидим всё своими глазами.
Ещё раз благодарим Антона Евстратенко за помощь в создании материала