Алгоритм Google PhotoSphere на Android 4.3/4.4

Приложение камеры на Android 4.3/4.4 в режиме "Сфера" может сшить фотографии с разных направлений в одну сферическую панораму с очень хорошим качеством.

Изображение результатов:

То, что я собираюсь сделать, - это реализовать приложение для iPad с точно такой же функциональностью.

Я попробовал два подхода:

OpenCV 2.4.8

OpenCV 2.4.8 снабжен конвейером сшивки изображения, который кажется на первый взгляд очень перспективным. Однако у него есть две проблемы:

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

  • Я не мог найти способ создать панораму на 180x360 градусов, например, PhotoSphere, используя этот конвейер. Подача трубопровода с фотографиями во всех направлениях дает только большую панораму с изогнутой границей изображения.

PanoTools

Я также попытался использовать PanoTools/Hugin lib, хотя эта библиотека поддерживает предопределенные направления фотографий, результат довольно плох и неустойчив. Кроме того, я попытался использовать Focal (beta) app в Google Play, чей сферический режим также основан на PanoTools/Hugin, их результаты (в сферическом режиме) кажутся не лучше наших.


Мои вопросы:

  • Существуют ли библиотеки, которые могут делать то, что делает Google PhotoSphere? Поскольку я не разрабатываю для коммерческого использования, любые библиотеки с открытым исходным кодом приемлемы.
  • Есть ли хорошие алгоритмы (или технические отчеты, научные статьи)? Если они есть, то какой из них лучше?
  • Как Google реализует свою собственную PhotoSphere? Любое предложение оценено.

Ответы