Pull to refresh

Изготовление сферической панорамы гуглокамерою

Reading time 4 min
Views 46K
Три дня назад (16 апреля 2014 года) в Google Play было опубликовано приложение «Google Камера», ранее доступное только для владельцев Nexus. Позавчера (17 апреля) я о нём прочёл на AndroidInsider.ru, скачал, попробовал изготовить сферическую панораму. Удалось.

Делюсь впечатлениями.

Прежде всего скажу, что приложение (которое я для простоты стану называть гуглокамерою) устанавливается только на KitKat (Android 4.4). Вчера я пробовал установить его на одну из прошлогодних моделей Galaxy Tab, всё ещё работающих на Jelly Bean (Android 4.2) — эта попытка окончилася неудачею. Однако на мобильник HTC One (даже на первую модель, а не нынешнего года) гуглокамера устанавливается невозбранно.

При запуске гуглокамера открывается на полный экран:

[скриншот]

Слева появляется меню режимов фотовидеосъёмки, из которых я выбрал верхний («Photo Sphere»). Обратите внимание также на шестерёнку в правом углу экрана (в верхнем углу при альбомной и в нижнем при портретной ориентации): шестерёнка эта служит для доступа к дополнительным настройкам. После выбора режима (или просто через секунду) меню прячется налево (откуда его в дальнейшем можно вытащить пальцем), а полупрозрачный тёмный фон меню исчезает, полностью открывая интерфейс сферического фотографирования.

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

Изготовление отдельных фотографий происходит полуавтоматически по принципу, который поясняется подсказкою «для начала поместите точку в круг» («to start, keep dot inside circle»). В центре поля зрения находится кружок, которым необходимо «поймать» точки, расположенные на параллелях сферы на равном расстоянии друг от друга (причём на экваторе сферы, который соответствует горизонту фотографа, таких точек побольше, а на остальных параллелях точек тем меньше, чем ближе параллель к зениту над головою у фотографа или к надиру под ногами); в такие-то моменты фотоаппарат, в точности нацеленный на очередную точку, делает фотоснимок.

Первая такая точка всегда располагается на экваторе и в том месте, где «линия взгляда» аппарата впервые пересекает экватор. После того, как первый снимок был сделан, гуглокамера рассчитывает, что остальные снимки будут сделаны в той же ориентации (портретной или альбомной) и расставляет соответствующее число точек на параллелях сферы; кроме того, фоновый «пол» начинает реагировать на вращение вокруг вертикальной оси; кроме того, именно точка первого снимка становится центральною в прямоугольнике, получающемся в конечном итоге — после развёртки сферы на плоскость.

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

Точки на сфере можно «ловить на прицел» в различном порядке. Например, вон тот видеоролик Google Maps рекомендует двигаться по параллелям: сперва сделать полный круг вдоль горизонта, а затем ещё несколько кругов параллельно ему. Но я заметил, к своему сожалению, что при таком поведении очень сложно топтаться, стоя совершенно на одном и том же месте — а ведь шаг в сторону неизбежно чреват возникновением параллаксных искажений при стыковке соседствующих на сфере фотографий. Поэтому предпочитаю, напротив, сперва целиком пройтись вдоль одного «меридиана» (от горизонта к зениту и надиру, при необходимости уклоняясь в сторону для учёта неравного числа точек на соседних параллелях), и только затем повернуться и продолжить.

Прервать составление набора фотографий на сфере (и перейти к их автоматической стыковке) можно в любой момент (а не только тогда, когда сфера зафотографирована вся целиком). Если фотосфера не завершена, то все несфотографированные части её будут на итоговой фотопанораме чёрными. Ход стыковки отображается отображается (и в процентах, и ползущею полосою завершённости) на общесистемной панели уведомлений в Android.

Приведу для примера фотопанораму, изготовленную мною (и гуглокамерою) позавчера. Она полностью (360°×180°) изображает набережную Геленджика на закате недалеко от входа в «Лагуна-гриль».

[фотопанорама]

Эта фотопанорама имеет размер 9728×4860 пикселов и занимает 5 914 774 байта. Видно, что автоматическая стыковка всюду удалась сносно, кроме пары-тройки мест на брусчатке и парапете набережной.

При просмотре поневоле приходится столкнуться с тем, что к нексусовской гуглокамере недостаёт нексусовского же просмотрщика сферических фотопанорам. Вдогонку: есть такой.

Большýю проблему представляет собою также публикация фотопанорамы в Интернете: многие хостинги картинок попросту не пригодны для хранения этакой громадины. Например, hostingkartinok.com не принимает фотографии более 3 мегабайтов, а FastPic отказывается принимать более 25 мегапикселов (тогда как картинка насчитывает более 47 мегапикселов). Twitter же принимает безропотно, однако ужимает картинку до 1024 пикселов (ровно в 9½ раза) и притом резко снижает её JPEG-качество, так что рассматривать мелкие детали её (в чём, собственно, и состоит главное удовольствие от разглядывания фотопанорам) становится совершенно невозможно. В итоге для Хабрахабра я выложил фотопанораму на PicShare; тем не менее, приходится признаться, что я так до сих пор не нашёл такой фотохостинг, который бы не только принимал фотографии существенного размера, но и поддерживал Twitter Cards для миниатюрного предпросмотра во Твиттере.
Tags:
Hubs:
-12
Comments 33
Comments Comments 33

Articles