Панорамы: быстро или качественно? И то и другое!

в 6:42, , рубрики: arduino, DIY, панорамная фотография, Песочница, метки: , ,

Всем привет!

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

Эээ… а ну да, панорамы. Хобби _вообще_, в моем понимании занятие расслабляющее, скорее приятное времяпрепровождение, но _в_частности_ после сбора первой пробной серии меня стала преследовать мысль, что хоть оно конечно и приятно, но в моем исполнении смахивает скорее на убийство этого самого времени. (Я хочу обратить Ваше внимание на эти, на первый взгляд не заметные слова «в моем исполнении», все что будет описано далее — в основном будет касаться именно моего опыта. Если у других нормальных людей результаты резко отличаются в лучшую сторону, то дайте мне ссылку туда, а я вам буду благодарен.)

Ручная работа

Для дальнейших рассуждений надо вооружиться некими исходными данными — к примеру сферическая панорама требует около 96 кадров с 48мм объективом, что растягивает процесс съемки на час и более. Час съемки может быть вполне себе увлекательным — к примеру сессия для плакатов с участием приятных глазу особ противоположного пола, но что касается панорам — тут все совсем подругому. Кто пробовал снимать пано вручную знает что это процесс скорее механический нежели творческий. Действительно: скачешь вокруг штатива с фотоаппаратом как ненормальный, полностью сконцентрировавшись на том чтобы довернуть прибор на нужный угол и нажать кнопку так чтоб не получить «шевеленку». И так 96 раз. И это для одной панорамы (и еще умудриться не забыть снять кадр под штативом — иначе получится далеко не камильфо). Почему так много? Потому что так надо. Сейчас объясню на прмере. Так уж получилось что первые опыты я ставил на камере имени товарища Panasonic, с объективом 24мм при кропе 2, что дало в итоге 48 эквивалентных миллиметров на полный кадр. При эквивалентном фокусном расстоянии 48мм объектив видит 41.1 градуса по горизонтали и 28.1 по вертикали (для кадра с пропорциями 3:2). Для съемки сферической панорамы по горизонтали требуется сделать (360 / 41.1) + 30% = 12 кадров округленно. То есть через каждые 30 градусов.. А по вертикали (180 / 28.1) + 30% = 9. Перекрытие 30% по высоте и ширине соседних кадров было вычитано в интернетах, и призвано облегчить процесс склейки панорамы.

С учетом того что «самый верхний этаж» равно как и «самый нижний» это всего лишь один кадр (его можно конечно сфотографировать 12 раз ромашкой, но это как ни будь в другой раз), выходит что 7 этажей по 12 да плюс зенитный и надирный снимки. Итого 96 кадров. Поскольку «уширить» имеющийся объектив никак нельзя — камера чужая, была взята со словамя «я только посмотрю и сразу отдам», а уменьшить это дикое 96 хотелось невыносимо, то вариантов оставалось немного, а точнее один: надо девальвировать 30%. В самом деле ведь 1.3 по горизонтали умноженные на 1.3 по вертикали дают избыточную площадь 69%, то есть из 96 кадров их большая часть будет обрезана при склейке. Тут я опущу матершинные подробности по съемке и склейке впритирку, но смысл следующий — математика это хорошо, когда карандашом по бумаге, а беспощадная практика говорит о том что решение по девальвации перекрытия было самонадеянным и ошибочным, следовательно уйти от 96 кадров не вышло. Склейка этих 96 кадров по количеству удовольствия соответствует увлечениям тех странных монахов которые бьют себя плетками и поют песни.

Для сборки панорам я пользуюсь программой PTGui – в ней самый удобный интерфейс для ручной склейки. Как бы не рекламировались, как бы не хвалились матерые и не очень производители софта для панорам, но пока что мне не встречались программы способные на автомате склеить без нареканий. Да – автоматический режим есть, да – он работает, но качество такой сборки лежит где-то на уровне google-street. Поэту если речь идет о хорошей, добротной панораме, то избежать ручной работы увы, не получается.

Представление об объеме работ можно посчитать на пальцах: у каждого кадра 4 стороны которые надо склеить с соседними, на каждой стороне в теории нужно поставить 4-5 точек, на самом деле около 10-ти. Иначе с большой долей вероятности получится репродукция на нетленного Сальвадора Дали. Сколько времени надо чтобы установить одну пару точек на смежных кадрах? Если «пристреляться» и щелкать мышкой методично как робот, то у меня получается примерно 3-4 секунды на пару точек. Все вместе дает примерно 3-4 часа на сборку одной панорамы. Это ужасно.

Как жить дальше?

По идее затраченное в каком либо процессе время можно упрощенно представить как произведение количества элементарных операций на скорость выполнения этой самой элементарной операции. Значит есть два пути по уменьшению затраченного времени:

  • уменьшение количества итераций
  • уменьшение времени на одну операцию

в случае с панорамами это означает что надо стремиться к уменьшению количества снимков и к ускорению обработки каждого отдельного снимка. Как это ни странно, но решаются обе задачи с помощью одного технического решения — нужно снимать панорамы по шаблону. Потому что если геометрия одного набора не отличима от геометрии другого набора то достаточно свести только один контрольный комплект кадров а все остальные панорамы собираются всего лишь подменой исходных изображений и не требуют повторной установки ключевых точек. А для этого в процессе съемки нужно поворачивать фотокамеру всегда абсолютно точно. Но человеку этого сделать не можно. Зато вот роботу можно. Поэтому я начал сборку аппарата для съемки панорам.

Матчасть

Для аппарата были приобретены следующие детали:

Arduino
электронная игрушка для не очень взрослых — Ардуино

L298
совместимые с ней модули управления шаговыми двигателями — 2 штуки

Stepper
три шаговых мотора (один из них запасной)

Tchugunij
кусок алюминия (600х150х10мм) из которого у меня в школе какой-то мужык в синем халате вырезал по моим чертежам заготовки для рамы

Akku
аккумуляторы кислотные 6V 4.5A

Olympes PEN E-P1
фотоаппарат Olympus PEN E-P1 (как-то совсем неожиданно хозяин панасоника вспомнил что аппарат надо вернуть) с объективом 14-42мм (28-84 в приближении к полному кадру)

Knopka
и радиокнопка к нему

Hama
а также стремный штатив.

После того как алюминиевые заготовки по моим чертежам
Schema
были готовы, осталось только собрать все в кучу и запрограммировать Ардуину.
Конструкция простая как мычание: на алюминиевой L-образной форме смонтированы два шаговых электродвигателя. Причем в абсолютно бессовестно простом варианте — ни редукторов, ничего. Ось нижнего двигателя совпадает с (а по-правде говоря и является) вертикальной осью вращения установки и закреплена намертво в специально выточенном из нержавейки башмаке, ктороый можно зажимать в голове у штатива. Таким образом вся масса прибора нагружена (я не владею специальными терминами из машиностроения, поэтому извините меня если что не так) на нижний мотор. Ось верхнего двигателя перпендикулярна оси нижнего и несет на себе через алюминиевый переходничек (зеленый на схеме ниже) фотокамеру. Точка пересечения осей этих моторов находится внутри объектива и совпадает с нодальной точкой объектива. Параллакс, я тебя больше не боюсь!!!
Plan
С самого начала все запрограммировалось как следует, никаких проблем с софтом для ардуины у меня не возникло, не знаю почему, поэтому и написать особенно нечего по этому поводу. Далее Ардуино соединяется с контроллерами моторов и совместно монтируется на боковой поверхности рамы (на рисунке — слева на синей полоске). Передатчик радиокнопки был разломан и им теперь управляет та-же самая Ардуна посредством релешек повешенных на свободные порты. Рисунок немножко не совпадает с действительностью в плане вон тех серых блоков которые олицетворяют собой электронику и аккумуляторы. Это произошло главным образом потому что я не имел представления об истинных их размерах и промахнулся в масштабе раз в 10. Таким образом электроника оказалась слева от синей вертикали, аккумулятор висит справа от бордовой, а батарейки для радиокнопки — между нижним мотором и бордовой вертикалью, ну и еще оказалось что внутри, а временами и снаружи все опутано проводами. Кто бы мог подумать…
Все!

Результат

Complete
В итоге получилось следующее:
Фотоаппарат оснащен объективом 14мм с кропом 2, что дает примерно 28мм в полнокадровом эквиваленте. Соответственно угол который захватывает фотоаппарат одним снимком примерно 64 х 48 градусов (соотношение сторон в кадра в этой линейке не привычные 3:2 а 4:3, что на самом деле еще удобнее для панорам). Поскольку камера ориентирована портретно, то выходит 360/48 = 7.5 кадров на круг. Я не умею снимать 7.5 кадров поэтому округлил до 8 в большую сторону и добавил еще парочку на склейку. Получилось 10 кадров на один круг. По вертикали (расчеты опустим) вышло три этажа: Горизонт, +40 градусов над Горизонтом, -40 градусов под Горизонтом, 1 кадр вертикально вверх, 1 кадр вертикально вниз (который все-же приходится снимать вручную). Итого 32 кадра! В три раза меньше чем первоначально! На кадр тратится примерно 6 секунд, то есть меньше 4 минут на всю съемку! Ура!!! То же самое касается сборки панорамы. Поскольку площадь полей которые на снимках должны ложиться внахлест составляет прилично меньше 30%, то сборка шаблонного проекта потребовала поездки в большой ангар к моему знакомому. Место было выбрано таким образом чтобы было как можно больше деталей по всему помещению. В ангаре с ажурными фермарми, кучей оборудования, подвесными мостками и прочими мебелями недостатка в деталях не было. Собирал первый проект очень долко и муторно — практически целый день, до тех пор пока не решил что генерируемый стичером файл не требует ретуши в фотошопе. Теперь процесс выглядит следующим образом — съемка 4 минуты, копирование на комп 1 минута, коррекция геометрических искажений в Bubble5 2 минуты, сборка HDR-снимков в Photomatix 3 минуты (забыл сказать — без HDR оказалось что в панораме ловить практически нечего, либо одна полусфера белая, либо другая черная), скалирование в XnView 1 минута, сшивание в PTGui – 3 минуты. Итого 14 минут на одну панораму, причем основная работа для оператора в поле: нажать кнопку и отбежать подальше, а в студии: копировать файлы и запускать программы, мозг совсем включать не нужно, поэтому пока тянется рутина можно спокойно прокручивать в уме что-то более важное. 14 минут это лучше 4 часов, как раз тот случай когда размер (потраченного времени) имеет значение.

Посмотреть как оно в итоге выглядит можно например тут:

sergej-hof.de/panotest/
projektinarbeit.de/oldenburg/

Зачем?

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

Автор: sergof

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js