Главная » Хабрахабр » [Перевод] Night Sight: как телефоны Pixel видят в темноте

[Перевод] Night Sight: как телефоны Pixel видят в темноте


Слева: iPhone XS (фото в полном разрешении). Справа: Pixel 3 Night Sight (фото в полном разрешении).

Она работает на основной и фронтальной камере всех трёх поколений телефонов Pixel, и ему не требуется штатива или вспышки. Night Sight – новая возможность приложения Pixel Camera, позволяющая делать чёткие и чистые фотографии при очень низком освещении, даже когда света настолько мало, что и ваш глаз мало что видит. В этой статье мы поговорим о том, почему так сложно делать фотографии при плохом освещении, обсудим вычислительную фотографию и технологии машинного обучения, накладываемых на формат HDR+, и позволяющим Night Sight работать.

Почему при плохом освещении тяжело делать фотографии?

Каждый, делавший фотографии в плохо освещённом месте, знаком с шумом на изображении, выглядящем, как случайные изменения яркости от пикселя к пикселю. Для камер смартфонов, с линзами и фотоматрицами небольшого размера, главным источником шума служит естественное колебание количества фотонов, попадающих в линзу, известное, как дробовой шум. От него страдает любая камера, и он будет присутствовать всегда, даже при идеальном качестве матрицы. Однако матрицы неидеальны, поэтому при преобразовании электрического заряда, возникающего из-за попадания света на пиксели, возникает второй источник шума – шум при чтении. Другие источники также вносят свой вклад в отношение сигнал/шум (SNR), показывающее, какая часть изображения остаётся свободной от шума. К счастью, SNR растёт пропорционально квадратному корню от времени выдержки (или быстрее), поэтому, чем больше выдержка, тем чище картинка. Но при тусклом освещении довольно сложно сохранять неподвижность достаточно долго, чтобы сделать хороший снимок, да и то, что вы фотографируете, возможно, также не будет стоять на месте.

Главная цель HDR+ — улучшить динамический диапазон, то есть, возможность получения фотографий в широком спектре условий освещения (например, на закате или в случае портретов с подсветкой сзади). В 2014 году мы представили технологию вычислительной фотографии HDR+, улучшающую эту ситуацию путём получения сразу нескольких снимков, которые потом программно выравниваются и сливаются вместе. Оказывается, слияние нескольких изображений также уменьшает влияние дробового шума и шума чтения, поэтому оно улучшает SNR при неярком свете. Все поколения телефонов Pixel используют HDR+. Мы также отбрасываем части изображения, для которых не найдено хороших способов выравнивания. Для сохранения чёткости изображений в условиях дрожания рук и передвижения объекта съёмки мы используем короткую выдержку. Это позволяет HDR+ выдавать чёткие изображения, и собирать больше света.

Насколько темно будет «темно»?

Но если получение и слияние нескольких кадров даёт более чёткие фотографии при низком освещении, почему бы не использовать HDR+ для получения нескольких десятков изображений, чтобы мы могли, по сути, видеть в темноте? Начнём с определения «темноты». Фотографы, обсуждая освещённость сцены, часто измеряют её в люксах. Люкс – это количество света, падающего на единицу поверхности, измеряемое в люменах на метр квадратный. Чтобы вы могли примерно представить уровни освещённости, вот вам удобная таблица:

  • 30000 – тротуар, освещенный солнцем.
  • 10000 – тротуар в ясный день в тени.
  • 1000 – тротуар в сумрачный день.
  • 300 – освещение в офисе.
  • 150 – освещение стола дома.
  • 50 – свет в ресторане.
  • 20 – ресторан с атмосферным освещением.
  • 10 – минимальное освещение, необходимое для нахождения совпадающей пары носков.
  • 3 – тротуар в свете фонарей.
  • 1 – минимальный свет для того, чтобы читать газету.
  • 0,6 – тротуар под полной луной.
  • 0,3 – невозможно найти ключи на полу.
  • 0,1 – невозможно передвигаться по дому без фонаря.

Телефоны, делающие несколько кадров, и совмещающие их, могут продержаться до 3 люкс, но в более тёмных условиях не справляются и полагаются на вспышку. Камеры смартфонов, делающие одну фотографию, начинают испытывать трудности на уровне освещённости в 30 люкс. Чтобы это сработало, требуется несколько ключевых элементов, самый главный из которых – получение большего количества кадров. С технологией 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 1 и 2 не используют такой режим по умолчанию, однако, все три телефона используют эту технологию в режиме Night Sight, увеличивая время выдержки на кадр вплоть до 333 мс в отсутствии движения. Для борьбы с размытием, неподвластным ОСИ, в Pixel 3 по умолчанию включён режим «измерения движения» [motion metering], использующий оптический поток для измерения недавних движений сцены и выбора времени выдержки, минимизирующего размытие. Если камеру стабилизировать (прислонить к стене, поставить на штатив), выдержка каждого кадра может быть увеличена вплоть до секунды. У Pixel 1, у которого ОСИ нет, мы увеличиваем время выдержки не так сильно (а для сэлфи-камер, у которых нет ОСИ, увеличение будет ещё более скромное). Эти ограничения кадра предотвращают усталость пользователя (и необходимость в кнопке «отмена»). Кроме варьирования покадровой выдержки мы варьируем и количество кадров, от 6, если телефон на штативе, до 15, если съёмка ведётся с рук. Так что, в зависимости от того, какой из телефонов Pixel у вас, выбора камеры, дрожания рук, движения и яркости сцены, режим Night Sight делает от 15 кадров с выдержкой в 1/15 с или менее, до 6 кадров с выдержкой вплоть до 1 сек.

Конкретный пример использования короткой выдержки при обнаружении движения:

В центре: снимок в режиме Night Sight с отключённым измерением движения, что заставляет телефон использовать выдержку в 73 мс.
Слева: 15 кадров, снятые подряд одним из двух телефонов Pixel 3, расположенных рядом. Справа: Night Sight с включением измерением движения, используется выдержка в 48 мс. Голова собаки размыта. Размытость заметно меньше.

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

Руки немного дрожали, поэтому Night Sight выбрал 333 мс × 15 кадров = 5.
Слева: часть снимка ночного неба, сделанного с рук при помощи Night Sight (картинка целиком). Справа: снимок со штатива (картинка целиком). 0 секунд. 0 с × 6 кадров = 6. Дрожания не зафиксировано, поэтому Night Sight использовал 1. Небо видно чётче, меньше шума, видно больше звёзд. 0 сек.

Выравнивание и слияние

Идея усреднения кадров с целью уменьшения шума стара, как сама технология цифровых изображений. В астрофотографии это называется exposure stacking [наложение экспозиций]. Хотя сама технология проста, самое трудное – правильно выровнять изображение, когда съёмка ведётся с рук. Мы начали работать с этой темой в 2010 году с приложения Synthcam. Оно постоянно делало фотографии, выравнивало и сливало их в реальном времени при низком разрешении и демонстрировало итоговый результат, который становился тем чётче, чем дольше вы смотрели.

В телефонах Pixel 1 и 2 мы используем алгоритм слияния HDR+, изменённый и подстроенный так, чтобы усилить способность обнаруживать и отвергать неправильно выровненные части кадров даже в очень шумных сценах. Night Sight использует похожий принцип, однако на полном разрешении матрицы и не в реальном времени. И хотя последний был разработан для больших разрешений, он способен и на уменьшение шума, поскольку выдаёт среднее от нескольких сложенных вместе фотографий. На Pixel 3 мы используем Super Res Zoom, который подстраивается в зависимости от того, увеличиваете вы изображение, или нет. Для некоторых ночных сцен Super Res Zoom даёт лучшие результаты, чем HDR+, но ему требуется более скоростной процессор телефона Pixel 3.

Если вы достаточно быстро переключитесь на список фотографий (дождавшись, пока закончится съёмка!), вы сможете увидеть, как изображение «проявляется» по мере того, как HDR+ или Super Res Zoom заканчивают свою работу. Кстати, всё это происходит на телефоне за несколько секунд.

Другие трудности

Хотя основные описанные идеи звучат просто, в условиях отсутствия достаточного освещения некоторые подвохи разработки Night Sight оказались весьма трудными:

1. Автоматический баланс белого (АББ) неправильно работает при низком освещении

Люди хорошо воспринимают цвета вещей даже при цветном освещении (или в солнечных очках), проявляя цветопостоянство. Однако этот процесс часто отказывает, когда мы делаем фото при одном освещении, а рассматриваем в другом; фотография кажется нам подкрашенной. Для исправления этого эффекта восприятия камеры изменяют цвет изображений, чтобы частично или полностью учесть главный цвет подсветки (который иногда называют цветовой температурой), по сути, сдвигая цвета изображения, чтобы казалось, что сцена подсвечена нейтральным белым цветом. Этот процесс называется автоматический баланс белого.

Действительно ли снег, снятый на камеру, был голубым? Проблема в том, что эта задача относится к таким, которые математики называют некорректно поставленными. Видимо, последний вариант. Или это белый снег, подсвеченный голубым небом? Алгоритм АББ, используемый в режимах, отличных от Night Sight, работает неплохо, но при плохом или цветном освещении (например, натриевыми газоразрядными лампами) тяжело разобрать цвет подсветки. Такая двусмысленность усложняет поиск баланса белого.

Когда фото сбалансировано плохо, алгоритм может предложить варианты сдвига цветов, чтобы освещение казалось более нейтральным. Для решения этих проблем мы разработали алгоритм АББ на основе обучения, натренированный отличать хорошо сбалансированную картинку от плохо сбалансированной. За работой алгоритма можно посмотреть, сравнив одну и ту же сцену с плохим освещением, фотографии которой сделаны разными методами при помощи Pixel 3: Для тренировки алгоритма потребовалось сделать фото множества разных сцен при помощи аппаратов Pixel, и откорректировать их баланс вручную, смотря на фотографию на мониторе с хорошо откалиброванными цветами.

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

2. Разметка оттенков на слишком тёмных сценах

Цель Night Sight – делать фотографии настолько тёмных сцен, что их сложно различать невооружённым глазом – разработать нечто вроде сверхспособности! С этой проблемой связан тот факт, что в условиях плохого освещения люди перестают различать цвета, поскольку колбочки в нашей сетчатке перестают работать, оставляя всё палочкам, не способным различать длины волн света. Ночью сцена не теряет своих цветов, мы просто перестаём их различать. Мы хотим, чтобы фото в Night Sight были цветными – это и часть сверхспособности и возможный повод для другого конфликта. Наконец, у наших палочек ограничена пространственная резкость, поэтому ночью предметы кажутся размытыми. Мы хотим, чтобы фото в Night Sight были чёткими и обладали большим количеством деталей, чем можете различать вы.

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

Canon DSLR, объектив 28mm f/4, выдержка 3 мин, ISO 100 (полное фото)
Йосемитская долина ночью.

Художникам уже много сотен лет известно, как сделать, чтобы картина выглядела, как ночная:

Художник использует разные краски, от белой до чёрной, но нарисованная сцена явно тёмная.
«Философ, объясняющий модель Солнечной системы», Джозеф Райт, 1766 г. Увеличил контраст, окружил сцену темнотой, зачернил тени, в которых не видно деталей. Как он этого добился?

Однако довольно сложно найти баланс между «волшебной сверхспособностью» и напоминанием о том, в какое время сделано фото. В Night Sight мы применяем схожие хитрости, в частности, используя S-образную кривую для разметки оттенков. Ниже – фото, которому это частично удалось:


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, с возможностью подсветки экраном.


Кнопки ручной фокусировки (Pixel 3 only).

Мы сделали его и для Pixel 2, и для оригинального Pixel, хотя на последнем используется выдержка меньшей длительности из-за отсутствия оптической стабилизации. Лучше всего Night Sight работает на Pixel 3. Кстати, мы делаем видоискатель в режиме Night Sight ярче, чтобы вам проще было прицеливаться, однако он работает с выдержкой в 1/15 с, поэтому будет шумным и не будет давать представления о качестве итоговой фотографии. Также автоматический балансировщик белого натренирован на Pixel 3, поэтому на более старых телефонах он будет работать менее точно. Часто вы будете приятно удивлены! Поэтому дайте ему шанс – прицельтесь и нажмите на спуск.


Оставить комментарий

Ваш email нигде не будет показан
Обязательные для заполнения поля помечены *

*

x

Ещё Hi-Tech Интересное!

[Перевод] CG-моделинг 80 уровня: фотореалистичные персонажи real-time в Unreal

На днях тестировали новую графику в War Robots и получили уйму положительного фидбека от игроков. И хотя речь о мобильной графике, места для роста там очень много. С десктопом еще интереснее. Если раньше на рендер качественной сцены с фотореалистичными моделями ...

[Перевод] IntelliCode теперь и в TypeScript/JavaScript

На Build 2018 мы анонсировали Visual Studio IntelliCode: набор AI-инструментов, которые способствуют более качественной разработке. В сотрудничестве с командой IntelliCode мы рады сообщить, что теперь IntelliCode доступен пользователям TypeScript/JavaScript через расширение IntelliCode для VS Code. Что такое IntelliCode? IntelliCode дополняет ...