Как устроен Photosynth от Microsoft

Не так давно Microsoft сначала анонсировала, а затем и выпустила (в качестве technology preview) довольно красивую "игрушку" под названием 'Photosynth'.

Это технология, позволяющая организовать коллекцию фотографий в виде (почти) трехмерного окружения с удобной навигацией между фото. То есть просмотр набора фотографии одной и той же сцены (например - Московского Кремля) будет выглядеть почти как реальная прогулка по трехмерному "настоящему" Кремлю с разглядыванием всех достопримечательностей.

Для большей понятности лучше посмотреть демонстрационные видео или попробовать саму живую демонстрацию.

Будучи специалистом в области машинного зрения и анализа изображений мне стало интересно - а как это может быть устроено?

Что внутри?

Во-первых нужно сказать, что Photosynth вырос из совместной работы одного из американских университетов и Microsoft под названием "Photo Tourism" и разработок компании Seadragon по быстрому увеличению/уменьшения снимков. Кстати, на сайте университета, посвященном PhotoTourism - http://phototour.cs.washington.edu/ есть java-демо раннего варианта этой технологии, еще не такого удобного, как PhotoSynth. Этот вариант работает, разумеется, не только под IE. Есть и видео на YouTube c рассказом для тех, кому недосуг запускать и испытывать демо.

Из внутреннего устройства меня в основном интересовала часть отвечающая за реконструкцию и сопоставление фотографий. Судя по статье на SIGGRAPH 2006, устроено это так:

  1. Между фотографиями ищутся соответствия (соответствующие точки). Делается это с помощью алгоритма Scale-Invariant Feature Transform (SIFT), разработанного Loewe и коллегами.

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

  2. Затем, рассчитывается фундаментальная матрица (вот тут объясняется что это такое), связывающая изображения попарно. После чего выстраиваются "треки", прослеживающие перемещения одних тех же точек на многих изображениях.

  3. Знание положения одних и тех же точек на разных фотографиях позволяет рассчитать 3D структуру сцены (положения точек в трехмерном пространстве). Делается это с помощью библиотеки sparse bundle adjustment (SBA). Кстати, этот шаг довольно затратный (в смысле вычислительных ресурсов). Считается это все от нескольких часов до нескольких дней чистого машинного времени.

В результате получается разреженное (но довольно обширное) облако 3D точек, информация о положениях камер (регистрация фотографий) плюс знания о том на какой фотографии какие точки видны. Этого достаточно для "псевдотрехмерной" навигации между наборами фотографий.

Впечатления

После работы с Photosynth остается приятное впечатление. Весьма интересная штука! Непонятно насколько в действительности удобно, пока оценить сложно - но вообще весьма любопытно.

Понятно, что свои коллекции так организовывать у меня вряд ли получилось бы. Я снимаю обычно не так много фотографий, и к тому же они все обычно бываются довольно разрозненны (в плане мест съемки). А фотографировать все дорожки и улицы, по которым я хожу на отдыхе, чтобы потом это связать в единую сцену - это уж слишком.

Но если использовать фотографии многих и многих людей (что, по-моему, авторы и хотят предложить) можно составить большие протяженные сцены (чуть ли ни целые города в перспективе), куда уже потом вполне можно будет "вставлять" свои пару десятков фотографий, если захочется. И можно будет потом "побродить" по городу, и с удовольствием найти себя в своих любимых местах посещения.

Что говорят люди

На одном российском сайте новостей даже разгорелась небольшая дискуссия (в комментариях к статье) по поводу этой технологии. В большинстве своем люди выражали скепсис по поводу внедрения Photosynth в жизнь.

Примерно половина, правда, аргументировала свою позицию тем, что Microsoft - "отстой вообще" и ничего хорошего сделать в принципе не может, в качестве доказательства приводя факты в духе "у меня на ноутбуке стоит бета 2007 офиса, так она глючит!". Это, конечно, несерьезно. Более разумные люди говорили что непонятно как Photosynth справится с различными условиями съемки (освещения, погоды и т.д.), как разберутся с "призраками" (термин, означающий движущийся предмет, который при склейке двух картинок снятых в разное время превращается в размазанное полупрозрачное пятно) - ведь люди и машины все время движутся. Звучали даже обвинения, что, мол, вся эта демонстрация - более или менее фальсификация.

По поводу высказанных опасений могу сказать следующее:
  1. Разные условия съемки действительно могут помешать при поиске соответствий на фотографиях (теоретически, довольно сильно), но не более того. Photosynth же не делает панораму или мозаику... В каждый момент времени он показывает всего одну картинку. А раз так - то смена освещения на них не должна ничему помешать, если удалось картинки верно зарегистрировать.

    Тут же можно сказать, что обвинения в фальсифткации беспочвенны - демонстрационные коллекции в демо к PhotoTourism (например - Trevi fountain) включают в себя фото взятые с сайта Flickr, сделанные в разное время разными людьми.

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


  2. То же самое и с "призраками". Изображения не склеиваются - значит и призраков не возникает. Да, люди и машины на двух разных фотографиях одной и той же сцены перемещаются. Ну и что? Если достаточная часть сцены статична (чтобы можно было зарегистрировать фото) - то и проблем нет. Кстати, нужно сказать что у Microsoft вообще и у Szeliski в частности (это один из авторов технологии) есть масса серьезных наработок (статей, патентов) по поводу создания мозаик из фотографий, в частности - устранения "призраков".

Собственное мнение

Выглядит многообещающе, и вполне реально. Ни в каких подтасовках я MS не подозреваю - не того масштаба люди это делали. Что имеет место - это использование удачных сцен для демонстрации (но ничего зазорного в этом нет, во-первых в каждой статье подбираются примеры чтобы наиболее выпукло продемонстрировать достоинства новой идеи, а во-вторых это ведь всего лишь первый шаг и смешно было бы требовать чтобы заработало сразу и везде).

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

Так что мое мнение - скорее всего это все-таки сделают. Но по-моему - не раньше чем через год-два.