Если нельзя, но очень хочется, то нужно обязательно и ничего в мире не стоит того, чтобы делать из этого проблему!


Интересна Java? Кликай по ссылке и изучай!
Если тебе полезно что-то из того, чем я делюсь в своем блоге - можешь поделиться своими деньгами со мной.
с пожеланием
столько времени читатели провели на блоге - 
сейчас онлайн - 

суббота, 28 августа 2010 г.

How to: Как сделать сферическую панораму простым фотоаппаратом с рук? Часть 2.

В прошлой серии "Как сделать сферическую панораму простым фотоаппаратом с рук?" мы остановились на генерации контрольных точек. В этой серии мы закончим работать с PTGui получим на выходе эквидистантную панораму так, что останется ее только чуть подправить и собрать в swf. Итак сделаем вот так.


Читать дальше...

Важное замечание: Контрольные точки стоит выбирать таким образом, чтобы они были на +/- одном расстоянии от камеры. Дело в том, что наш вредный друг параллакс делает свое темное дело так, что на обоих фотографиях дальние и ближние объекты смещены один относительно другого. Если мы будем работать (проставлять точки) с деревом (допустим оно на расстоянии от нас 2м) на одной паре фотографий, а потом уже с домом (размещен за деревом на расстоянии 5м) на другой, то вполне возможно получим на выходе неразбериху.


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

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

Если видео не отображается - пишите в комменты я вышлю по почте.

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

Все, что нам осталось сделать - это указать программе на горизонтальные и вертикальные линии. Делается это для того, чтобы программа не искривляла горизонт, как к примеру на этом снимке.

Чтобы расставить горизонтальные и вертикальные линии необходимо перейти в расширенный вариант работы программы. Делается это на первой вкладке "Project Assistant" - там есть кнопка "Advenced >>". Нажмем ее.


Сразу после нажатия вкладок заметно прибудет, а на некоторых старых (если не на всех) добавятся новые элементы управления.


Перейдем на уже знакомую нам вкладку "Control points", на которой появилось новый select box "Cp type". Есть 4 варианта выбора, среди которых точки (режим уже знакомый нам - мы так  связывали разные фотографии), горизонтальные, вертикальные и простые линии.


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

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


Как выставлять вертикальные линии? Просто. В редакторе точек слева проставляем начало линии, а справа конец. И так для всех линий. При этом в select box "Сp type" должно быть выбрано "Vertical line". Ограничимся 3-7 линиями на фотографию - этого вполне достаточно.


(заметка на всякий: красные линии, кружочки и другие пометки на рисунках добавлены мной лично для удобства - их программа не рисует) Можно пользоваться Zoom'ом чтобы точнее поставить точку. Иногда линии на рисунке будут вертикально ровными, но иногда нет - мы отталкиваемся от того какими они должны быть.

На следующем видео можно посмотреть, как я справился со всеми остальными фотографиями.


Горизонтальные линии я так и не рискнул выставить - чаще всего достаточно вертикальных. Да и горизонтальных линий меньше попадается в кадре.

После того, как мы установили дополнительные точки и вертикальные линии стоит дать программе пересчитать кривизну фотографий. Для этого стоит перейти на вкладку "Optimizer", выбрать режимы: "Minimize lens distortion" = "Heavy", "Optimize using" = "PTGui" и нажать на  "Run Optimizer".


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


В конце концов мы увидим окошко.

Пока нажмем Ок - позже мы еще к нему вернемся...

После того, как процесс завершится, можно будет глянуть на результат, нажав уже знакомую кнопку "Panorama Editor". Если мы это сделаем сразу после оптимизации, то имеем шанс заметить, как фотки в Panorama Editor'e отрисовываются на новых местах.


Всяко может быть, а потому самое время изучить детальнее Panorama Editor. Самое вредное, когда горизонт даже после установки вертикальных контрольных линий не удалось отцентрировать. Ничего не поделаешь, если такое случилось - придется поработать руками.


Я отметит тут пару ключевых мест.

Для начала ползунком 1 (подвигай его вправо/влево) меняем масштаб сетки. Больше ничего он не меняет, а на результирующую панораму никак не влияет - так для удобства.

Ползунки 2 и 3 должны быть в своих крайних позициях: 2й - в крайней правой а 3й - в крайней нижней. Эти ползунки меняют обзор панорамы в градусах: 2й - по горизонтали от 0 до 360, а 3й - по вертикали от 0 до 180. Можешь подергать их, но верни в исходное положение. Чтобы проверить правильно ли они стоят, стоит на вкладке "Panorama Settings" основного окна, выбрать "Projection" = "Equirectangular (for spherical panoramas)", "Field of view" = 360 x 180. Проверь это.


Вернемся к Panorama Editor. Область с изображением панорамы активна в плане управления - в любом ее месте можно схватить как правой так и левой кнопкой мыши и передвинуть (с нажатой кнопкой мыши). В зависимости от того, какая кнопка мыши и того, куда тянем будут наблюдаться разные эффекты. Для демонстрации я выделил на панораме области 4, 5, 6.

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

Если взять в любом месте панорамы левой кнопкой мыши и потянуть вертикально вверх/вниз, то текущий горизонт панорамы будет изгибаться. Так же он будет изгибаться, если взять в любом месте панорамы, но уже правой кнопкой мыши, и потянуть так же вертикально вверх/вниз. Разница лишь в том, какие две точки горизонта будут фиксированы. Думаю следующий рисунок наглядно продемонстрирует то, как горизонт будет "изгибаться".

Вот теперь должно быть понятнее, что за позиции 4, 5, 6 - с них наиболее наглядно тянется. С позиции 5 тянем левой кнопкой мыши вверх/вниз, а с позиций 4 и 6 правой кнопкой мыши вверх/вниз. С любой из них левой кнопкой мыши влево/вправо.

Можно для начала попробовать выставить горизонт автоматически нажав на кнопку 8. Или же с помощью кнопки 7 с последующим вводом 3х чисел.


 Поэкспериментируй, но перед тем сохранись.

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

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

Этап 2: Поиск одинаковых точек на соседних фотографиях. Программа рассчитывает для каждой точки уникальную контрольную сумму и оперирую ними находит одинаковые точки на двух соседних фотографиях. Связывается пару десятков таких точек для каждой пары.

Этап 3: Теперь программа может откинуть содержимое фотографии прочь и заняться деформацией геометрических прямоугольников (если фотка прямоугольная :)) связанных точками, зная, что они должны лечь на сферу. Во внимание берутся размеры прямоугольников (3:4, 10:15 и т.д.) и параметры линзы (эта информация содержится в jpeg фотке и записывается туда фотоаппаратом). Путем хитрых математических преобразований фотки деформируются так, чтобы расстояния межу контрольными точками двух соседних фотографий были как можно меньше.

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



Ее мы так же видели проставляя контрольные точки.


Это число пикселей, на которые две контрольные точки на двух соседних фотографиях после оптимизации (деформации прямоугольников) отдалены друг от друга. Идеал - 0, но это практически невозможно.

Чтобы глянуть на все пары контрольных точек стоит нажать кнопку "Control Point Table" на панели инструментов основного окна.


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


Рекомендуют удалять пары точек, расстояние между которыми после оптимизации больше некоторого числа X - где-то около 10% первых точек. Но я так почти никогда не делаю, потому как после реоптимизации (а она нужна чтобы пересчитать всю картину по новой) на их место становятся другие, а картина в целом еще искривляется, и чаще всего не в лучшую сторону.

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

Этап 4: После того, как прямоугольники деформированы, можно начинать деформацию изображений под рассчитанные параметры деформированных прямоугольников. Этот процесс можно наблюдать, если сразу после оптимизации вызвать Panorama Editor - фотка за фоткой деформируются.

Этап 5: Последний этап, который нам предстоит в этой программе это сшивание деформированных фотографий в одно изображение.

1-4 этапы делаются автоматически, после того как мы наживаем кнопку "2. Align images..." на вкладке "Project Assistant" основного окна программы. Но мы, чтобы повлиять на результат вмешиваемся между некоторыми этапами. В идеале все должно было бы обойтись тремя кликами. Но это только в идеале. Хотя можешь попробовать, авось?


Перед тем как мы соберем все воедино нам предстоит еще один шаг - еще одна (точная) оптимизация изображения. Такой режим по умолчанию недоступен в программе PTGui, для работы с ним необходимо установить Panorama Tools Optimizer. Качаем его тут (или с этой странички). Перед установкой стоит закрыть PTGui, а перед закрытием естественно сохранить рабочий проект. Установка довольно примитивная и не должна глючить. После установки и запуска рабочего проекта, на вкладке "Optimizer" в расширенном режиме работы PTGui будет доступна опция "Optimize using" = "Panorama Tools Optimizer"


Это какой-то очень хитрый алгоритм, который позволяет еще больше уменьшить расстояние между контрольными точками. Выберем его, а так же "Minimize lens distortion" = "Heavy + lens shift"


Перейдем теперь на вкладку "Lens Settings" и два раза кликнем по заголовку "Shift" так, чтобы все checkbox'ы в этой колонке выделились.


А теперь пройдем на вкладку "Optimizer" и нажмем там на кнопку "Run Optimizer". Запустится довольно продолжительный процесс подгонки. Все будет висеть, а потому лучше пойти и попить чайку...


Когда все закончится, мы увидим знакомое диалоговое окно - в нем  нас интересует качество подгонки. Есть несколько вариантов оценки: "very bad", "bad", "not so bad", "not so good", "good", "very good" или "too good to be true". Они даже подсвечиваются цветом. Я часто останавливаюсь на зеленом ("good" и выше).


Если же не удалось получить зеленый свет, то можно попробовать рискнуть (при оценках "not so bad" и "not so good") или вернуться на этап проверки контрольных точек. Я  сделал как советуют, и удалил все пары контрольных точек, которые отдалены друг от друга на расстояние большее, чем 10 пикселей. После повторно запустил оптимизатор с теми же настройками...


Вроде как получилось...

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


Идем в настройки PTGui.


И на вкладке Plugins прописываем путь к smartblend.exe.


Теперь, после нажатия Ок, на главной странице можем отправиться на последнюю вкладку "Create Panorama", выбрать там размер изображения 10 000 * 5 000 (этого вполне достаточно), "Blend using" =  "Smartblend plugin" и нажать на "Create Panorama". Процесс сшивки пошел!


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


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

Процесс сшивки займет так же немало времени, а в результате мы получим готовую сферическую эквидистантную панораму.


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

Готовый проект (настройки PTGui и полноразмерную эквидистантную панораму) можно взять тут.

Глядя на этот результат мне кажется, что горизонт совсем немного волнист. Такое часто бывает, что в Panorama Editor'e вроде как все ровненько, а собираешь панораму - кривая. По этой причине, перед тем, как потратить много времени на создание панорамы 10 000 * 5000, я создаю 2000 * 1000 и изучаю ее на предмет грубых неточностей и волнистости горизонта. После исправляю (изменяю или добавляю новые контрольные точки, реоптимизирую и исправляю волны в Panorama Editor) панораму и снова собираю демку. Если панораму можно исправить, то она исправляется за одну-две такие итерации, если нет - ничего не поделать, можно только слегка довести ее до ума, но человеку бывавшему в месте съемки сразу будет видна ее кривизна. Такие кривые панорамы у меня получаются редко 1 на 20 штук, а причина тому спешка при сборе материала на месте съемки.

Под конец хочу поделиться парой статей, которые по моему мнению хорошо описывают процесс: Алексей Яковенко "Снимаем сферическую панораму" и "Склейка сферической панорамы 360x180° в программе PTGui Pro" Ярослав Пиндора.

Дальше нас ждет исправление мелких ошибок в Gimp и конечный этап создания панорамы - работа с Pano2VR.

Продолжение следует...

10 комментариев:

  1. спасибо, помогло быстро войти в тему

    ОтветитьУдалить
  2. Пожалуйста. Будут вопросы - пишите.

    ОтветитьУдалить
  3. Отличненько! Спасибо!

    ОтветитьУдалить
  4. А где опыт работы с Pano2VR ? Очень бы хотелось посмотреть

    ОтветитьУдалить
  5. А где скачать Panorama Tools Optimizer, не знаете?

    ОтветитьУдалить
  6. На днях будет описан опыт работы с Pano2VR.

    Panorama Tools Optimizer скачать можно на их сайте, я давал линк в посте сразу после слов "необходимо установить Panorama Tools Optimizer". Или вот линк http://www.photocreations.ca/panotools/PanoTools12_2007Apr25.zip

    ОтветитьУдалить
  7. Готова следующая часть - с описанием процесса сборки flash панорамы с помощью Pano2VR
    http://apofig.blogspot.com/2011/01/3.html

    ОтветитьУдалить
  8. Хотелось бы узнать как вы создаете точки перехода точно не помню вроде тут тут http://www.mycz.org/pano001 это ж виртуальный тур получается, подскажите пожалуйста как их сделать?

    ОтветитьУдалить
  9. У меня после нажатия "Run Optimizer" вылазиет предупреждение Panorama Tools Optimizer is not configured. Please go to Tools/Options, 'Panorama Tools' tab and configurethe 'PTOptimizer executable' field.

    Alternatively choose 'Optimize using: PTGui' to use the built in optimizer instead. Как с этим бороться? Спасибо!

    ОтветитьУдалить
  10. One should apply minimal pressure to lift these concrete
    grinders and also hold it in flat motion while working.
    First, ready mixed concrete in Sunderland can
    help you get your construction job done
    faster. For faster setting concrete, use less water, for more workability,
    use more water.

    ОтветитьУдалить