Каждый раз, делая обзор на очередной смартфон и упоминая «сенсор глубины», я чувствую, что ввожу читателя в заблуждение.
Сегодня этот загадочный датчик глубины встречается на подавляющем большинстве устройств, ведь он так важен для портретного режима с красивым размытием фона (эффект боке, живой фокус, режим диафрагмы и пр.).
А может и не важен вовсе? Возможно, вы встречали на просторах интернета разоблачения, в которых люди полностью заклеивали сенсор глубины, а смартфон продолжал размывать фон на портретных снимках, как ни в чем не бывало. Получается, телефоны умеют определять глубину сцены и без сенсора глубины? Зачем же он тогда нужен?
Ну и главный вопрос — как вообще устроен этот «сенсор»? На чем основан принцип его работы?
Бегло просмотрев несколько популярных статей и роликов в интернете, я с удивлением обнаружил, что многие люди думают, будто этот сенсор посылает световые импульсы и определяет время задержки отраженного луча. То есть, как-то активно участвует в построении карты глубины.
А вот, к примеру, на сайте Popular Science (Популярная наука) приводится следующее объяснение (в моем вольном переводе):
Датчик глубины (depth sensor) предназначен именно для определения глубины сцены. В топовых современных смартфонах датчик глубины постепенно исчезает, так как его заменяют другие камеры, умеющие ощущать глубину и объем сцены, например широкоугольная или телеобъектив.
popsci.com/extra-lenses-in-your-smartphones-camera-explained
Камеры, ощущающие глубину — это, конечно, очень интересно, но давайте разберемся, что же происходит на самом деле.
Зачем вообще нужен какой-то сенсор глубины?
Современный смартфон должен не просто «видеть» через камеру плоскую картинку, но и «понимать», на каком расстоянии находится каждый объект в сцене. То есть, он должен уметь «ощущать» глубину сцены. И на это есть целый ряд причин.
Например, благодаря умению построить карту глубины, телефоны научились делать красивые фотографии с размытием фона. Да, часто на таких снимках заметна искусственная обработка, но иногда результат практически не отличим от работы зеркального фотоаппарата:
Сделать что-то подобное при помощи оптики нереально, так как единственный параметр, отвечающий за степень размытия фона — это диаметр входного зрачка объектива (проще говоря, размер дырки, через которую свет попадает в объектив смартфона).
На самых дорогих камерофонах он не превышает и 4 миллиметров, в то время, как даже у бюджетного объектива зеркального фотоаппарата он будет минимум в 2 раза больше (а у дорогих объективов — в 10-15 раз).
Помимо этого, на смартфоны постепенно приходит дополненная реальность (AR), позволяющая определять размеры объектов, расстояние между предметами и делать много всего удивительного (примерять вещи и различные аксессуары, смотреть, как будет выглядеть мебель в интерьере своего дома и многое другое).
Также умение определять глубину позволяет создавать более надежные и удобные способы блокировки смартфона (например, технология FaceID, которая делает «трехмерный» снимок лица).
Многие производители пытаются придумать новые способы управления смартфоном при помощи бесконтактных жестов, а для этого также нужно хорошо понимать положение рук в пространстве.
Но как смартфоны определяют глубину и какие датчики для этого используются?
Три кита
На сегодняшний день существует всего 3 основных метода, позволяющие смартфонам «ощущать» объем:
- Стереозрение. Это и есть «сенсор глубины», который используется в подавляющем большинстве современных смартфонов и о котором мы дальше поговорим подробнее.
- Структурированный свет. Самый популярный пример — это уже упомянутая технология разблокировки по лицу FaceID на iPhone. Суть ее заключается в том, чтобы осветить сцену каким-то невидимым для глаз шаблоном (рисунком) в виде точек, размещенных в определенном порядке, или в виде горизонтальных/вертикальных линий, а затем сделать снимок и проанализировать искривление шаблона.
- Измерение времени полета света (ToF-сенсор). Сегодня на рынке существует не более десятка моделей смартфонов с таким сенсором глубины. Он буквально измеряет время, которое требуется свету, чтобы долететь до каждого объекта в сцене и вернуться обратно на сенсор. А зная скорость света, можно легко вычислить и расстояние. К этому методу относится также лидар (LiDAR), дебютировавший на мобильных устройствах с выходом iPad Pro 2020.
Открою небольшую тайну. В некоторых смартфонах в качестве всем нам знакомого датчика приближения (тот, который блокирует экран во время входящего звонка) используется самая настоящая ToF-камера с лазерным излучателем и специальным высокочувствительным сенсором, измеряющим время полета света и определяющим точное расстояние до объекта. Работает он, естественно, гораздо точнее и качественнее обычных инфракрасных датчиков, встречающихся на подавляющем большинстве устройств.
Так вот, возвращаясь к нашей теме, горькая правда заключается в том, что для первого метода определения глубины сцены (стереозрение) не нужны дополнительные датчики.
Если на смартфоне уже есть две камеры (например, основная и ультраширокоугольная, или основная и телеобъектив), использовать еще третий «сенсор глубины» (то есть, еще одну камеру) нет никакого смысла.
Дополнительный «сенсор глубины» на 99.9% смартфонов — это банальная попытка ввести покупателя в заблуждение.
Возьмем, к примеру, смартфон Redmi Note 9 Pro, у которого сзади размещено 4 камеры:
Здесь уже есть основная и ультраширокоугольная камеры (две верхние). И этого более, чем достаточно для определения глубины сцены по принципу стерео-зрения. Но компания пытается обмануть покупателя, показав больше камер, чем у конкурентов. И таких примеров масса: Samsung Galaxy A51, Xiaomi Poco X3, OnePlus Nord, Huawei Y8p и мн. др.
Так как «сенсор глубины» — это самая обыкновенная камера с очень низким разрешением, то стоимость такой матрицы составляет от 30 центов за 2 Мп сенсор до 50-60 центов за 5 Мп сенсор (правда, за последний год цены немного выросли из-за колоссального спроса на столь дешевые компоненты).
Производитель за пару баксов может легко набросать пару лишних камер на корпус и затем использовать это количество в качестве конкурентного преимущества, внушая покупателям, что смартфон с пятью камерами снимает ну почти как зеркалка.
Еще раз повторю ключевую мысль прежде, чем мы продолжим: все современные смартфоны, за исключением буквально 10-15 флагманских моделей, определяют глубину сцены при помощи двух обыкновенных камер и метода под названием стереозрение. Да и те 10-15 флагманов также используют в основном стереозрение, а ToF-сенсор служит лишь как дополнительный инструмент.
Многие аппараты (Samsung Galaxy S20/Note20, Huawei P40, iPhone 11 Pro и прочие), легко обходятся основными камерами (широкоугольной, ультраширокоугольной или телеобъективом). Другие же устанавливают дополнительную камеру за три копейки исключительно в маркетинговых целях без малейшей технической необходимости.
А некоторые и вовсе идут на серьезный обман — устанавливают 2-Мп низкокачественную камеру а-ля «сенсор глубины», а сами используют широкоугольную камеру, так как ее качество гораздо выше.
Как смартфон определяет глубину, используя стереозрение и 2 камеры?
Итак, мы определились, что никакого «сенсора глубины» нет. Это обычная (и зачастую — лишняя) камера. Но что же такое стереозрение и как оно работает? Зачем нам нужны две камеры, ведь есть смартфоны, которые умеют размывать фон даже с одной камерой?
Наш мозг использует множество техник для определения глубины и объема сцены, например:
- Перекрытие. Когда один объект перекрывает другой, мы понимаем, что первый находится ближе к нам, чем второй.
- Линейная перспектива. Например, когда рельсы сужаются, мы понимаем, что они уходят вдаль, в глубину.
- Фокус. Если какой-то объект не в фокусе, мы понимаем, что он находится дальше того объекта, который в фокусе.
- Тени. Тени помогают нам почувствовать объем даже на плоской картинке.
- Относительный размер. Если мы видим человека размером с дом, то понимаем, что дом находится гораздо дальше человека, так как знаем относительные размеры разных объектов.
Можно продолжать этот список, но главная причина, по которой мы ощущаем объем, заключается в другом.
У каждого из нас есть два глаза, размещенных на небольшом расстоянии друг от друга. Причем один из них — не запасной и не для красоты или симметрии. Если мы будем смотреть на что-то поочередно то одним, то другим глазом, тогда те объекты, что расположены ближе к нам, будут смещаться в стороны гораздо сильнее тех объектов, что расположены дальше.
Очевидно, что так происходит потому, что правый глаз видит всю сцену как бы с правой стороны, а левый — с левой:
На картинке выше в левом глазу дерево немного сместилось влево, а цветок — вправо. А в правом глазу получилось наоборот — цветок оказался немного левее дерева.
Теперь мозг берет «картинки» из двух глаз и анализирует смещение каждой «точки». Возьмем левый глаз. Чем сильнее точка сместилась вправо (относительно такой же точки в правом глазу), тем ближе она находится к нам и наоборот, чем сильнее сместилась влево — тем она дальше от нас.
Это хорошо видно на следующей анимации, где поочередно меняются картинки, которые увидел левый и правый глаз:
Обратите внимание, как камни в левом нижнем углу смещаются вправо (значит, находятся ближе), в то время, как деревья в правом верхнем углу уходят влево (находятся дальше). Получается, даже меняя поочередно две картинки, мы уже можем ощутить объем.
Вот еще одна наглядная анимация:
Вроде бы всё просто и понятно. Но как же это делает смартфон? Как конкретно он строит карту глубины всей сцены, используя две камеры?
Чтобы разобраться с этим, давайте рассмотрим простой пример.
Итак, у нас есть какая-то точка в пространстве и смартфон с двумя камерами. Свет от точки проходит через объектив каждой камеры и попадает на матрицу. Мы получили два плоских снимка этой точки и не можем определить расстояние до нее:
Думаю, вы обратили внимание на одну странность — почему матрица камеры находится перед самой камерой, хотя должна находиться за объективом? На самом деле, мы просто разместили ее так схематически для простоты понимания. Это ни на что не влияет и принцип работы сохраняется.
Нам нужно узнать расстояние до красной точки. Мы знаем только расстояние между двумя камерами (производитель разместил их на определенном расстоянии друг от друга). Также нам известно фокусное расстояние камер, то есть, расстояние от центра линзы до матрицы, на которую она проецирует изображение:
На первый взгляд кажется, что сделать это невозможно и нам ничего не дает знание расстояния между камерами.
К слову, если мы используем камеры с разными фокусными расстояниями (например широкоугольную и телеобъектив), тогда нужно просто сделать кроп на снимке с более широким углом (вырезать часть кадра) и дальше уже работать, как с идентичным фокусным расстоянием:
Итак, давайте посмотрим, как свет от красной точки P упадет на наши матрицы и превратится в точки на снимках:
Обратите внимание на то, что точка на левом снимке оказалась справа от центра матрицы, а на правом снимке эта же точка оказалась левее центра. Если бы мы приняли центр за начало отсчета, тогда точка слева ушла бы по горизонтальной оси в плюс (вправо), а справа — в минус (так как центр — это 0):
И как все эти рисунки помогут нам найти расстояние Z (от камеры до точки в пространстве)?
Думаю, вы уже давно заметили, что все эти точки образовывают треугольники. В частности, здесь можно увидеть два подобных треугольника. Один проходит через наши красные точки на двух снимках и точку в пространстве (зеленый треугольник слева), а другой проходит через центры объективов и точку в пространстве (синий треугольник справа):
Эти треугольники подобны, а значит, их стороны соответственно пропорциональны и все углы соответственно равны. И вот уже из этого подобия мы можем легко определить расстояние от камеры до любой точки в пространстве, то есть, найти величину Z.
Я упущу несложные математические расчеты и просто запишу конечный результат:
Z = F * D/(d1-d2)
Здесь F — это фокусное расстояние объектива (известная заранее характеристика нашей камеры), D — расстояние между камерами (также известно), а d1 и d2 — смещение конкретной точки (пикселя) на снимках с левой и правой камер.
Другими словами, смартфон делает ровно то же, что и наш мозг — определяет глубину сцены только по смещению (несоответствию) пикселей на левой и правой фотографии (или на «картинке» в левом и правом глазу).
Получается, всё, что нам нужно — это две (любые) камеры и больше ничего. Соответственно, третья камера («сенсор глубины») совершенно бесполезна.
Но мой смартфон делает превосходные портреты даже с одной камерой!
Некоторые смартфоны действительно могут определять глубину сцены даже с одной камерой. И делается это при помощи искусственного интеллекта.
Опять-таки, смартфон пытается копировать работу нашего мозга. Когда мы смотрим на сцену одним глазом (или двумя глазами смотрим на плоскую фотографию), то легко определяем, какой объект находится дальше, а какой — ближе.
Смартфоны также учатся сегментировать фотографии и выделять на снимках людей. Для этого нужно обучить нейронную сеть отличать человека от других объектов.
Но даже в случае с одной камерой, нейросеть берет дополнительную информацию с двух снимков. Двух снимков?! Но откуда же берется второй снимок, если камера всего одна?
Дело в том, что очень многие современные матрицы имеют фазовый автофокус Dual Pixel. То есть, фактически каждый пиксель на матрице состоит из двух отдельных «пикселей» (фотодиодов), каждый из которых собирает информацию только с половины линзы. Скажем, левый пиксель берет информацию с правой половины линзы, а правый — с левой половины:
Можно сказать, что у нас появляются две камеры (две части одной линзы) с небольшим расстоянием. Да, это крошечное расстояние, но его достаточно, чтобы уже заметить какое-то смещение пикселей.
Вот два примера таких снимков, полученных с двух половин линзы (Dual-Pixel 1 и Dual-Pixel 2) одной камеры:
Как видите, смещение на примере слева более ярко выражено, так как лампочка находится гораздо ближе к камере, нежели человек на втором снимке.
Использование двух камер (то, о чем мы говорили выше) будет давать гораздо большее смещение, чем использование одной камеры с фазовым автофокусом Dual Pixel. Это можно наглядно увидеть на следующем примере (слева — одна камера, но разные части линзы, а справа — две камеры на небольшом расстоянии друг от друга):
Но некоторые смартфоны умудряются делать портретные режимы даже без двух камер или двух изображений с разных половин одной линзы. Правда, качество такого размытия заметно уступает традиционному стереозрению.
Всё, о чем я говорил выше, касается только пассивной технологии определения глубины сцены, когда смартфон просто «смотрит» на мир через камеру/камеры и никак не пытается с ним взаимодействовать.
Однако существует и более продвинутая активная технология, когда смартфон изучает сцену при помощи лазера (ToF-сенсоры и лидары). Но об этом я подробно расскажу как-нибудь в другой раз.
Алексей, глав. редактор Deep-Review
P.S. Не забудьте подписаться в Telegram на наш научно-популярный сайт о мобильных технологиях, чтобы не пропустить самое интересное!