4.7. Пакет программ PanoTools - II


Теперь, когда у нас есть полностью сформированный скрипт, можно перейти к оптимизации, то есть к получению уточненных данных о горизонтальном поле зрения объектива (v), параметрах (a, b, c), характеризующих радиальное смещение, и углах (y, p, r). Это можно выполнить двумя путями. Первый из них реализуется с помощью графического редактора (Фотошопа) и плагина Adjust. С этой целью в Фотошопе открывается новый файл (пустой) и вызывается фильтр Adjust. В меню фильтра отмечаются поля Use Script и Run Optimizer, затем, после нажатия кнопки Browse, ищется сформированный вами скрипт. Теперь можно нажимать кнопку OK. На экране появляется окно под названием Optimizing Variables и текстом 'Среднее расстояние между контрольными точками после....'. Далее идут быстро меняющиеся значения числа итераций и самого расстояния в пикселях.

Процесс занимает от нескольких секунд до минуты. После окончания процесса в заданном вами по умолчанию текстовом редакторе (Notepad и т.п.) открывается существенно пополненный скрипт. Второй путь - это 'перетаскивание' иконки, обозначающей файл с исходным скриптом, в иконку программы PTOptimizer. Разница заключается в том, что скрипт автоматически не откроется и это придется сделать вручную. (Скрипт приведен в сокращенном виде.)

p f2 w3000 h1000 v360 u10 n"PSD_mask"

i f3 w768 h1024 y0 p0 r0 v90 a0.01 b0.01 c0.01 n"n0.jpg"
i f3 w768 h1024 y72 p1 r1 v=0 a=0 b=0 c=0 n"n1.jpg"
i f3 w768 h1024 y144 p2 r2 v=0 a=0 b=0 c=0 n"n2.jpg"
i f3 w768 h1024 y-144 p3 r3 v=0 a=0 b=0 c=0 n"n3.jpg"
i f3 w768 h1024 y-72 p4 r4 v=0 a=0 b=0 c=0 n"n4.jpg"

v v0 a0 b0 c0 y1 p1 r1 y2 p2 r2 y3 p3 r3 y4 p4 r4

c n0 N1 x683 y431 X97 Y423 t0
c n0 N1 x757 y526 X164 Y519 t0
c n0 N1 x595 y672 X23 Y671 t0
c n1 N2 x571 y175 X99 Y151 t0
........
........
*
# ====================================================================
# Output generated by Panorama Tools

# Warning: Number of Data Points is smaller than Number of Variables to fit.
170012 function evalutations
# number of calls to fcn has reached or exceeded 200*(n+1)

# Panorama description
# p f2 w3000 h1000 v360 n"PSD_mask"

# Parameters for Each Input Image:
# (*) - optimized (p) - preset

# Image No 0:
# Yaw: 0 deg (p) Pitch: 0 deg (p)
# Roll: 0 deg (p) HFov: 94.9408 deg (*)
# Polynomial Coefficients: a 0.038163 (*); b -0.097626 (*); c 0.051026 (*)
# Horizontal Shift: 0.000000 (p) Vertical Shift: 0.000000 (p)
# 4th polynomial coefficient: 1.00844
# Command for Panorama Creation:
o f3 r0 p0 y0 v94.9408 a0.038163 b-0.097626 c0.051026 u10 -buf

# Image No 1:
# Yaw: 72.8878 deg (*) Pitch: -0.269125 deg (*)
# Roll: -1.29281 deg (*) HFov: 94.9408 deg (*)
# Polynomial Coefficients: a 0.038163 (*); b -0.097626 (*); c 0.051026 (*)
# Horizontal Shift: 0.000000 (p) Vertical Shift: 0.000000 (p)
# 4th polynomial coefficient: 1.00844
# Command for Panorama Creation:
o f3 r-1.29281 p-0.269125 y72.8878 v94.9408 a0.038163 b-0.097626 c0.051026 u10 +buf -buf

# Image No 3:
# Yaw: -142.274 deg (*) Pitch: 1.46563 deg (*)
# Roll: -1.07563 deg (*) HFov: 94.9408 deg (*)
# Polynomial Coefficients: a 0.038163 (*); b -0.097626 (*); c 0.051026 (*)
# Horizontal Shift: 0.000000 (p) Vertical Shift: 0.000000 (p)
# 4th polynomial coefficient: 1.00844
# Command for Panorama Creation:
o f3 r-1.07563 p1.46563 y-142.274 v94.9408 a0.038163 b-0.097626 c0.051026 u10 +buf -buf
........
........
# ====================================================================
# Control Points: Distance between desired and fitted Position (in Pixels)

# Control Point No 0: 0.283525
# Control Point No 1: 0.877102
# Control Point No 2: 1.00687
# Control Point No 3: 0.422522
# Control Point No 4: 0.88593
# Control Point No 5: 0.136403
# Control Point No 6: 0.264454
# Control Point No 7: 0.701406
# Control Point No 8: 1.51058
# Control Point No 9: 1.12872
# Control Point No 10: 0.660178
# Control Point No 11: 0.614276
# Control Point No 12: 0.886014
# Control Point No 13: 0.559441
# Control Point No 14: 0.130153

Первое, что мы обнаруживаем в пополненом путем оптимизации скрипте, - это уточненные данные об объективе:
поле зрения = 94.9408º,
коффициент a = 0.038163,
коффициент b = -0.097626,
коффициент c = 0.051026 и
коффициент d = 1.00844.
Коффициент d не является самостоятельной величиной, а лишь дополняет сумму трех первых коэффициентов до единицы (a + b + c + d = 1).

Кроме того в скрипте появились уточненные углы поворота и наклонов фотоаппарата вместе с объективом для каждого положения, из которого были сделаны все 5 снимков. Причем все эти углы отсчитываются от первого (начального) положения аппарата.

Затем в столбец приведены расстояния между желаемым (теоретически идеальным) положением каждой контрольной точки и тем положением, которое будет достигнуто в реальности после трансформации снимков в соответствии с полученными в результате оптимизации параметрами. Как видно из этого столбца расстояний, максимальное его значение будет равно всего лишь 1,51 пикселя, что составляет 0,05% по отношению к длине панорамы. А это, в свою очередь, означает, что у нас есть все шансы получить почти идеальную панораму (по крайней мере будут практически совпадать контрольные точки смежных снимков). Проблемы начинаются с относительной погрешности в 0,5%, что скорее всего обусловлено неточностью расстановки контрольных точек. Несоответствие в 1% и выше говорит о грубой ошибке в контрольных точках или о наличии параллактических погрешностей. Иногда помогает удаление строк, содержашие координаты контрольных точек, соответствующих максимальным значениям расстояний, с последующей повторной оптимизацией. Однако радикальным образом такую ситуацию можно исправить лишь более тщательной расстановкой контрольных точек.

Даже в том случае, если полученные расстояния вас устраивают, присмотритесь к полученным после оптимизации параметрам объектива объектива и углам поворота и наклона объектива. Так, уточненное поле зрения объектива не должно драматически отличаться от предполагаемого вами значения, модули коэффициентов a, b и c не должны превышать нескольких десятых, углы наклона также должны лежать в разумных пределах. Если это не так, то панорама все же 'сошьется', но ценой весьма значительных и заметных искажений рисунка.

Будучи в прошлом инженером, занимающимся оптимизацией некоторых малопонятных вещей, автор этих строк подозревает, что рассматриваемая нами здесь задача оптимизации в каких-то случаях имеет несколько решений. Поэтому, если вы столкнетесь с ситуацией, описанной выше (ненормальность параметров), попробуйте слегка изменить начальные значения коэффициентов a, b и c.

После того, как мы убедились, что все параметры, полученные в результате оптимизации, нас удовлетворяют, осталось только 'сшить' панораму. В рамках пакета PanoTools это можно сделать 2-мя путями (как и в случае оптимизации). Первый путь опять сопряжен с использованием плагина Adjust, который мы, ввиду его некоторой громоздкости, рассматривать здесь не будем. Второй путь весьма прост и дает практически мгновенный результат: 'перетащим' (опять) иконку файла со скриптом в иконку программы PTStitcher. В результате работы программы, которая может занять некоторое ощутимое время, в папке, в которой вы производите все эти операции, появится файл с панорамой в формате PSD. Откроем его.

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

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

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

Немного огорчает явная засветка вокруг солнца, но это не погрешность сшиванию, а недостаток цифрового фотоаппарата Nikon CoolPix 950, выпущеного еще 1999 г.

Осталось слить все слои в плоское изображение, подкорректировать его по вашему вкусу и привычкам (тональность, контрастность) и сохранить в вашем любимом формате (TIFF, BMP, JPG). Конечно 3000 х 1000 пикселей - это не ахти какой размер. Отпечаток не сделаешь, но для размещения в Интернете в виде виртуальной панорамы вполне подходит.

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

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


к оглавлению    предыдущая статья    следующая статья
Hosted by uCoz