bz home

Склейка панорамы в Hugin

Общий порядок действий уже был описан выше:

Теперь подробнее.

Запускаем Hugin. Я описываю версию 0.7 beta 4, предыдущие и последующие версии конечно же могут отличаться.

hugin.jpg

Общий вид стандартен — меню, тулбар с кнопками и основной экран с закладками. Закладки предназначены для следующих действий:

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

Выбираем фотографии

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

hugin-images.jpg

Другой способ, может быть более удобный, если в одном каталоге оказалось много панорам, залючается в следующем. Открываем только первый снимок панорамы. А теперь несколько раз нажимаем на кнопку "Добавить одновременно сделанные снимки". Подгружаются другие фотографии, сделанные приблизительно в то же самое время. Обычно это хорошо срабатывает.

hugin-images2.jpg

Тут же можно поправить порядок снимков в серии, если он почему-то оказался неверным.

Загрузив все фотографии, тут же нажимаем кнопку "создать контрольные точки" в нижней половинке экрана, которая запустит Autopano. Для простых панорам это даёт хороший результат, что же не воспользоваться.

hugin-images-cp.jpg

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

На заладке Камера и объектив показаны остальные параметры работы оптимизатора. Изначально эти значения нулевые, а для объектива — считанные из автоматически записываемых фотоаппаратом в EXIF (если такая информация есть).

hugin-camera.jpg

Следует заметить, что на самом деле эти параметры одинаковы для всех снимков — в полях "заимствовать" стоят галочки. Это обозначает, что на самом деле у нас во время съёмки был один и тот же объектив, с одними и теми же установками зума и прочими зависящими от этого параметрами — искажениями, зоной охвата и т.п. Так что эти все параметры указываются только для первого снимка, а для остальных снимков берутся те же самые значения. Если это не так, и во время съёмки менялись оптические параметры (зум, смена объектива, существенное смещение точки съёмки), то соответствующие галочки нужно убрать. Но если параметры не менялись — галочки должны стоять, чтобы не вводить оптимизатор в заблуждение (он и сам ошибётся). Оставим пока этот вопрос для специальных случаев (например, склейки документа из отсканированных кусочков) — большая часть панорам делается с одинаковыми параметрами съёмки, и галочки должны стоять везде.

Тут же можно указать тип объектива, если он нестандартный и сбросить расчитанные значения, если оптимизатор сильно ошибся.

Оптимизатор работает со следующими значениями:

К сожалению особенности работы интерфейса таковы, что чтобы измнить значение в поле, нужно вписать новое значение, а потом непременно перейти в другое поле рядом! Если вместо этого выбрать другой снимок сверху, то введённое значение не сохраняется, а просто затирается новым значением для выбранного снимка. Милая программная ляпа, доставляющая некоторый изыск и повышающая частоту употребления русского мата в процессе работы с компьютером.

Кадрирование пока пропустим, так как оно становится актуальным только ближе к финальной склейке панорамы.

Итог: загружаем снимки, запускаем автоматическое создание контрольных точек.

Контрольные точки

Расставить хорошо контрольные точки — это искусство. От того, насколько удачно расставлны контрольные точки зависит финальный результат работы оптимизатора. Навык придёт постепенно, а пока я дам только общие советы и первоначальное направление движения.

Во-первых, можно пользоваться внешними утилитами (например, взятым нами Autopano) для создания контрольных точек. Все подобные программы работают по вариациям алгоритма SIFT. Основная проблема этих автоматизированных способов — это попытки расставлять контрольные точки там, где их ставить не следует. Например, ветка дерева — хороший контрастный объект в кадре, за который может зацепиться автоматика. Но ветки качаются и не соответствуют одной и той же точке на разных снимках. Это типичная ошибка таких программ. Также бывает, что в поле их пристального внимания совершенно излишне попадают другие крупные движущиеся объекты — автомобили, воздушные шары, люди, облака... В то же время человек может найти такую точку в двух снимках, которая хоть и не различается хорошо на изображениях, но зато задаёт действительно одну и ту же точку. А оптимизатору всё равно, что там на снимке в этом месте (он на снимки — сюрприз! — вообще не смотрит), ему нужны только координаты и чтобы точки соответствовали.

Равномерность контрольных точек тоже имеет значение. Причём неочевидное. Иногда контрольные точки, расставленные по всему полю кадра, дают худшие результаты, чем точки, собранные группой в одном месте снимка. С другой стороны, чем теснее стоят контрольные точки, тем грубее должны получаться результаты работы оптимизатора из-за погрешностей. Так что общих закономерностей тут нет. Единственное, что можно сказать наверняка — это если какая-то конкретная часть панорамы плохо совмещается, то следует уделить внимание контрольным точкам именно в этом месте.

Контрольные точки бывают двух видов — нормальные, которые отмечают одну и ту же физическую точку на разных снимках, и вертикали-горизонтали, которые задают вертикальные и горизонтальные линии на снимках соответсвенно — можно на одном и том же, можно на разных.

Установка горизонтальных и вертикальных линий не делается автоматикой, а это лучший способ помочь оптимизатору правильно развернуть снимки или выровнять линию горизонта. Зачастую также является полезным провести одну длинную горизонталь через несколько кадров, чтобы определить линию горизонта. Даже если линия горизонта как таковая не видна, то её всё равно можно обозначить, так как человек без особого труда может проложить её гипотетически даже сквозь элементы пейзажа, здания и людей. Сильно помогает от скручиваний и изгибания панорам. Для панорам с постройками типа городских пейзажей очень неплохо зарекомендовал себя способ провести одну длинную горизонталь через все снимки и на отдельных снимках проставить там и сям вертикали по углам зданий. Это обычно даёт сразу хороший общий результат.

Итак, приступим. Основное поле закладки Контрольные точки разбито на три области: две панели для просмотра фотографий и список контрольных точек внизу.

hugin-cp.jpg

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

hugin-cp4.jpg

Для установки контрольной точки кликаем мышью в левую панель и затем в соответствующю точку снимка на правой панели. Когда на обоих панелях контрольная точка проставлена, нажатием правой кнопки мыши добавляем её в список внизу.

Иногда приходится подправить тип получившейся контрольной точки — нормальная, вертикальная или горизонтальная линия. Например, программа сама не может определить, что мы проводим горизонталь или вертикаль, если начальная и конечная точки расположены в разных снимках. Корректируем тип из списка внизу, убедившись предварительно, что мы редактируем нужную контрольную точку.

hugin-cp3.jpg

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

hugin-cp2.jpg

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

В левом и правом верхних углах есть кнопки со стрелками. При нажатии на такую кнопку меняются снимки на обоих панелях — выполняется сдвиг вправо или влево. Удобно, если нужно перейти к соседней паре снимков.

hugin-cp1.jpg

Вот собственно и всё.

Итог: если контрольные точки создались автоматически, то можно просмотреть результаты работы Autopano, а можно и сразу перейти к оптимизации размещения снимков на панораме — может и так всё хорошо получится. Если автоматика не сработала или ошиблась, то создаём контрольные точки вручную и только потом переходим к оптимизации.

Оптимизатор

Оптимизатор является наиболее важной частью склейки панорамы. Именно тут параметры отдельных снимков подбираются, чтобы после преобразования можно было бы склеить готовую панораму.

Оптимизатор пытается найти такое значение параметров снимов, при котором достигается минимальное отклонение расставленных контрольных точек. Так как поиск минимума в фазовом пространстве параметров задача неоднозначная, то зачастую бывает, что найденное решение не соответствует наилучшему возможному. Это не страшно. Хуже, если приемлемого решения так и не будет найдено совсем. А практический вывод такой — не следует задавать оптимизацию сразу по всем возможным параметрам. Значительно лучшие результаты достигаются, если действовать постепенно, подобрав сперва одни значения, а потом и остальные.

Оптимизацию можно запускать по отдельным парамерам. Некоторые из наборов значений доступны в выпадающем списке.

hugin-optimizer.jpg

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

Качество достигнутой оптимизации выражается в среднем и максимальном несоответствии контрольных точек, измеряется в пикселах. Вот типичный пример:

hugin-optimizer-res.jpg

Физический смысл чрезвычайно прост. Если среднее расстояние между контрольными точками в пределах нескольких пикселов — это замечательно. Значит при финальной склейке панорамы соседние снимки сдвинутся на считанные пиксели — качество будет хорошим. Насколько хорошим — это зависит от полученного отклонения, размера снимков и размера финальной панорамы. Например, приведённые выше значения близки к идеальным.

Если в результате работы оптимизатор резко и сильно ухудшил результаты, то имеет смысл отказаться от предложенных им изменений и попытаться запустить его по-другому.

Большое максимальное отклонение при небольшом среднем скорее всего говорит о том, что какая-то из контрольных точек (или несколько) была поставлена неудачно. Стоит посмотреть, где она расположена — может это просто ошибка (рука дрогнула, Autopano ошибся), или сама точка выбрана неудачно (например, на подвижном объекте). Открываем окошко со списком контрольных точек (меню Вид -> Таблица контрольных точек, или F3, или кнопка на тулбаре).

hugin-cplist.jpg

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

hugin-cplist2.jpg

Нажав на неё мышкой, попадаем в закладку с контрольными точками. Убедившись, что это действительно плохая точка, можем удалить её прямо отсюда же. Если это не так, то возвращаемся на предыдущий шаг по расстановке контрольных точек.

Теперь можем полюбоваться на то, что у нас получится в конечном итоге в окошке предварительного просмотра панорамы. Вызвается из меню Вид -> Окно предпросмотра или соответствующей кнопкой с тулбара.

hugin-preview.jpg

Что тут есть и зачем это нужно.

В центре — ожидаемый вид нашей панорамы. Можно полюбоваться. Вокруг пара слайдеров, отвечающих за ширину и высоту охвата. Их даже можно подвигать. Нижний отвечает за угол обзора по горизонтали — от нуля до полного кругового обзора в 360 градусов. Справа — аналогично по вертикали, но уже только до 180 градусов. Вроде бы должно быть понятно, за что они отвечают. Обычно ими не нужно пользоваться, разве что иногда чуть подправить.

Внизу расположены параметры предпросмотра — тип проекции и способ совмещения. Способ совмещения позволяет переключить режим просмотра из обычного, когда видна сама панорама, в разностный режим, когда подсвечены зоны перекрытия отдельных снимков.

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

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

На тулбаре есть ещё три замечательных инструмента:

Ну и пара кнопок Авто и Обновить, которые включают-выключают режим автоматической перерисовки панорамы после изменений и явно позволяют заставить панораму перерисоваться. Зачем бывает нужно отключать режим автообновления и перерисовывать вручную? Очень просто. Попробуйте как-нибудь на досуге загрузить панораму из сотни-другой снимков...

Ну и the last but not least (не знаю как адекватно перевести) — линия горизонта. Кликнув на панорамке в окошке левой кнопкой мыши, можно указать центр положения линии горизонта. А кликнув правой — поменять угол наклона. Новая линия горизонта будет проходить через центр и точку клика. Весьма полезно, когда оптимизатор перевернул панораму вверх тормашками — просто отводим мышку по диагонали от центра и кликаем правой кнопкой несколько раз до достижения нужного эффекта.

На примере, что показан на картинке сразу напрашивается нажать на кнопки По центру и Уместить, а потом поставить линию горизонта на положенное ей место. И возможно нажать Straighten, если результат правки линии горизонта окажется изогнутым.

Ну что, полюбовались? Поправили горизонт и наклон? Возвращаемся обратно к оптимизатору.

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

Можно попробовать такую последовательность оптимизации. Сперва грубо расставить снимки по местам с помощью "позиции (с приращением...)". Потом последовательно пройти по остальным предустановленным наборам параметров, уточнив значения для поля зрения (вид, hfov), потом для бочки (b) и, наконец, для всех параметров. На каждом шаге контролируем максимальное и среднее отклонение, оно должно в идеале уменьшаться и среднее (опять же в идеале) должно быть в конце меньше одного пиксела. Также заглядываем в окно преварительного просмотра панорамы и контролируем, что панорама не улетела в невиданную даль, не скрутилась в жгут, и линия горизонта соответствует ожидаемой. Если оптимизатор после каждого шага слишком сильно меняет значения параметров, это говорит о том, что мы попали не в тот максимум-минимум и возможно стоит [частично] сбросить значения параметров и начать с начала или поработать над контрольными точками.

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

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

Финальная склейка

Когда параметры отдельных снимков панорамы наконец оптимизированы, можно приступать к финальной склейке. Идём на закладку Сшиватель.

Здесь делаются две вещи. Исходные снимки трансформируются по подобранным оптимизатором значениям параметров в выбранную проекцию. Теперь отдельные снимки превратились в части панорамы, которые можно совместить самостоятельно в графическом редакторе. Кстати, если нам понадобятся такие снимки, то в настройках Hugin на закладке Enblend можно убрать галочку "удалять переразложенные файлы TIFF" и Hugin не будет их удалять автоматически. Это во-первых. Во-вторых, эти трансформированные снимки будут склеены вместе в одну панораму и записаны в выбранном графическом формате. На этом этапе есть довольно много сложностей: нужно обеспечить плавность перехода одного снимка в другой, чтобы различия в яркости, цвете и просто отдельные артефакты были бы по возможности незаметны. Тоже та ещё задачка...

Например, одним из выходных графических форматов склейки можно выбрать формат PSD, где каждый снимок после трансформации положен в свой слой, и после можно в PhotoShop поиграть с масками прозрачности слоёв, добиваясь наилучшего перекрытия снимков вручную.

hugin-stitch.jpg

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

Что мы тут видим. Оказывается добрая половина нужных параметров уже заполнена.

Проекция и поле обзора уже заполнены значениями из окна предварительного просмотра панорамы. Можно на всякий случай жмакнуть кнопку "Рассчитать поле зрения", чтобы точно никакая часть снимков не вылезла за пределы склеенной панорамы — это соответствует кнопке "Уместить" в окне предварительного просмотра. Если мы самостоятельно подгоняли положение слайдеров, то не стоит жмакать.

Осталось определиться только с размерами финальной панорамы, параметрами сглаживания при обработке снимков и графическим форматом выходного файла.

В этом нам может помочь выпадающий список "Сшить изображения". Тут можно выбрать набор предустановленных параметров, которые идут ниже. Так что выбраем из списка, если какой-то набор полностью устраивает, а можно подкрутить руками самостоятельно, выбрав "с вручную заданными ниже параметрами". Мне больше нравится последний вариант.

Установим ширину и высоту. Обратите внимание, что когда задаём ширину, то высота расчитывается автоматически исходя из поля обзора. А когда задаём высоту, то ширина автоматически не пересчитывается, вместо этого меняется значение поля обзора по вертикали. Так что для подбора нужной высоты лучше поиграть в разными значениями в поле "Ширина", оставив поле зрения максимальным — лишнее лучше отрезать на этапе постобработки с визуальным контролем.

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

Теперь вкусности. Применяем магию высокой ступени. Помните, скачивали и устанавливали Smartblend? Вот его для финальной склейки и будем использовать. Почему нужно использовать именно его, а не что-либо другое? Он делает две совершенно замечательных вещи. То есть одну (финальная склейка), но с двух сторон. Во-первых, он так проводит линию склейки двух снимков, чтобы минимизировать количество искажений. Это магически (другого слова просто не подобрать) убирает с финальной панорамы движущиеся автомобили, людей и близко стоящие предметы так, что половинок автомобилей, монстров с двумя головами (или вообще без голов, но с тремя ногами) и прочих артефактов не остаётся. Совсем тяжёлые случаи лечатся кадрированием в соответствующей закладке. Во-вторых, переходы делаются с плавным размытием по тону и интенсивности, что ставит финальную точку на полосатом небе из-за виньетирования и прочих огрех съёмки. За подробностями на сайт автора. Но результат получается такой, что ознакомившись, я переклеил все свои предыдущие панорамы заново (ещё раз попутно рекомендую сохранять проекты).

Вот поэтому я и не останавливался подробно на установке параметров сшивателей. На самом деле нам понадобятся следующие установки:

Найти отличия в конечном результате с такими настройками и использованием Smartblend для финального сглаживания от других вариантов оставляю на самостоятельные упражнения.

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

Дальше остаётся открыть склеенную панораму любым подходящим графическим редактором, отрезать лишнее (эх, сколько резать приходится!..) и дальше по желанию — где кусочек неба подрисовать, уровни подправить, баланс белого... В общем, как обычно.

Вот что получилось у меня во время написания этой статьи (обрезанное и уменьшенное):

sta_8838-ste_8842.jpg

Вот собственно и всё. Надеюсь теперь на просторах рунета будет появляться больше красивых и профессионально сделанных панорам. That's all folks!..

Советы

Если не получается добиться Оптимизатором адекватного результата, а обнуление параметров приводит всё к тому же быстрому скатыванию в неадекватные значения, можно попробовать не обнулять параметры, а поставить их в близкие по ожидаемым значения. Например, поставить параметр b (бочку) в 0,001.