Home
Panoramas
Best Photos
Best References
News History
Travel Notes
Site Map
Aquaworld
Dive Log
Best Underwater Photos
Last Visited
Guestbook

Создание круговой панорамы

Звучит тривиально, но для того, чтобы сделать круговую панораму, надо её сначала снять. Помимо обычных требований (горизонтальность камеры, экспозиция, ...) есть ещё пара: нужно обеспечить круговое перекрытие (то есть последний кадр должен пересекаться с первым), и стараться сделать так, чтобы по вертикали эти два кадра (первый и последний) были на одном уровне.
Лучше всего, конечно, снимать со штатива, но не всегда это возможно. Тогда надо внимательно следить за кадром, "цепляясь" за какие-то отметки в видоискателе так, чтобы горизонт был на одном уровне. Панораму Бангкока, например, снимал, держа камеру вертикально, уперевшись в решетку вращающейся крыши, и делая кадры каждые несколько секунд. И лучше перекрутить (сделать перекрытие в несколько кадров), чем недокрутить. Ужасно обидно, если потом оказывается, что не хватает буквально сотни пикселей. Так у меня не получилась круговая панорама с вершины холма над городом Луанг-Прабанг в Лаосе. И ещё. Если освещённость при круговом обзоре меняется значительно, полезно резкие смены проходить несколькими кадрами, лишними они точно не будут!
Итак, приступаем. Для примера - панорама Коломны, снятая с вершины Грановитой башни. Съёмка усложнялась тем, что там не было свободного обзора, и кадры делались в проёмы бойниц. Поэтому, например, плохо получился стык фото по обе стороны кремлёвской стены.
Исходные фото:
  1. Делаем обычную панораму, лучше так, чтобы "поля" (то есть зона перекрытия левой и правой частей) были максимальными. Я обычно дублирую одно фото по краям и собираю панораму из N+1 куска, то есть здесь, например, панорама собиралась не из 12, а из 13 фото.
  2. Выравниваем картинку. Я использую три операции в разной последовательности:
    • Поворот - отмечаю характерную точку на разных краях и кручу картинку так, чтобы они стали на одном уровне. Например, основание колокольни.
    • Перекос (частичное растяжение по вертикали) - в случае, если высота одного и того же объекта на разных краях панорамы получилась разной, тяну угол вверх так, чтобы высота стала одинаковой.
    • Перспектива - после двух предыдущих операций может получиться так, что и основания на одном уровне, и высота одна и та же, а угол наклона разный. Колокольня не вертикальна! Ситуацию можно исправить коррекцией вертикальной перспективы. Но для этого картинку надо отцентровать. Расширяем рабочее поле по специальной формуле. Пусть для простоты два экземпляра колокольни наклонены навстречу друг другу, причем отклонение левой колокольни от вертикали составляет a1 пикселей, а правой a2, причем a2 больше a1. Расстояние между экземплярами K пикселей. Тогда, чтобы изменением перспективы можно было бы сделать оба экземпляра вертикальными одновременно, левый экземпляр должен находиться на расстоянии K1 от середины картинки, правый - K2 соответственно. Обозначим ещё D - расстояние от основания правой колокольни до границы картинки и L - новая ширина картинки, . Из очевидных соображений получаем, что
      a1*K2=a2*K1
      K1+K2=K
      K2 = K * a2 / (a1 + a2)
      L = (D + K2) * 2, картинка выравнивается по правому краю.
      После такого преобразования (когда колокольни станут вертикальными) панораму надо заново обрезать, убрав белые поля.
      Если колокольни бы оказались "завалены" в одну сторону, то эти формулы всё равно бы сработали, но срединная линия была бы не между колокольнями, а с той стороны, куда они наклонены.
    Если исходные фото сняты недостаточно тщательно, может придётся применять эти три преобразования не одни раз: после подгонки высоты может уйти горизонталь и нужно будет ещё повернуть.
  3. Режем картинку на три части с перекрытием порядка 20% - левая часть, центральная, правая - 1, 2 и 3.
  4. Делаем вспомогательную панораму - сшиваем левую и правую части основной панорамы (то есть части 1 и 3), после чего режем получившуюся картинку пополам с перекрытием, называем их частями 3n и 1n. Для чего это? Чтобы "замкнуть" панораму. Теперь у нас есть старая часть 2 и новые 1n и 3n, но левая часть новой картинки 1n абсолютно совпадает с правой частью новой картинки 3n (резали с перекрытием!)
  5. Склеиваем окончательную панораму из частей 1n, 2, 3n. Проверяем горизонтальность и масштаб, при необходимости корректируем. Но, так как поля у нас идеально совпадали, а перекрытия 2 c 1n и с 3n искажались мало, эти поправки будут незначительными. На крайний случай, если искажения всё-таки будут велики, можно проделать процедуру ещё раз.
  6. Кадрируем. Особенно аккуратно надо резать по левому и правому краю, чтобы "попасть" в пиксель. Для контроля можно "прокрутить" картинку, то есть перенести часть (допустим, левую) вправо и проконтролировать стык. Всё! Можно смотреть, что получилось.