Преобразование 2:1 эквидистантная панорама на Кубе карте
Я'м работает на простого зрителя 3D панорама на сайте. Для мобильного исполнения причин, почему я'м с помощью three.js` рендера с помощью CSS3. Для этого нужна карта куб, разделенный на 6 отдельных изображений.
Я'м запись изображения на iPhone с Google Android Скачать приложения, или подобные программы, которые создают 2:1 эквидистантные панорамы. Я потом изменить и преобразовать их в кубической карты с этого сайта: http://gonchar.me/panorama/ (вспышка)
Желательно, я'd, как, чтобы сделать преобразование себя, либо "на лету" в three.js, если это's возможные, или в фотошопе. Я нашел Андрея Hazelden'действия Photoshop, и они, кажется, довольно близко, но прямой конвертации доступен. Есть ли математический способ, чтобы преобразовать эти, или какой-то скрипт, который это делает? Я'd, как, чтобы избежать прохождения через 3D-приложения, такие как блендер, если это возможно.
Может быть, это длинный выстрел, но я думал, что я'д спросить. У меня есть хороший опыт с JavaScript, но я'м довольно новыми для three.js
. Я'м также решаются полагаться на функциональность в WebGL, так как кажется, либо медленно или глючит на мобильных устройствах. Поддержка тоже еще не везде.
Если вы хотите сделать это на стороне сервера, есть много вариантов. http://www.imagemagick.org/ имеет кучу инструментов командной строки, которые можно нарезать изображение на куски. Можно поставить команду, чтобы сделать это в сценарий, и просто запустить, что каждый раз у вас новый имидж.
Трудно сказать совсем какой алгоритм используется в программе. Мы можем попытаться перепроектировать совсем то, что происходит при подаче квадратной сетке в программу. Я'вэ использовал сетка из Википедии
Что дает . это дает нам ключ к пониманию того, как построена коробка.
Визуализация сферы с линиями широты и долготы, один он, и куб вокруг него. Сейчас проект с точки в центре сферы производит искаженной сетки на куб.
Математически взять полярных координатах R, θ, ø, для сферы Р=1, 0 < θ < π, -π/4 < ø < 7π/4
в центре проекта на Кубе. Сначала мы разделим на четыре региона по широте -π/4 < ø < π/4, π/4 < ø < 3π/4, 3π/4 < ø < 5π/4, 5π/4 < ø < 7π/4. Это будет либо проект к одной из четырех сторон верхней или нижней части.
Предположим, что мы находимся в первой стороне -π/4 < ø < π/4. Центральная проекция (грех θ потому что ø, грех θ грех ø, COS и) будет (грех θ потому что ø, грех θ грех ø, значение cos θ), которая попадает в Х=1 самолет, когда
так
и прогнозируемая точка
Если кроватка θ / соѕ ø | < 1 это будет на передней грани. В противном случае, она будет проецироваться на верхней или нижней, и вы будете нуждаться в другой проекции для этого. Лучшего теста для верхнего используется тот факт, что минимальное значение функции COS ø будет Косинус π/4 = 1/√2, поэтому проекции точки всегда на высоте если кроватка θ / (1/√2) > 1 или Tan θ < 1/√2. Это работает как θ < 35º или 0.615 радианах.
Положить это вместе в Python
В
проекции
функция принимаеттэта
изначений фи
и возвращает координаты в Кубе от -1 до 1 в каждом направлении. В cubeToImg берет (х,у,Z) координат и преобразует их в выходной координаты изображения.Этот алгоритм, кажется, сделать геометрию право использовать изображение Букингемского дворца, мы получаем
Это, кажется, сделать большинство линий в правой мощения.
Мы получаем несколько артефактов изображения. Это из-за того, что 1 на 1 карту пикселей. Что нам нужно сделать, это использовать обратное преобразование. А чем цикл через каждый пиксель в исходном и найти соответствующий пиксель в цель, мы петле через целевые изображения и найти ближайший исходного пикселя.
Результаты этого стоят
Учитывая отличную принято отвечать, я хотел бы добавить мой соответствующий реализации C++, исходя из рад.
Для тех, кто не знаком с OpenCV, думать
мать
в качестве изображения. Мы сначала построим две карты, которые перераспределяют от изображения эквидистантная в соответствующих кубической карты лицо. Затем, мы делаем тяжелую работу (т. е. сопоставление с интерполяцией) с помощью OpenCV.Код можно сделать более компактным, если читаемость не вызывает опасений.
Учитывая следующие данные:
Следующие лица создаются:
Изображение предоставлено Optonaut.
Я написал скрипт, чтобы отрезать автоматически кубической карты на отдельные файлы (параметра posx.ПНГ, negx.ПНГ букет.ПНГ, negy.ПНГ, posz.PNG и negz.ПНГ). Он также будет упакуйте 6 файлов в один .zip-файл.
Источник здесь: https://github.com/dankex/compv/blob/master/3d-graphics/skybox/cubemap-cut.py
Вы можете изменять массив в набор файлов изображения:
Преобразованные файлы:
Здесь'ы (наивно) модифицированная версия Ива Альба'ы совершенно фантастический ответ, который преобразует одно лицо за раз, выплевывает шесть различных изображений и сохраняет оригинальный образ'ы тип файла.
Кроме того, большинство случаев, вероятно, ожидать шесть отдельных изображений, главным преимуществом преобразования одно лицо за раз заключается в том, что она позволяет работать с огромными изображениями намного меньше памяти.
Нашел этот вопрос, и даже если ответы хорошие, я думаю, есть еще некоторые раскрыты, так что вот мои два цента.
Во-первых: если у вас действительно есть для преобразования изображений сами (т. е. из-за некоторых конкретных требований программного обеспечения), Дон'т.
Причина в том, что, хотя есть очень простое сопоставление между эквидистантная проекция и кубической проекции, отображение между областями не просто: когда вы установить соответствие между конкретной точкой вашего пункта назначения, изображения и точку в источнике с элементарный расчет, как только вы преобразовать обе точки в пикселях, округляя тебя очень исходные приближения это вовсе'т считаю размер пикселей, и качество изображения обязан быть низким.
Во-вторых: даже если вам нужно сделать преобразование во время выполнения, вы уверены, что вам нужно сделать преобразование на всех? Если есть некоторые очень жесткие проблемы с производительностью, если вам просто нужен скайбокс, создают очень большой сферы, сшить эквидистантной texure на него, и от вас идут. Три JS обеспечивает сфера уже, насколько я помню ;-)
В-третьих: НАСА предоставляет инструмент для преобразования между все мыслимые прогнозы (я только что узнал, испытал его, и работает как шарм). Вы можете найти его здесь:
Проектор Г. — Глобальный Проектор Карта
и я считаю разумным думать, что ребята знают, что они делают ;-)
Надеюсь, что это помогает
Обновление: получается, что "парней" И знаете, что они делают до какого-то момента: созданный кубической карты имеет отвратительную границу, которая делает преобразование не так просто...
Обновление 2: нашли окончательным инструментом для эквидистантной к кубической карты преобразования, и это's посетило
erect2cubic
.Это'ы небольшая утилита, которая создает скрипт, который нужно скормить Хугин, таким образом:
(информация почерпнутая из Винай'ов хаки Страница)
и будет генерировать все 6 граней кубической карты. Я'м использовать его для моего проекта, и это работает!
Единственным недостатком этого подхода является то, что erect2cubit скрипт `она's не в стандартном дистрибутиве Ubuntu (что я'м через) и мне пришлось прибегнуть к инструкции в этой ссылке:
Блог с описанием как установить и использовать erect2cubic
чтобы узнать, как установить его.
Полностью стоит!
сайт cmft студия преобразование поддерживает
фильтрации
различныхпрогнозы РВБ/ЛДР
доcubemaps
.https://github.com/dariomanesku/cmftStudio
Здесь'с JavaScript-версию Benjamn Добелл's код. В
convertFace
необходимо пройти два `ìобъекты mageData и лицо удостоверение (0-6).Предоставленный код можно смело использовать в веб-работник, поскольку она не имеет зависимостей.
Https://github.com/denivip/panorama очень простое приложение c++, которая преобразует эквидистантная панорама куб карты на основе ответа на Ива Альба =>
Возможно, я что-то пропустил. Но кажется, что большинство, если не все представлены код трансформации может быть несколько некорректно. Они принимают сферическую панораму (эквидистантная --- 360 градусов по горизонтали и 180 градусов по вертикали) и, кажется, преобразуются в грани куба, используя декартово <-> цилиндрические трансформации. Они не должны использовать декартово <-> сферические трансформации. См http://mathworld.wolfram.com/SphericalCoordinates.html
Я полагаю, что пока они обратного расчета от кубик в панораму, то она должна отработать. Но изображения лиц куб может незначительно отличаться при использовании сферического преобразования.
Если я начну с этого эквидистантная (сферическая панорама):
Тогда, если я использую цилиндрические преобразования (что я не 100% уверен, что это правильно в этот раз), я получаю такой результат:
Но если я использую сферической трансформации, я получаю такой результат:
Они не то же самое. Но мой сферический результате преобразования, кажется, совпадает с результатом Данке се, но его ссылка не показать таким преобразованиям, которые он использует, насколько я могу прочитать его.
Так что я недоразумение кода используется многие из участников этой темы?
Я создал решение для этой проблемы с использованием OpenGL и сделали инструмент командной строки вокруг него. Он работает как с изображениями и видео, и это самый быстрый инструмент, который я нашел там.
Convert360 - проект на GitHub.
В OpenGL шейдеров - фрагмент шейдер, используемый для перепроецирования.
Использование такое же простое, как:
Чтобы получить что-то вроде этого:
Существуют различные представления карты окружающей среды. Здесь хороший обзор.
Обзор - Панорамные Изображения
Если вы используете фотосферы (или любое приложение панорамы на то пошло), вы, вероятно, уже имеют горизонтальный широта / долгота представление. Затем вы можете просто нарисовать текстурированный three.js SphereGeometry. Вот учебник о том, как визуализировать землю.
Туториал - как сделать Землю в WebGL?
Удачи :).