Вычислительная Фотография
*Оригинал статьи размещен на сайте Вастрик.ру и опубликован на 3DNews с разрешения автора. Мы приводим полный текст статьи, за исключением огромного количества ссылок — они пригодятся тем, кто всерьез заинтересовался темой и хотел бы изучить теоретические аспекты вычислительной фотографии более глубоко, но для широкой аудитории мы сочли этот материал избыточным.*
Сегодня ни одна презентация смартфона не обходится без облизывания его камеры. Каждый месяц мы слышим об очередном успехе мобильных камер: Google учит Pixel снимать в темноте, Huawei зумить как бинокль, Samsung вставляет лидар, а Apple делает самые круглые в мире уголочки. Мало где сейчас так жирно текут инновации.
Зеркалки при этом как будто топчутся на месте. Sony ежегодно осыпает всех новыми матрицами, а производители лениво обновляют последнюю цифру версии и продолжают расслабленно курить в сторонке. У меня на столе лежит зеркалка за $3000, но в путешествия я беру айфон. Почему?
Как говорил классик — я вышел в интернет с этим вопросом. Там обсуждают какие-то «алгоритмы» и «нейросети», понятия не имея, как конкретно они влияют на фотографию. Журналисты громко зачитывают количество мегапикселей, блогеры хором пилят проплаченные анбоксинги, а эстеты обмазываются «чувственным восприятием цветовой палитры матрицы». Все как обычно.
Пришлось сесть, потратить половину жизни и самому во всем разобраться. В этой статье я расскажу, что узнал.
⇡#Что такое вычислительная фотография?
Везде, включая википедию, дают примерно такое определение: вычислительная фотография — любые техники захвата и обработки изображений, где вместо оптических преобразований используются цифровые вычисления. В нем все хорошо, кроме того, что оно ничего не объясняет. Под него подходит даже автофокус, но не влезает пленоптика, которая уже принесла нам много полезного. Размытость официальных определений как бы намекает, что мы понятия не имеем о чем говорим.
Пионер вычислительной фотографии, профессор Стенфорда Marc Levoy (он же сейчас отвечает за камеру в Google Pixel) приводит другое определение — набор методов компьютерной визуализации, улучшающих или расширяющих возможности цифровой фотографии, при использовании которых получается обычная фотография, которая не могла технически быть снята на данную камеру традиционным способом. В статье я придерживаюсь именно его.
Итак, во всем были виноваты смартфоны.
*У смартфонов не было выбора, кроме как дать жизнь новому виду фотографии — вычислительной.*
Их маленькие шумные матрицы и крохотные несветосильные объективы по всем законам физики должны были приносить только боль и страдание. Они и приносили, пока их разработчики не догадались хитро использовать их сильные стороны, чтобы побороть слабые, — быстрые электронные затворы, мощные процессоры и софт.
Большинство громких исследований в области вычислительной фотографии приходятся на 2005-2015 года, что в науке считается буквально вчера. Прямо сейчас на наших глазах и в наших карманах развивается новая область знаний и технологий, которой никогда не было.
Вычислительная фотография — это не только селфи с нейро-боке. Недавняя фотография черной дыры не появилась бы на свет без методов вычислительной фотографии. Чтобы снять такое фото на обычный телескоп, нам бы пришлось сделать его размером с Землю. Однако, объединив данные восьми радиотелескопов в разных точках нашего шарика и написав немного скриптов на питоне, мы получили первую в мире фотографию горизонта событий. Для селфи тоже сгодится.
Представим, что мы вернули 2007-й. Наша мама — анархия, а наши фотографии — шумные 0,6-Мп джипеги, снятые на скейтборд. Примерно тогда у нас появляется первое непреодолимое желание насыпать на них пресетов, чтобы скрыть убогость мобильных матриц. Не будем себе отказывать.
С выходом инстаграма все помешались на фильтрах. Как человек, который в свое время реверс-инжинирил X-Pro II, Lo-Fi и Valencia в, конечно же, исследовательских (кек) целях, я все еще помню, что состояли они из трех компонентов:
Современные фильтры недалеко ушли от этой тройки, лишь стали чуть сложнее по математике. С появлением аппаратных шейдеров и OpenCL на смартфонах их быстро переписали под GPU, и это считалось дико круто. Для 2012 года, конечно. Сегодня любой школьник может сделать такое же на CSS, и ему все равно не перепадет на выпускном.
Однако прогресс фильтров сегодня не остановился. Ребята из Дехансера, например, отлично упарываются по нелинейным фильтрам — вместо пролетарского тон-маппинга они используют более сложные нелинейные преобразования, что, по их словам, открывает куда больше возможностей.
Нелинейными преобразованиями можно натворить много дел, но они невероятно сложны, а мы, человеки, невероятно тупы. Как только в науке дело доходит до нелинейных преобразований, мы предпочитаем идти в численные методы и напихивать везде нейросетей, чтобы те писали шедевры за нас. То же было и здесь.
⇡#Автоматика и мечты о кнопке «шедевр»
Когда все привыкли к фильтрам, мы начали встраивать их прямо в камеры. История скрывает, кто именно из производителей был первым, но чисто для понимания как давно это было — в iOS 5.0, которая вышла аж в 2011 году, уже был публичный API для Auto Enhancing Images. Одному только Джобсу известно, как долго он использовался до открытия на публику.
Автоматика делала то же, что и каждый из нас, открывая фотку в редакторе, — вытягивала провалы в свете и тенях, наваливала сатурейшена, убирала красные глаза и фиксила цвет лица. Пользователи даже не догадывались, что «драматически улучшенная камера» в новом смартфоне была лишь заслугой пары новых шейдеров. До выхода Google Pixel и начала хайпа по вычислительной фотографии оставалось еще пять лет.
Сегодня же бои за кнопку «шедевр» перешли на поле машинного обучения. Наигравшись с тон-маппингом, все ринулись тренировать CNN'ы и GAN'ы двигать ползуночки вместо пользователя. Иными словами, по входному изображению определять набор оптимальных параметров, которые приближали бы данное изображение к некоему субъективному пониманию «хорошей фотографии». Реализовано в том же Pixelmator Pro и других редакторах. Работает, как можно догадаться, не очень и не всегда.
⇡#Стекинг — 90% успеха мобильных камер
Настоящая вычислительная фотография началась со стекинга — наложения нескольких фотографий друг на друга. Для смартфона не проблема нащелкать десяток кадров за полсекунды. В их камерах нет медленных механических частей: диафрагма фиксирована, а вместо ездящей шторки — электронный затвор. Процессор просто командует матрице, сколько микросекунд ей ловить дикие фотоны, а сам считывает результат.
Технически телефон может снимать фото со скоростью видео, а видео с разрешением фото, но все упирается в скорость шины и процессора. Поэтому всегда ставят программные лимиты.
Сам по себе стекинг с нами давно. еще деды ставили плагины на Photoshop 7.0, чтоб собрать несколько фотографий в вырвиглазный HDR или склеить панораму 18000 × 600 пикселей и... на самом деле никто так и не придумал, что с ними делать дальше. Богатые времена были, жаль, дикие.
Сейчас мы стали взрослые и называем это «эпсилон-фотографией» — когда, изменяя один из параметров камеры (экспозицию, фокус, положение) и склеивая полученные кадры, мы получаем нечто, что не могло быть снято одним кадром. Но это термин для теоретиков, на практике же прижилось другое название — стекинг. Сегодня по факту на нем строится 90% всех инноваций в мобильных камерах.
Вещь, о которой многие не задумываются, но она важна для понимания всей мобильной и вычислительной фотографии: камера в современном смартфоне начинает делать фотографии сразу, как только вы открываете ее приложение. Что логично, ей ведь надо как-то передавать изображение на экран. Однако, помимо экрана, она сохраняет кадры высокого разрешения в свой собственный циклический буфер, где хранит их еще пару секунд.
*Когда вы нажимаете кнопку «снять фото» — оно на самом деле уже снято, камера просто берет последнее фото из буфера.*
Сегодня так работает любая мобильная камера. По крайней мере во всех флагманах не с помоек. Буферизация позволяет реализовать не просто нулевую задержку затвора, о которой так давно мечтали фотографы, а даже отрицательную — при нажатии на кнопку смартфон заглядывает в прошлое, выгружает 5-10 последних фото из буфера и начинает неистово анализировать их и клеить. Больше не нужно ждать, пока телефон нащелкает кадров для HDR или ночного режима, — просто забирай их из буфера, пользователь даже не узнает.
Кстати, именно с помощью отрицательного лага затвора реализовано Live Photo в айфонах, а в HTC подобное было еще в 2013 году под странным названием Zoe.
⇡#Стекинг по экспозиции — HDR и борьба с перепадами яркости
Способны ли матрицы фотоаппаратов фиксировать весь диапазон яркости, доступный нашему глазу, — старая горячая тема для споров. Одни говорят нет, ведь глаз способен видеть до 25 f-стопов, в то время как даже из топовой фуллфрейм-матрицы можно вытянуть максимум 14. Другие называют сравнение некорректным, ведь глазу помогает мозг, автоматически подстраивая зрачок и достраивая изображение своими нейросетями, а моментальный динамический диапазон глаза на самом деле не больше как раз 10-14 f-стопов. Оставим эти споры лучшим диванным мыслителям интернета.
Факт остается фактом: снимая друзей на фоне яркого неба без HDR на любую мобильную камеру, вы получаете либо нормальное небо и черные лица друзей, либо прорисованных друзей, но выжженное насмерть небо.
Решение давно придумано — расширять диапазон яркости с помощью HDR (High dynamic range). Нужно снять несколько кадров с разной выдержкой и склеить их вместе. Чтобы один был «нормальный», второй посветлее, третий потемнее. Берем темные места из светлого кадра, пересветы заполняем из темного — профит. Остается лишь решить задачу автоматического брекетинга — насколько сдвинуть экспозицию каждого кадра, чтобы не переборщить, но с определением средней яркости картинки сейчас справится второкурсник технического вуза.
На последних iPhone, Pixel и Galaxy режим HDR вообще включается автоматически, когда нехитрый алгоритм внутри камеры определяет, что вы снимаете что-то контрастное в солнечный день. Можно даже заметить, как телефон переключает режим записи в буфер, чтобы сохранять сдвинутые по экспозиции кадры, — в камере падает fps, а сама картинка становится сочнее. Момент переключения хорошо заметен на моем iPhone X, если снимать на улице. Присмотритесь к своему смартфону в следующий раз тоже.
Минус HDR с брекетингом по экспозиции — его непроходимая беспомощность в плохом освещении. Даже при свете комнатной лампы кадры получаются такими темными, что компьютер не может их выровнять и склеить. Для решения проблемы со светом в 2013-м Google показал иной подход к HDR в вышедшем тогда смартфоне Nexus. Он использовал стекинг по времени.
⇡#Стекинг по времени — симуляция длинной выдержки и таймлапс
Стекинг по времени позволяет получить длинную выдержку с помощью серии коротких. Первопроходцами были любители поснимать следы от звезд на ночном небе, которым было неудобно открывать затвор сразу на два часа. Так было тяжело заранее рассчитать все настройки, а от малейшей тряски весь кадр выходил испорченным. Они решили открывать затвор лишь на пару минут, но много раз, а потом шли домой и клеили полученные кадры в фотошопе.
Получается, камера никогда фактически не снимала на длинной выдержке, но мы получали эффект ее имитации, складывая несколько снятых подряд кадров. Для смартфонов уже давно написана куча приложений, использующих этот трюк, но все они не нужны с тех пор, как фича была добавлена почти во все стандартные камеры. Сегодня даже айфон легко склеит вам длинную выдержку из Live Photo.
Вернемся к гуглу с его ночным HDR. Оказалось, с помощью брекетинга по времени можно реализовать неплохой HDR в темноте. Технология впервые появилась в Nexus 5 и называлась HDR+. Остальные же телефоны на Android получили ее как бы в подарок. Технология до сих пор настолько популярна, что ей хвалятся даже в презентации последних Pixel.
Работает HDR+ достаточно просто: определив, что вы снимаете в темноте, камера выгружает из буфера 8-15 последних фотографий в RAW, чтобы наложить их друг на друга. Таким образом алгоритм собирает больше информации о темных участках кадра чтобы минимизировать шумы — пиксели, где по каким-то причинам камера не смогла собрать всю информацию и лажанула.
Как если бы вы не знали, как выглядит капибара, и попросили пять человек описать ее — их рассказы были бы примерно одинаковыми, но каждый упомянул бы какую-то уникальную деталь. Так вы бы собрали больше информации, чем просто спросив одного. То же и с пикселями.
Сложение снятых с одной точки кадров дает тот же фейковый эффект длинной выдержки как со звездами выше. Экспозиция десятков кадров суммируется, ошибки на одном минимизируются на других. Представьте, сколько бы каждый раз пришлось щелкать затвором зеркалки, чтобы достичь такого.
Оставалось только решить проблему автоматической цветокоррекции — снятые в темноте кадры обычно получаются поголовно желтыми или зелеными, а мы вроде как хотим сочности дневного освещения. В ранних версиях HDR+ это решали простым подкручиванием настроек, как в фильтрах а-ля инстаграм✴. Потом же призвали на помощь нейросети.
Так появился Night Sight — технология «ночной фотографии» в Pixel 2 и 3. В описании так и говорят: «Machine learning techniques built on top of HDR+, that make Night Sight work». По сути это является автоматизацией этапа цветокоррекции. Машину обучили на датасете фоточек «до» и «после», чтобы из всякого набора темных кривых фотографий делать одну красивую.
Датасет, кстати, выложили в открытый доступ. Может, ребята из Apple возьмут его и наконец-то научат свои стеклянные лопаты нормально снимать в темноте.
Вдобавок в Night Sight используется вычисление вектора движения объектов в кадре, чтобы нормализовать смазы, которые обязательно получатся на длинной выдержке. Так, смартфон может взять четкие части с других кадров и приклеить.
⇡#Стекинг по движению — панорама, суперзум и борьба с шумами
Панорама — популярное развлечение жителей сельской местности. Истории пока не известно случаев, чтобы сосискофотка оказалась бы интересна кому-то, кроме ее автора, но не упомянуть ее нельзя — для многих с этого вообще начался стекинг.
Первый же полезный способ применения панорамы — получение фотографии большего разрешения, чем позволяет матрица камеры путем склейки нескольких кадров. Фотографы давно используют разный софт для так называемых фотографий с суперразрешением — когда немного смещенные фотографии как бы дополняют друг друга между пикселей. Таким образом можно получить изображение хоть в сотни гигапикселей, что весьма полезно, если вам надо распечатать это на рекламном плакате размером с дом.
Другой, уже более интересный подход — Pixel Shifting. Некоторые беззеркалки типа Sony и Olympus начали поддерживать его еще с 2014-го, но клеить результат все равно заставляли руками. Типичные инновации больших камер.
Смартфоны же преуспели здесь по смешной причине — когда вы снимаете фото, ваши руки трясутся. Эта на первый взгляд проблема легла в основу реализации нативного суперразрешения на смартфонах.
Чтобы понять, как это работает, надо вспомнить, как устроена матрица любого фотоаппарата. Каждый ее пиксель (фотодиод) способен фиксировать только интенсивность света — т. е. количество залетевших фотонов. Однако пиксель не может измерить его цвет (длину волны). Чтобы получить RGB-картинку, пришлось и здесь нагородить костылей — накрыть всю матрицу сеткой разноцветных стеклышек. Самая популярная ее реализация называется фильтром Байера и используется сегодня в большинстве матриц. Выглядит как на картинке ниже.
Получается, что каждый пиксель матрицы ловит только R-, G- или B-компоненту, ведь остальные фотоны нещадно отражаются фильтром Байера. Недостающие же компоненты он узнает тупым усреднением значений соседних пикселей.
Зеленых ячеек в фильтре Байера больше — так сделали по аналогии с человеческим глазом. Получается, что из 50 миллионов пикселей на матрице зеленый цвет будет улавливать 25 млн, красный и синий — по 12,5 млн. Остальное будет усреднено — этот процесс называется дебайеризация или демозаик, и это такой жирный смешной костыль, на котором все держится.
*На самом деле у каждой матрицы свой хитрый запатентованный алгоритм демозаикинга, но в рамках данной истории мы этим пренебрежем.*
Другие типы матриц (типа Foveon) пока ну как-то совсем не прижились. Хотя некоторые производители пытаются использовать матрицы без фильтра Байера для улучшения резкости и динамического диапазона.
Когда света мало или детали объекта совсем крошечны, мы теряем кучу информации, потому что фильтр Байера нагло отсекает фотоны с неугодной длиной волны. Поэтому и придумали делать Pixel Shifting — смещать матрицу на 1 пиксель вверх-вниз-вправо-влево, чтобы поймать их все. Фотография при этом не получается в 4 раза больше, как может показаться, просто процессор использует эти данные, чтобы точнее записать значение каждого пикселя. Усредняет не по соседям, так сказать, а по четырем значениям самого себя.
Тряска же наших рук при съемке фото на телефон делает этот процесс естественным следствием. В последних версиях Google Pixel эта штука реализована и включается всегда, когда вы используете зум на телефоне, — называется Super Res Zoom (да, мне тоже нравится их беспощадный нейминг). Китайцы тоже скопировали его в свои ляофоны, хотя получилось немного хуже.
Наложение друг на друга немного смещенных фотографий позволяет собрать больше информации о цвете каждого пикселя, а значит, уменьшить шумы, увеличить резкость и поднять разрешение не увеличивая физическое число мегапикселей матрицы. Современные Android-флагманы делают это автоматически, пока их пользователи даже не задумываются об этом.
⇡#Стекинг по фокусу — любая глубина резкости и рефокус в постпродакшене
Метод пришел из макросъемки, где маленькая глубина резкости всегда была проблемой. Чтобы весь объект был в фокусе, приходилось делать несколько кадров со сдвигом фокуса вперед-назад, чтобы потом сшить их в один резкий. Тем же методом часто пользовались любители съемки ландшафтов, делая передний и задний план резкими как диарея.
Все это тоже переехало и на смартфоны, правда, без особого хайпа. В 2013-м выходит Nokia Lumia 1020 с «Refocus App», а в 2014 и Samsung Galaxy S5 с режимом «Selective Focus». Работали они по одной и той же схеме: по нажатию на кнопку они быстро делали 3 фотографии — одну с «нормальным» фокусом, вторую со сдвинутым вперед и третью со сдвинутым назад. Программа выравнивала кадры и позволяла выбрать один из них, что преподносилось как «настоящее» управление фокусом в постпродакшене.
Никакой дальнейшей обработки не было, ведь даже этого простого хака было достаточно, чтобы вбить еще один гвоздь в крышку Lytro и аналогов с их честным рефокусом. Кстати, поговорим о них (мастер переходов 80 lvl).
⇡#Вычислительные матрицы — световые поля и пленоптика
Как мы поняли выше, наши матрицы — ужас на костылях. Мы просто привыкли и пытаемся с этим жить. По своему устройству они мало изменялись с самого начала времен. Мы лишь совершенствовали техпроцесс — уменьшали расстояние между пикселями, боролись с шумами-наводками, добавляли специальные пиксели для работы фазового автофокуса. Но стоит взять даже самую дорогую зеркалку и попытаться снять на нее бегущего кота при комнатном освещении — кот, мягко говоря, победит.
Мы уже давно пытаемся изобрести что-то получше. Много попыток и исследований в этой области гуглится по запросу «computational sensor» или «non-bayer sensor», и даже пример с Pixel Shifting выше можно отнести к попыткам улучшения матриц с помощью вычислений. Однако самые многообещающие истории в последние лет двадцать приходят к нам именно из мира так называемых пленоптических камер.
Чтобы вы не уснули от предвкушения надвигающихся сложных слов, вброшу инсайд, что камера последних Google Pixel как раз «немного» пленоптическая. Всего на два пикселя, но даже это позволяет ей вычислять честную оптическую глубину кадра и без второй камеры как у всех.
Пленоптика — мощное оружие, которое пока еще не выстрелило. Приведу ссылку на одну из моих любимых недавних статей о возможностях пленоптических камер и нашем с ними будущем, откуда я позаимствовал примеры.
Пленоптическая камера — скоро будет каждая
Придумана в 1994-м, собрана в Стенфорде в 2004-м. Первая потребительская камера — Lytro, выпущена в 2012-м. С похожими технологиями сейчас активно экспериментирует VR-индустрия.
От обычной камеры пленоптическая отличается лишь одной модификацией — матрица в ней накрыта сеткой из линз, каждая из которых покрывает несколько реальных пикселей. Как-то так:
если правильно рассчитать расстояние от сетки до матрицы и размер диафрагмы, в итоговом изображении получатся четкие кластеры из пикселей — эдакие мини-версии оригинального изображения.
Оказывается, если взять из каждого кластера, скажем, один центральный пиксель и склеить картинку только по ним — она ничем не будет отличаться от снятой на обычную камеру. Да, мы немного потеряли в разрешении, но просто попросим Sony досыпать еще мегапикселей в новых матрицах.
Веселье же на этом только начинается. если взять другой пиксель из каждого кластера и снова склеить картинку — получится снова нормальная фотография, только как будто снятая со сдвигом на один пиксель. Таким образом, имея кластеры 10 × 10 пикселей, мы получим 100 изображений предмета с «немного» разных точек.
Больше размер кластера — больше изображений, но меньше разрешение. В мире смартфонов с 41-мегапиксельными матрицами мы хоть и можем немного пренебречь разрешением, но у всего есть предел. Приходится сохранять баланс.
Окей, мы собрали пленоптическую камеру, и что это нам дает?
**Честный рефокус**
Фича, о которой жужжали все журналисты в статьях про Lytro, — возможность честной корректировки фокуса в постпродакшене. Под честной имеется в виду, что мы не применяем всякие алгоритмы деблюринга, а используем исключительно имеющиеся под рукой пиксели, выбирая или усредняя их из кластеров в нужном порядке.
RAW-фотография с пленоптической камеры выглядит странно. Чтобы получить из нее привычный резкий джипег, надо сначала его собрать. Для этого надо выбрать каждый пиксель джипега из одного из кластеров RAW'а. В зависимости от того, как мы их выберем, будет меняться результат.
Например, чем дальше находится кластер от места падения оригинального луча, тем более этот луч получается в расфокусе. Потому что оптика. Чтобы получить смещенное по фокусу изображение, нам лишь надо выбрать пиксели на нужном нам удалении от оригинального — либо ближе, либо дальше.
Со сдвигом фокуса на себя было сложнее — чисто физически таких пикселей в кластерах было меньше. Сначала разработчики даже не хотели давать пользователю возможность фокусироваться руками — камера сама решала это программно. Пользователям такое будущее не понравилось, потому фичу добавили в поздних прошивках под названием «креативный режим», но сделали рефокус в нем сильно ограниченным ровно по этой причине.
**Карта глубины и 3D с одной камеры **
Одна из самых простых операций в пленоптике — получение карты глубины. Для этого надо просто собрать два разных кадра и рассчитать, насколько сдвинуты объекты на них. Больше сдвиг — дальше от камеры.
Недавно Google купил и убил Lytro, но использовал их технологии для своего VR и... для камеры в Pixel. Начиная с Pixel 2 камера впервые стала «немного» пленоптической, правда, с кластерами всего по два пикселя. Это дало возможность гуглу не ставить вторую камеру, как все остальные ребята, а вычислять карту глубины исключительно по одной фотографии.
Карта глубины строится по двум кадрам, сдвинутым на один субпиксель. Этого вполне хватает, чтобы вычислить бинарную карту глубины и отделить передний план от заднего и размыть последний в модном нынче боке. Результат такого расслоения еще сглаживается и «улучшается» нейросетями, которые натренированы улучшать карты глубины (а не блюрить, как многие думают).
Фишка еще в том, что пленоптика в смартфонах нам досталась почти бесплатно. Мы и так ставили линзы на эти крошечные матрицы, чтобы хоть как-то увеличить световой поток. В следующих Pixel гугл планирует пойти дальше и накрыть линзой четыре фотодиода.
⇡#
**Пленоптическая камера — скоро будет каждая** **Нарезка на слои и объекты**
Вы не видите своего носа, потому что мозг склеивает вам итоговое изображение из двух разных глаз. Закройте один, и вы заметите с краю целую египетскую пирамиду.
Тот же эффект достижим в пленоптической камере. Собрав сдвинутые относительно друг друга изображения из пикселей разных кластеров, мы сможем посмотреть на предмет как будто с нескольких точек. Прямо как наши глаза. Что открывает нам две крутые возможности: оценку примерного расстояния до объектов, что, как и в жизни, позволяет нам легко отделить передний план от заднего, а также, если размеры объекта небольшие, позволяет полностью удалить его из кадра. Как нос. Оптически, по-настоящему и без фотошопа.
**«Оптическая» стабилизация без оптики**
Из пленоптического RAW'а можно собрать сотню фотографий, снятых со сдвигом в несколько пикселей по всей площади матрицы. Получается, у нас есть труба диаметром с наш объектив, в рамках которой мы можем свободно перемещать точку съемки, компенсируя тем самым тряску изображения.
Технически стабилизация все еще оптическая, потому что нам не надо ничего вычислять — мы просто выбираем пиксели в нужных местах. С другой стороны, любая пленоптическая камера жертвует количеством мегапикселей в угоду пленоптическим возможностям, а точно так же работает любой цифровой стаб. То есть бонусом это фичу иметь приятно, но использовать исключительно ради нее — так себе затея.
Больше матрица и объектив — больше окно для движений — больше возможностей — больше озоновых дыр от обеспечения всего этого цирка электричеством и охлаждением. Е-е-е, технологии!
**Борьба с фильтром Байера**
Даже в пленоптической камере он все еще необходим, ведь мы так и не придумали другого способа получить цветное цифровое изображение. Зато теперь мы можем усреднять цвет не только по группке соседних пикселей, как в классическом демозаике, но и по десяткам его копий в соседних кластерах.
В статьях это называют «вычисляемым суперразрешением», но я бы тут снова засомневался — ведь, по сути, мы сначала уменьшаем реальное разрешение матрицы в те самые десятки раз, чтобы потом как бы гордо его восстановить. Чтобы такое кому-то продать, придется сильно постараться.
Хотя технически оно все равно интереснее, чем дрожать матрицей в приступе pixel shifting'а.
**Вычисляемая форма диафрагмы (боке)**
Любители снимать боке-сердечки здесь будут в восторге. Раз уж мы умеем управлять рефокусом, можно пойти и дальше — брать лишь некоторые пиксели из расфокусированного изображения, а другие из обычного. Так можно получить диафрагму любой формы на радость фотопабликам.
**Много других плюшек для видео**
Чтобы не отходить от темы фотографии в посте, всех интересующихся отправляю посмотреть на них по ссылке ниже. Там рассказывают еще с полдесятка интересных применений пленоптической камеры.
⇡#Световые поля (Light Field) — не столько фотография, сколько VR
Обычно с них начинают объяснять пленоптику, но я так и не понял, зачем морочить ими голову с самого начала. Итак, да, с физической точки зрения пленоптическая камера — это инструмент фиксации светового поля. Даже название пошло отсюда — plenus, от латинского «полный», то есть собирающий всю информацию о лучах света. Как пленарное заседание.
Разберемся, что такое световое поле и зачем оно нам.
Любая традиционная фотография двумерна — где луч вошел в объектив, там и загорелся пиксель на фотографии. Камере все равно, откуда этот луч пришел, — случайно упал сбоку или отразился от манящих округлостей прекрасной дамы. Фотография фиксирует только точку пересечения луча с поверхностью матрицы.
Изображение же светового поля, в свою очередь, фиксирует то же самое, но с добавлением новой компоненты — откуда этот луч пришел. Иными словами, фиксирует вектор луча в пространстве. Как расчет освещения уровня в видеоигре, только наоборот — мы пытаемся понять модель освещения реального мира. Световое поле, получается, и есть набор всех световых лучей в рамках нашей сцены. Как падающих от источников света, так и отраженных.
Световое поле по сути визуально описывает пространство вокруг. Любую фотографию в рамках этого пространства мы теперь можем спокойно вычислить математически. Точка съемки, глубина резкости, диафрагма — все это тоже вычисляемо.
Мне тут нравится проводить аналогию с городом. Фотография — это как путь от дома до ларька с пивком, который вы помните наизусть, а световое поле — это карта всего города. Имея карту, мы можем вычислить в ней любой маршрут из точки А в Б. Точно так же мы можем вычислить любую фотографию, зная световое поле.
Для простой фотографии такая штука — оверкилл, но на сцену медленно выползает VR. В нем световые поля являются одним из перспективных направлений. Слепок светового поля позволит рассмотреть объект в виртуальной реальности из любой точки пространства. Больше не надо строить 3D-модель комнаты, чтобы походить по ней, — достаточно «всего лишь» записать все лучи света в этой комнате. Всего лишь, ага. Над тем и бьемся.
Под оптикой мы с ребятами из Стенфорда имеем в виду не только линзы и объективы, но и все, что между объектом и матрицей, — даже диафрагму и затвор. Фотоснобы здесь будут в ярости.
**Многокамерность**
В 2014 году вышел HTC One (M8) и стал первым смартфоном с двумя камерами и весьма комичными возможностями вычислительной фотографии, типа замены фона дождем и блестками как в лучших пабликах «Одноклассников».
Началась гонка. Все стали ставить два, три, пять объективов в свои смартфоны, пытаясь попутно выяснить, что лучше, — телевик или ширик. В итоге дошли до появления Light L16, в которой было, как можно догадаться, аж 16 объективов.
L16 уже была не смартфоном, а скорее новым видом карманной камеры. Она позиционировалась как компактная альтернатива зеркалке, в которой качество фотографий достигалось не дорогущим светосильным объективом и фуллфрейм-матрицей, а силой алгоритмов вычислительной фотографии.
Среди ее 16 объективов были ширики на 28 мм и телевики на 70 и 150 мм. Каждый телевик был перископическим, то есть свет не шел напрямую через линзу на матрицу, а отражался зеркалом вглубь корпуса. Такое расположение позволяло впихнуть достаточно длинный телевик в плоский корпус, чтобы он не торчал из него трубой. Тот же финт недавно провернули китайцы в Huawei P30 Pro.
Каждое фото L16 снималось одновременно на 10 и более объективов, а потом камера их хитро склеивала, чтобы получить 52-Мп изображение. По задумке авторов, одновременная съемка на несколько объективов позволяла поймать такое же количество света, как и в большой объектив зеркалки, но при этом хитро обойти все законы оптики и необходимость в длинной подзорной трубе.
Из программных фич в первой версии было управление глубиной резкости и фокусом после съемки фото — наличие фотографий с разных ракурсов позволяло вычислить глубину кадра и наложить неплохой программный блюр. На бумаге все звучало приятно, и до релиза у всех даже была надежда на светлое вычислительное будущее.
В марте 2018 года Light L16 вышла на рынок и... с треском провалилась. Технологически она действительно находилась в будущем, но при цене в $2 000 не имела никакой оптической стабилизации, из-за чего фотографии постоянно получались смазанными (не удивительно при линзах в 70-150 мм), автофокус был слишком медленным, склейка из нескольких кадров давала странные перепады резкости, а в темноте камера вообще была бесполезна, потому что в ней не было алгоритмов типа гугловского HDR+ или Night Sight. Современные мыльницы за $500 с поддержкой RAW уделывали ее со старта, потому продажи быстро прекратили после первой партии.
Однако компания Light на этом не закрылась, а, наоборот, подняла бабла и с удвоенной силой продолжает пилить новую версию. Например, их технологии использовались в недавней Nokia 9, которая страшный сон трипофоба. Ждем новых инноваций, потому что идея явно богатая.
⇡#Некруглые диафрагмы (Coded Aperture) — карта глубины по одной камере, деблюр
Начинается зона телескопов, рентгенов и прочего тумана войны. Сильно заходить в нее не будем, но ремни лучше заранее пристегнуть. История кодирующих диафрагм начиналась там, где фокусировка лучей была физически невозможна, — для гамма- и рентгеновского излучения. Обратитесь к ближайшему учителю физики, он вам объяснит почему.
Суть кодированной диафрагмы заключается в замене стандартной ее дырки на неким паттерном. Расположение отверстий должно быть таким, чтобы их общий вид максимально различался в зависимости от степени расфокуса. Чем разнообразнее — тем лучше. Астрономы напридумывали целую гору таких паттернов для своих телескопов, здесь я приведу самый классический.
Как это все работает?
Когда мы фокусируемся на объекте, все, что вне глубины нашей резкости, размывается. Физически размытие — это когда одна точка по причине расфокуса проецируется линзой на несколько пикселей матрицы. Так уличный фонарь превращается в круглый блин боке.
Математики называют такие операции сверткой (convolution) и обратной сверткой (deconvolution). Запомним эти слова, ведь они круто звучат!
Технически мы можем развернуть любую свертку обратно, если знаем ядро. Но это математики так говорят. В реальности же у нас ограниченные диапазоны матрицы и неидеальные линзы объективов, из-за чего все наши «боке» далеки от математического идеала, и полностью восстановить их невозможно.
Мы все равно можем попытаться, если узнаем ядро свертки. Не буду долго тянуть, но этим ядром в фотографии как раз и является форма диафрагмы. Диафрагма делает математическую свертку чисто оптически.
Проблема в том, что обычная круглая диафрагма остается круглой на любом уровне размытия. Наше ядро всегда примерно одинаковое — это стабильно, но не очень полезно. В случае с кодированной диафрагмой лучи с разной степенью расфокуса будут закодированы с разным ядром. Читатели с IQ > 150 уже догадались, что будет дальше.
Остается лишь одна проблема — понять, с каким ядром закодирована каждая из областей изображения. Можно попробовать это сделать руками, примеряя разные ядра и смотря, где свертка получается точнее, но это не наш путь. Давным-давно человеки изобрели для этого преобразование Фурье! Чтобы не насиловать людей матаном, приложу ссылку на мое любимое его объяснение для тех, кому это вообще интересно.
Все, что нужно знать простому человеку: преобразование Фурье позволяет достать из кучи наложенных друг на друга волн те паттерны, которые в них преобладают. В случае музыки Фурье покажет частоты входящих в сложный аккорд нот, а в случае с фотографией — преобладающий паттерн, с которым куча световых волн наложилась друг на друга. То есть ядро свертки. Профит.
А так как форма кодированной диафрагмы всегда разная в зависимости от расстояния до объекта — мы можем вычислить это расстояние чисто математически, используя только один простой кадр, снятый на обычную матрицу!
Применив операцию обратной свертки по этому ядру, мы можем восстановить разблюренные области изображения. Вернуть все разбросанные пиксели на место, так сказать.
Так работает большинство инструментов деблюра. Причем это прокатывает даже с обычной круглой диафрагмой, но результат получается менее точным.
Минусом кодирующих диафрагм является потеря света и появление шумов, а ими мы все еще не можем пренебрегать. Появление же лидаров и достаточно точных ToF-камер вообще свело на нет все идеи использования кодирующих диафрагм в потребительских гаджетах. если вы где-то их встречали — напишите в комментах.
Фазовое кодирование (Phase Coding, Wavefront Coding)
Согласно последним ГОСТам, свет — наполовину волна. Кодируя диафрагму, мы управляли прозрачностью линзы, что в переводе на волновой язык означает «управляли его амплитудой». Кроме амплитуды есть фаза, и ее тоже можно кодировать.
Делают это с помощью дополнительной линзы, которая переворачивает фазу проходящего через нее света. Как на обложке Pink Floyd, да.
Дальше все работает как в любом другом оптическом кодировании. Разные области изображения оказываются закодированы по-разному, а мы можем их алгоритмически распознать и как-то пофиксить. Например, сдвинуть фокус.
Плюс фазового кодирования — мы не теряем в яркости. Все фотоны честно долетают до матрицы, в отличие от кодированной диафрагмы, где они стукаются о непроходимые ее части (ведь во второй половине ГОСТа свет — это частица).
Минус — мы всегда будем терять в резкости, потому что даже объекты в абсолютном фокусе будут равномерно размазаны по матрице, и нам хоть как придется звать Фурье, чтобы собрал их для нас.
⇡#Кодированный затвор (Flutter Shutter) — борьба со смазом движения
Последнее, что мы можем закодировать на пути света до матрицы, — затвор. Вместо привычного цикла «открыли — подождали — закрыли» будем несколько раз двигать затвором за кадр, чтобы в сумме получить нужную выдержку. Почти как в мультиэкспозиции — когда один кадр экспонируется несколько раз.
Представим, что мы решили фотографировать быстро движущийся автомобиль ночью и потом рассмотреть его номера. Вспышки у нас нет, длинной выдержкой воспользоваться тоже не выйдет — все смажется. Надо уменьшать выдержку, но так мы дойдем до абсолютно черного кадра, так и не распознав автомобиль. Что делать?
Можно снять тот же кадр в несколько движений затвора — чтобы автомобиль был размазан не равномерно, а как бы лесенкой с заранее известным шагом. Конечно, если он не валит со скоростью заниженной четверки с района, но этот вариант наука игнорирует.
Получается, мы закодировали смаз случайной последовательностью открытий-закрытий затвора и можем попытаться раскодировать его с помощью той же обратной свертки. Оказывается, это работает в разы лучше, чем если пытаться так же вернуть равномерно смазанные от длинной выдержки пиксели.
Алгоритмов для этого придумано аж несколько штук. Для более хардкорных подробностей снова приложу ссылки на публикации умных индусов.
Скоро мы зажремся настолько, что захотим контролировать в постпродакшене в том числе и освещение. Менять пасмурную погоду на солнечную или выравнивать тени на лице после съемки — сейчас это кажется дикостью, но посмотрим лет через десять.
Мы уже изобрели одно глупое устройство, позволяющее в прямом смысле «в лоб» управлять освещением, — вспышку. Сначала она была нужна из-за технических ограничений камер, потом враги стали ставить ее во все мыльницы, чтобы портить ваши семейные фото, а в эпоху смартфонов все используют ее как фонарик.
Наши движения к вычислительному освещению пока еще хаотичны и мало кому понятны.
Программируемая вспышка
Старые нокии обожали пощеголять вспышками на ксеноне, выжирающими по проценту батарейки с каждой фотографией. Сегодня жизнь стала скучнее и везде ставят простой энергоэффективный LED. Со светодиодом особо не разгуляешься, но мы все равно попытались.
Для начала все перешли на Dual LED-вспышки — сочетание оранжевого и синего светодиодов, яркость которых пытается подстроиться под цветовую температуру кадра. В айфонах это зовут True Tone и управляет им небольшой кусок кода по хитрой формуле. Даже разработчикам не дают ими управлять.
Когда в смартфонах появились датчики глубины и нейросети, мы захотели решить ими главную проблему всех вспышек — пересвеченные лица и вообще передний план. Каждый сделал это по-своему. В айфонах появился Slow Sync Flash — камера искусственно увеличивала выдержку в темноте. В Google Pixel и других андроидах — алгоритм объединения кадров со вспышкой и без. Телефон быстро делает две фотографии — со вспышкой и без. Части кадра, находящиеся близко к камере, берутся из кадра без вспышки, а подсвеченные детали фона из кадра со вспышкой. Получается примерно равномерное освещение.
Дальнейшее применение программируемых мультивспышек весьма туманно. Интересное применение нашли разве что в областях компьютерного зрения, где нужно было с большей четкостью определять границы объектов. Например, так можно сделать схему по сборке шкафа из икеи.
Кодированный свет (Lightstage)
Кодировать свет всегда было проще всего. Мы можем хоть сотню раз за кадр менять освещение и все равно даже не приблизимся к его скорости. Поэтому уже в далеком 2005-м вот эти ребята придумали Lighstage.
Суть метода в том, чтобы в каждом кадре реального 24-кадрового кино успеть подсветить объект со всех возможных сторон. Для этого используется 150+ ламп и высокоскоростная камера, которая на один кадр фильма снимает сотню кадров с разным освещением. Вот так глупо выглядят любые инновации, когда их начинаешь объяснять.
Сейчас подобный этому подход используется при съемках комбинированной CGI-графики в кино. Он позволяет полностью управлять освещением объекта в постпродакшене, помещая его в сцены с абсолютно случайным освещением. Просто берем подсвеченные с нужных сторон кадры, немного тонируем, профит.
Жаль, на мобильных девайсах такое будет сделать проблематично, но идея, может, кому-то и пригодится. Видел приложение ребят, которые снимали 3D-модель лица, подсвечивая его фонариком телефона с разных сторон.
Лидар и time-of-flight-камера
Лидар — устройство, определяющее расстояние до объекта. Сегодняшним прогрессом в области лидаров мы обязаны дикому хайпу по самоуправляемым автомобилям в последние годы. Видели, наверное, крутящиеся штуки на их крышах — это как раз лидары.
В смартфон лазерный лидар пока не впихнуть, потому сейчас мы обходимся его младшим братом — time-of-flight-камерой. Суть работы до нелепости проста: отдельная камера, над которой стоит LED-вспышка. Камера фиксирует, как быстро свет достигает объектов, и строит по этому карту глубины кадра.
Точность современных ToF-камер — около сантиметра. Последние флагманы Samsung и Huawei используют их для создания карты боке и для лучшей работы автофокуса в темноте. Последнее, кстати, довольно неплохо. Всем бы такое.
Знание точной глубины кадра будет полезно в эпоху наступающей дополненной реальности — пулять лидаром по поверхностям, чтобы сделать первичный маппинг в 3D, будет куда точнее и проще, чем анализируя изображения камер.
⇡#Проекторное освещение (Projector Illumination)
Чтобы всерьез заняться вычислительным освещением на смартфонах, нам придется перейти от обычных LED-вспышек к проекторам — любым штукам, умеющим проецировать 2D-картинку на плоскость. Для начала сойдет и простая монохромная сетка.
Первый плюс проектора — он может подсветить только ту часть кадра, которая действительно нуждается в подсветке. Больше никаких выжженных лиц на переднем плане — их можно распознать и игнорировать, как это делают лазерные фары современных автомобилей, которые не слепят встречку в движении, но подсвечивают пешеходов. Даже при минимальном разрешении проектора, типа 100 × 100 точек, возможности выборочной подсветки весьма интересны.
Второе, более реальное применение проектора — проецирование невидимой глазу сетки на кадр. С ней можно забить на все эти нейросети для определения глубины — по ней все расстояния до объектов в кадре рассчитываются простейшими алгоритмами компьютерного зрения. Так делали еще во времена Microsoft Kinect, царство ему небесное, и было неплохо.
естественно, здесь нельзя не вспомнить Dot Projector для Face ID в iPhone X и выше. Это пока наш первый шаг в сторону проекторных технологий, но уже весьма заметный.
Будущее фотографии
**Управление 3D-сценой и дополненная реальность**
Время поразмышлять. Судя по происходящему в крупных технологических компаниях, наши ближайшие десять лет будут плотно посвящены дополненной реальности. Это сейчас AR выглядит как игрушка — как способ примерить кроссовки, посмотреть, как будет выглядеть макияж, или тренировать армию США. Завтра мы и не заметим, как станем пользоваться AR постоянно. Плотные потоки бабла от Google и Nvidia уже ощущаются.
Для фотографии это означает, что в моду войдет AR-фото — возможность управлять 3D-сценой. Сканировать пространство, как это делают смартфоны с Tango, добавлять в него новые объекты, как в HoloLenz, вот это вот все. Пусть вас не смущает пока унылая графика современных AR-приложений — как только сюда придут игровые компании с мыльным кинцом, все станет куда лучше.
Помните, как эпично бомбанул Huawei с их фейковым Moon Mode? Для тех, кто пропустил, как это работало: если камера определяла, что вы хотите снять луну на небе, она вклеивала в кадр заранее подготовленную фотографию луны высокого разрешения. Так ведь и правда круче. Настоящий китайский киберпанк. Мы всем интернетом смеялись сильно громче обычного.
Потом я купил себе новые легкие и задумался — а ведь дядька Ляо на сцене был прав. Он дал людям ровно то, что обещано, — луна была настоящей, камера позволяла ее ТАК снять, а остальные вопросы пишите в спортлото. Ведь если завтра смартфон будет предлагать приклеить красивый закат или синее небо вместо облаков — пять миллионов жителей Петербурга будут в восторге!
*В будущем машины будут «дорисовывать» наши фотографии. Так вижу.*
Уже сейчас в камерах Pixel, Galaxy и других Android-смартфонов есть какой-нибудь глупый AR-режим. В одном можно добавлять модели персонажей из мультиков, чтобы сфотографироваться с ними, во втором лепить эмодзи по всей комнате, в третьем наложить маски на лицо, как в снапчате.
Все это лишь наши первые наивные шаги. Сегодня у того же гугла в камере есть Google Lens, который гуглит для вас информацию о любом объекте, на который вы навели камеру. У Samsung то же самое умеет Bixby. Пока эти фичи сделаны, только чтобы унижать людей с айфонами, но несложно представить, как в следующий раз, когда вы будете делать селфи на фоне Эйфелевой башни, телефон скажет: "Знаешь, твое селфи — полный отстой, я вставил на фон нормальную резкую фотку башни с того же ракурса, а тебе там пофиксил прическу и замазал прыщ под губой. Лучше всего сюда подойдет фильтр VSCO L4. Не благодари".
Дальше камера начнет менять траву на более зеленую, друзей на более закадычных, а сиськи на более большие или типа того. Дивный новый мир.
Все это будет выглядеть нелепо, сначала даже ужасно. У дедов-эстетов будет дико бомбить, а борцы за натуральность пойдут по домам отбирать нейросети у населения. Массовая же аудитория будет в восторге. Потому что для нее фотография — лишь один из способов самовыражения и передачи эмоций. Каждый раз, когда появлялся инструмент, чтобы выражать их ярче и эффективнее, все начинали им пользоваться — эмодзи, фильтры, стикеры, маски, аудиосообщения. Список кому-то покажется мерзким, но его легко можно продолжать.
Фотографии «объективной реальности» будут казаться скучными, как фотки семьи за новогодним столом с оливье. Они не умрут, но станут чем-то типа бумажных книг — увлечением эстетов, которые видят в этом особый смысл. «Кому вообще может быть интересно заморачиваться с правильным светом и композицией объектов на сцене, если мой телефон дорисовывает то же самое за меня», — будут недоумевать одни. «Ко-ко-ко-ко-ко», — будут парировать другие.
Массовой аудитории плевать на объективность, им надо, чтобы алгоритмы делали их лица моложе, а отпуск круче, чем у соседа по офису. Дополненная реальность будет дорисовывать реальность за них даже с более высоким уровнем детализации, чем она есть на самом деле. Как бы смешно ни звучало, мы начнем улучшать графику в реальном мире.
И да, как всегда, все начнется с подростков с их «непонятными глупыми увлечениями для дегенератов». Так всегда все начинается. Как только вы что-то перестаете понимать — это и есть будущее. Следите за ними.
⇡#Современные смартфоны с точки зрения вычислительной фотографии
Составить четкую таблицу отличий в камерах смартфонов сложно, потому что из-за огромной конкуренции на рынке, фичи в них появляются практически одновременно. Объективный обзор здесь невозможен, ведь когда какой-нибудь Google анонсирует новый Night Mode, через месяц Samsung копирует его в своей новой прошивке, и «объективно» как бы не докопаешься. Потому я здесь не буду объективным.
Выписал только то, что мне показалось интересным в контексте этого поста, игнорируя совсем уж очевидные вещи типа Dual LED-вспышек, автоматического баланса белого или режима панорамы. В конце статьи есть форма для комментариев, где вы можете что-то дополнить, если вдруг вам известны какие-то инсайды.
⇡#Место для историй о вашем любимом смартфоне
Я взял для сравнения только четыре флагмана, но рынок на этом далеко не заканчивается. Если у вас есть интересный смартфон, напишите в комментариях о фичах его камеры и своих личных впечатлениях от него (нравится или подумываете сменить на что-то другое).
На протяжении истории каждая человеческая технология становилась более совершенной, как только переставала копировать живые организмы. Сегодня тяжело представить автомобиль с суставами и мышцами вместо колес. Самолеты с фиксированными крыльями летают со скоростью 800+ км/ч — птицы машут и завидуют. Аналогов компьютерному процессору вообще не существует в природе.
Самое интересное — чего нет в этом списке. Матриц фотоаппаратов. Мы до сих пор не придумали ничего лучше, как имитировать структуру глаза. Тот же объектив-хрусталик и набор RGGB-колбочек как у сетчатки.
Компьютерная фотография добавила к этому процессу «мозг» — процессор, который обрабатывает визуальную информацию, не только считывая пиксели через зрительный нерв, но и дополняя картинку на основе своего опыта. Да, сегодня это открывает нам кучу возможностей, но есть подозрение, что мы все еще пытаемся махать крыльями в перьях вместо того, чтобы пойти изобрести самолет. Который оставит позади все эти затворы, диафрагмы и фильтры Байера.
Прелесть ситуации в том, что мы даже понятия сегодня не имеем, что это будет.
Большинство из нас умрет, так и не узнав.
И это прекрасно.