Американские разработчики создали алгоритм для превращения обычных фотографий в трехмерные, причем с реалистично дорисованными фрагментами за объектами на снимке. Алгоритм качественно определяет границы объектов, находящихся на разном расстоянии от камеры, разделяет фрагменты изображения по глубине и дорисовывает пустые области на дальних фрагментах с помощью нейросети. Статья будет представлена на конференции CVPR, а код и примеры работы алгоритма доступны на странице авторов.
Трехмерные изображения и видео дают гораздо большее чувство погружения и реалистичности, чем двумерные, но для их создания необходимо либо использовать компьютерную графику, либо, если речь о съемке реального мира, применять сложные системы из камер и алгоритмов, которые фактически недоступны обычным пользователям. В последние годы алгоритмы для работы с изображениями значительно развились и, например, в Facebook применяется функция, позволяющая превратить обычную фотографию в псевдотрехмерную. Она отделяет основной объект от остальной фотографии и как бы выносит его на передний план.
Подобным образом работают и другие алгоритмы, но у этого метода есть фундаментальное ограничение — из двумерного изображения невозможно достоверно получить фрагменты, которые в момент съемки были закрыты другими объектами. Обычно это решается тем, что недостающие части просто заливают похожими цветами, но результат получается размытым и лишь отдаленно непохожим на остальную фотографию. Кроме того, достаточно сложно качественно разделить объекты по дальности от камеры.
Разработчики из Политехнического университета Виргинии и Facebook под руководством Цзя Биня Хуана (Jia-Bin Huang) создали алгоритм, который позволяет добиться более качественного закрашивания фона за основными объектами в кадре.
Исходные данные для алгоритма — это двумерная цветная фотография с данными о глубине, то есть о том, насколько далеко от камеры был расположен объект в каждом пикселе в момент съемки. В современных смартфонах камеры зачастую уже на этапе съемки создают карту глубины для фотографий, а в противном случае существуют достаточно качественные алгоритмы для последующего создания карты глубины.
На первом этапе алгоритм разделяет плоское изображение на отдельные слои с существенно различающейся глубиной. Обычно в картах глубины со смартфонов переходы даже между очень разными по глубине областями достаточно плавные. Поэтому авторы решили сначала увеличивать резкость изображения, чтобы края объектов были контрастными по глубине. Затем алгоритм выделяет пограничные области с помощью порога разницы в глубине. Из-за неидеальной точности карт глубины в результате образуются не только длинные границы, но и разделенные, а также отдельные артефакты внутри объектов или на фоне, поэтому после первичной разметки алгоритм удаляет артефакты и объединяет соседние длинные части границ.
В результате образуется набор из областей на переднем плане, которые по сути уже не нужны для следующего этапа, и областей на заднем плане с пустыми областями, которые необходимо хотя бы частично реалистично заполнить. Работая с областями на заднем плане алгоритм начиная от каждого пикселя границы «идет вдаль» выделяя по одному соседнему пикселю, и делая так 40 циклов. В результате по обе стороны от границы образуются две области: уже заполненная пикселями фотографии область с одной стороны, которая используется как контекст для заполнения пустой области по другую сторону.
После того, как области определены, алгоритм сначала дорисовывает границы внутри пустой области, а затем отдельно дорисовывает цветные пиксели и пиксели глубины. Для обоих слоев используется нейросеть на базе сверточной сети U-Net. Она была обучена на 118 тысячах изображений из датасета COCO, состоящего из фотографий множества разных объектов в разных местах.
В результате разработчики получили алгоритм, который достаточно качественно выделяет на фотографиях объекты на разных расстояниях и заполняет области за ними более реалистично, чем аналогичные алгоритмы других разработчиков. Авторы опубликовали несколько роликов с фотографиями и перемещающимся ракурсом, а также создали интерактивную страницу, на которой можно на конкретных снимках сравнить различные версии алгоритма между собой, а также с аналогичными алгоритмами других авторов.
В 2018 году разработчики из Google представили алгоритм, позволяющий создавать фотографии с новых ракурсов с реалистично заполненными пустыми областями. Он получает пару кадров с двухкамерного смартфона, разбивает изображение на множество слоев с объектами, отсортированными по глубине, а затем «пересобирает» слои для нового ракурса.
Григорий Копиев