![](https://habrastorage.org/getpro/habr/post_images/46f/dd5/ca7/46fdd5ca76f39ae5fe8b293a0293e2ff.jpg)
Слева: iPhone XS (фото в полном разрешении). Справа: Pixel 3 Night Sight (фото в полном разрешении).
Night Sight – новая возможность приложения Pixel Camera, позволяющая делать чёткие и чистые фотографии при очень низком освещении, даже когда света настолько мало, что и ваш глаз мало что видит. Она работает на основной и фронтальной камере всех трёх поколений телефонов Pixel, и ему не требуется штатива или вспышки. В этой статье мы поговорим о том, почему так сложно делать фотографии при плохом освещении, обсудим вычислительную фотографию и технологии машинного обучения, накладываемых на формат HDR+, и позволяющим Night Sight работать.
Почему при плохом освещении тяжело делать фотографии?
Каждый, делавший фотографии в плохо освещённом месте, знаком с шумом на изображении, выглядящем, как случайные изменения яркости от пикселя к пикселю. Для камер смартфонов, с линзами и фотоматрицами небольшого размера, главным источником шума служит естественное колебание количества фотонов, попадающих в линзу, известное, как дробовой шум. От него страдает любая камера, и он будет присутствовать всегда, даже при идеальном качестве матрицы. Однако матрицы неидеальны, поэтому при преобразовании электрического заряда, возникающего из-за попадания света на пиксели, возникает второй источник шума – шум при чтении. Другие источники также вносят свой вклад в отношение сигнал/шум (SNR), показывающее, какая часть изображения остаётся свободной от шума. К счастью, SNR растёт пропорционально квадратному корню от времени выдержки (или быстрее), поэтому, чем больше выдержка, тем чище картинка. Но при тусклом освещении довольно сложно сохранять неподвижность достаточно долго, чтобы сделать хороший снимок, да и то, что вы фотографируете, возможно, также не будет стоять на месте.
В 2014 году мы представили технологию вычислительной фотографии HDR+, улучшающую эту ситуацию путём получения сразу нескольких снимков, которые потом программно выравниваются и сливаются вместе. Главная цель HDR+ — улучшить динамический диапазон, то есть, возможность получения фотографий в широком спектре условий освещения (например, на закате или в случае портретов с подсветкой сзади). Все поколения телефонов Pixel используют HDR+. Оказывается, слияние нескольких изображений также уменьшает влияние дробового шума и шума чтения, поэтому оно улучшает SNR при неярком свете. Для сохранения чёткости изображений в условиях дрожания рук и передвижения объекта съёмки мы используем короткую выдержку. Мы также отбрасываем части изображения, для которых не найдено хороших способов выравнивания. Это позволяет HDR+ выдавать чёткие изображения, и собирать больше света.
Насколько темно будет «темно»?
Но если получение и слияние нескольких кадров даёт более чёткие фотографии при низком освещении, почему бы не использовать HDR+ для получения нескольких десятков изображений, чтобы мы могли, по сути, видеть в темноте? Начнём с определения «темноты». Фотографы, обсуждая освещённость сцены, часто измеряют её в люксах. Люкс – это количество света, падающего на единицу поверхности, измеряемое в люменах на метр квадратный. Чтобы вы могли примерно представить уровни освещённости, вот вам удобная таблица:
- 30000 – тротуар, освещенный солнцем.
- 10000 – тротуар в ясный день в тени.
- 1000 – тротуар в сумрачный день.
- 300 – освещение в офисе.
- 150 – освещение стола дома.
- 50 – свет в ресторане.
- 20 – ресторан с атмосферным освещением.
- 10 – минимальное освещение, необходимое для нахождения совпадающей пары носков.
- 3 – тротуар в свете фонарей.
- 1 – минимальный свет для того, чтобы читать газету.
- 0,6 – тротуар под полной луной.
- 0,3 – невозможно найти ключи на полу.
- 0,1 – невозможно передвигаться по дому без фонаря.
Камеры смартфонов, делающие одну фотографию, начинают испытывать трудности на уровне освещённости в 30 люкс. Телефоны, делающие несколько кадров, и совмещающие их, могут продержаться до 3 люкс, но в более тёмных условиях не справляются и полагаются на вспышку. С технологией Night Sight мы стремились улучшить качество фото в промежутке от 3 до 0,3 люкс при помощи смартфона, одного нажатия на спуск и без вспышки. Чтобы это сработало, требуется несколько ключевых элементов, самый главный из которых – получение большего количества кадров.
Получаем данные
Увеличение времени выдержки кадра увеличивает SNR и позволяет получать более чистые изображения, но приводит к появлению двух проблем. Во-первых, режим съёмки по умолчанию на телефонах Pixel использует протокол нулевого запаздывания (ZSL), что ограничивает время выдержки. Приложение камеры начинает съёмку, как только вы его запускаете, и хранит фотографии в кольцевом буфере, который постоянно стирает старые кадры, освобождая место под новые. Когда вы нажимаете на спуск, камера отправляет 9-15 последних кадров для обработки ПО HDR+ или Super Res Zoom. Это позволяет вам запечатлеть именно тот момент, который вам нужен – отсюда и «нулевая задержка спуска». Однако поскольку мы, помогая вам прицелиться, показываем эти изображения на экране, HDR+ ограничивает максимальную длину выдержки в 66 мс, вне зависимости от уровня освещённости, что позволяет видоискателю поддерживать частоту не менее 15 кадров/сек. Для более тусклых сцен, где необходима более длинная выдержка, Night Sight использует технологию положительной задержки спуска (PSL), и ждёт нажатия кнопки перед тем, как начать делать фотографии. Чтобы использовать PSL, вам надо держать телефон неподвижно некоторое время после нажатия на кнопку, однако этот режим позволяет увеличивать выдержку, улучшая SNR при худшей освещённости.
Вторая проблема увеличения времени выдержки на кадр – смазывание, возникающее из-за дрожания рук или движения объектов сцены. Оптическая стабилизация изображения (ОСИ), имеющаяся у Pixel 2 и 3, уменьшает влияние тряски для средней выдержки (до 1/8 с), но не помогает в случае более длительных выдержек или движущихся объектов. Для борьбы с размытием, неподвластным ОСИ, в Pixel 3 по умолчанию включён режим «измерения движения» [motion metering], использующий оптический поток для измерения недавних движений сцены и выбора времени выдержки, минимизирующего размытие. Pixel 1 и 2 не используют такой режим по умолчанию, однако, все три телефона используют эту технологию в режиме Night Sight, увеличивая время выдержки на кадр вплоть до 333 мс в отсутствии движения. У Pixel 1, у которого ОСИ нет, мы увеличиваем время выдержки не так сильно (а для сэлфи-камер, у которых нет ОСИ, увеличение будет ещё более скромное). Если камеру стабилизировать (прислонить к стене, поставить на штатив), выдержка каждого кадра может быть увеличена вплоть до секунды. Кроме варьирования покадровой выдержки мы варьируем и количество кадров, от 6, если телефон на штативе, до 15, если съёмка ведётся с рук. Эти ограничения кадра предотвращают усталость пользователя (и необходимость в кнопке «отмена»). Так что, в зависимости от того, какой из телефонов Pixel у вас, выбора камеры, дрожания рук, движения и яркости сцены, режим Night Sight делает от 15 кадров с выдержкой в 1/15 с или менее, до 6 кадров с выдержкой вплоть до 1 сек.
Конкретный пример использования короткой выдержки при обнаружении движения:
![](https://habrastorage.org/getpro/habr/post_images/317/cfb/246/317cfb2460b923b22e4d5242004c3015.gif)
Слева: 15 кадров, снятые подряд одним из двух телефонов Pixel 3, расположенных рядом. В центре: снимок в режиме Night Sight с отключённым измерением движения, что заставляет телефон использовать выдержку в 73 мс. Голова собаки размыта. Справа: Night Sight с включением измерением движения, используется выдержка в 48 мс. Размытость заметно меньше.
Пример использования долгой выдержки, когда телефон находится на штативе:
![](https://habrastorage.org/getpro/habr/post_images/ac9/881/84c/ac988184c6c5fce6795438b5846ed87a.jpg)
Слева: часть снимка ночного неба, сделанного с рук при помощи Night Sight (картинка целиком). Руки немного дрожали, поэтому Night Sight выбрал 333 мс × 15 кадров = 5.0 секунд. Справа: снимок со штатива (картинка целиком). Дрожания не зафиксировано, поэтому Night Sight использовал 1.0 с × 6 кадров = 6.0 сек. Небо видно чётче, меньше шума, видно больше звёзд.
Выравнивание и слияние
Идея усреднения кадров с целью уменьшения шума стара, как сама технология цифровых изображений. В астрофотографии это называется exposure stacking [наложение экспозиций]. Хотя сама технология проста, самое трудное – правильно выровнять изображение, когда съёмка ведётся с рук. Мы начали работать с этой темой в 2010 году с приложения Synthcam. Оно постоянно делало фотографии, выравнивало и сливало их в реальном времени при низком разрешении и демонстрировало итоговый результат, который становился тем чётче, чем дольше вы смотрели.
Night Sight использует похожий принцип, однако на полном разрешении матрицы и не в реальном времени. В телефонах Pixel 1 и 2 мы используем алгоритм слияния HDR+, изменённый и подстроенный так, чтобы усилить способность обнаруживать и отвергать неправильно выровненные части кадров даже в очень шумных сценах. На Pixel 3 мы используем Super Res Zoom, который подстраивается в зависимости от того, увеличиваете вы изображение, или нет. И хотя последний был разработан для больших разрешений, он способен и на уменьшение шума, поскольку выдаёт среднее от нескольких сложенных вместе фотографий. Для некоторых ночных сцен Super Res Zoom даёт лучшие результаты, чем HDR+, но ему требуется более скоростной процессор телефона Pixel 3.
Кстати, всё это происходит на телефоне за несколько секунд. Если вы достаточно быстро переключитесь на список фотографий (дождавшись, пока закончится съёмка!), вы сможете увидеть, как изображение «проявляется» по мере того, как HDR+ или Super Res Zoom заканчивают свою работу.
Другие трудности
Хотя основные описанные идеи звучат просто, в условиях отсутствия достаточного освещения некоторые подвохи разработки Night Sight оказались весьма трудными:
1. Автоматический баланс белого (АББ) неправильно работает при низком освещении
Люди хорошо воспринимают цвета вещей даже при цветном освещении (или в солнечных очках), проявляя цветопостоянство. Однако этот процесс часто отказывает, когда мы делаем фото при одном освещении, а рассматриваем в другом; фотография кажется нам подкрашенной. Для исправления этого эффекта восприятия камеры изменяют цвет изображений, чтобы частично или полностью учесть главный цвет подсветки (который иногда называют цветовой температурой), по сути, сдвигая цвета изображения, чтобы казалось, что сцена подсвечена нейтральным белым цветом. Этот процесс называется автоматический баланс белого.
Проблема в том, что эта задача относится к таким, которые математики называют некорректно поставленными. Действительно ли снег, снятый на камеру, был голубым? Или это белый снег, подсвеченный голубым небом? Видимо, последний вариант. Такая двусмысленность усложняет поиск баланса белого. Алгоритм АББ, используемый в режимах, отличных от Night Sight, работает неплохо, но при плохом или цветном освещении (например, натриевыми газоразрядными лампами) тяжело разобрать цвет подсветки.
Для решения этих проблем мы разработали алгоритм АББ на основе обучения, натренированный отличать хорошо сбалансированную картинку от плохо сбалансированной. Когда фото сбалансировано плохо, алгоритм может предложить варианты сдвига цветов, чтобы освещение казалось более нейтральным. Для тренировки алгоритма потребовалось сделать фото множества разных сцен при помощи аппаратов Pixel, и откорректировать их баланс вручную, смотря на фотографию на мониторе с хорошо откалиброванными цветами. За работой алгоритма можно посмотреть, сравнив одну и ту же сцену с плохим освещением, фотографии которой сделаны разными методами при помощи Pixel 3:
![](https://habrastorage.org/getpro/habr/post_images/d99/f38/3d9/d99f383d9d514ba2d240c0161d54eea9.jpg)
Слева: балансировщик в камере по умолчанию не знает, насколько жёлтой была подсветка этой хижины на побережье Ванкувера (полное фото). Справа: наш обучающийся алгоритм справился лучше (полное фото).
2. Разметка оттенков на слишком тёмных сценах
Цель Night Sight – делать фотографии настолько тёмных сцен, что их сложно различать невооружённым глазом – разработать нечто вроде сверхспособности! С этой проблемой связан тот факт, что в условиях плохого освещения люди перестают различать цвета, поскольку колбочки в нашей сетчатке перестают работать, оставляя всё палочкам, не способным различать длины волн света. Ночью сцена не теряет своих цветов, мы просто перестаём их различать. Мы хотим, чтобы фото в Night Sight были цветными – это и часть сверхспособности и возможный повод для другого конфликта. Наконец, у наших палочек ограничена пространственная резкость, поэтому ночью предметы кажутся размытыми. Мы хотим, чтобы фото в Night Sight были чёткими и обладали большим количеством деталей, чем можете различать вы.
К примеру, если поместить зеркалку на штатив и установить очень большую выдержку – несколько минут, или наложить несколько фото с более короткой выдержкой – то ночное фото будет выглядеть, как дневное. В тенях будут различимы детали, сцена будет цветной и чёткой. Посмотрите на фото внизу, сделанное зеркалкой; видны звёзды, значит это должна быть ночь, однако трава зелёная, небо голубое, а луна отбрасывает тени деревьев, выглядящие, как солнечные. Эффект приятный, но не всегда необходимый – а если поделиться таким фото с другом, он будет в недоумении по поводу того, как вы его сделали.
![](https://habrastorage.org/getpro/habr/post_images/379/a71/22b/379a7122b4bf65e1ffbe35a6418f1f94.png)
Йосемитская долина ночью. Canon DSLR, объектив 28mm f/4, выдержка 3 мин, ISO 100 (полное фото)
Художникам уже много сотен лет известно, как сделать, чтобы картина выглядела, как ночная:
![](https://habrastorage.org/getpro/habr/post_images/eb7/e4a/778/eb7e4a7786f8b124dccae552147b46a3.png)
«Философ, объясняющий модель Солнечной системы», Джозеф Райт, 1766 г. Художник использует разные краски, от белой до чёрной, но нарисованная сцена явно тёмная. Как он этого добился? Увеличил контраст, окружил сцену темнотой, зачернил тени, в которых не видно деталей.
В Night Sight мы применяем схожие хитрости, в частности, используя S-образную кривую для разметки оттенков. Однако довольно сложно найти баланс между «волшебной сверхспособностью» и напоминанием о том, в какое время сделано фото. Ниже – фото, которому это частично удалось:
![](https://habrastorage.org/getpro/habr/post_images/4da/f5d/21c/4daf5d21c7fc3676fa6d53450c9dd94d.jpg)
Pixel 3, 6 секунд с Night Sight, на штативе (полное фото)
Насколько темно может быть для съёмки с Night Sight?
При освещении хуже 0,3 люкс начинает отказывать автофокус. Если вам не видны ключи от машины, лежащие на полу, ваш смартфон тоже не может сфокусироваться. Для этого мы добавили в режим Night Sight на телефоне Pixel 3 две кнопки ручной фокусировки: «Близко» фокусируется на расстоянии чуть более метра, «Далеко» – на 4 метрах. Последнее – это гиперфокальное расстояние объектива, то есть всё, что находится на расстоянии от половины (2 м) до бесконечности, должно попасть в фокус. Мы также работаем над улучшением способности Night Sight к автофокусу при низком освещении. Вы всё ещё можете делать прекрасные фото при освещении ниже 0,3 люкс и даже астрофотографию, как демонстрируется в этой статье, но для этого понадобится трипод, ручная фокусировка и специальное приложение, использующее Android Camera2 API.
Насколько далеко мы можем зайти? В конце концов при определённом уровне освещения шум чтения затмевает фотоны, собираемые датчиком. Есть и другие источники шума, включая темновой ток, увеличивающийся пропорционально выдержке и зависящий от температуры. Биологи во избежание таких эффектов охлаждают свои фотоаппараты до температур ниже -20 °C для получения фотографий флюоресцентных животных – но мы не рекомендуем проделывать это с телефонами Pixel! Слишком шумные изображения также сложно выравнивать. Даже если бы мы решили все эти проблемы, ветер дует, деревья качаются, а звёзды и облака двигаются. Делать фотографии с очень большой выдержкой тяжело.
Как выжать максимум из Night Sight
Night Sight не только делает крутые фотки при низком освещении: его просто интересно использовать, поскольку он делает снимки даже тогда, когда вы почти ничего не видите. Мы выводим на экран изображение чипа, когда сцена настолько тёмная, что при использовании Night Sight фото получится лучше – но не ограничивайтесь только этими случаями. Сразу после заката, на концерте, в городских условиях Night Sight делает чистые фото с низким уровнем шума и делает их ярче реальности. Вот несколько примеров фото, полученных при помощи Night Sight, и А/Б сравнения. А вот советы по использованию Night Sight:
- Night Sight не работает в полной темноте, поэтому выбирайте сцены с небольшим уровнем освещения.
- Мягкое равномерное освещение лучше резкого, создающего тёмные тени.
- Во избежание бликов пытайтесь держать источники яркого света за пределами поля зрения.
- Для увеличения выдержки нажмите на изображения объектов, и сдвиньте ползунок выдержки. Ещё раз нажмите для отмены.
- Для уменьшения выдержки сделайте фото и затемните его в редакторе фотографий; шума будет меньше.
- Если сцена настолько тёмная, что фокусировка не работает, нажмите на контрастной границе или на границе источника света.
- Если и это не сработает, используйте кнопки «Близко» и «Далеко».
- Для максимизации чёткости прислоните телефон к стене или дереву, положите его на стол или камень.
- Night Sight работает и для сэлфи в A/B album, с возможностью подсветки экраном.
![](https://habrastorage.org/getpro/habr/post_images/dc1/7c6/7b4/dc17c67b43c45b2f7d739e6d0bea1a2f.png)
Кнопки ручной фокусировки (Pixel 3 only).
Лучше всего Night Sight работает на Pixel 3. Мы сделали его и для Pixel 2, и для оригинального Pixel, хотя на последнем используется выдержка меньшей длительности из-за отсутствия оптической стабилизации. Также автоматический балансировщик белого натренирован на Pixel 3, поэтому на более старых телефонах он будет работать менее точно. Кстати, мы делаем видоискатель в режиме Night Sight ярче, чтобы вам проще было прицеливаться, однако он работает с выдержкой в 1/15 с, поэтому будет шумным и не будет давать представления о качестве итоговой фотографии. Поэтому дайте ему шанс – прицельтесь и нажмите на спуск. Часто вы будете приятно удивлены!