В 1998 г. профессор физики Хельмут Дерш (Helmut Dersch) из Технического Университета города
Фюртванген (ФРГ) выложил на своем сайте
www.fh-furtwangen.de/~dersch ряд разработанных им программ,
которые и по сей день являются пожалуй самым известным и популярным среди фотографов инструментом
создания панорамных изображений. Главное достоинство подхода, лежащего в основе этих программ,
заключалось в том, что он позволял получать панорамы любых типов из снимков, полученных с помощью практически
любого объектива. С их помощью можно сшивать как однорядные, так и многорядные панорамы. Наличие на исходных снимках всякого рода геометрических
искажений ('бочки', наклоны фотоаппарата) также не является препятствием для получения панорам хорошего качества.
Еще одним немаловажным достоинством разработки Х.Дерша являлось то, что она распространялась и распространяется
до сих пор совершенно бесплатно. Более того автор сделал свой проект открытым и теперь любой может
внести свою лепту в дальнейшее совершенствование его программ и методик.
В основе подхода Х.Дерша к решению задачи сшивания панорам лежит простая и весьма продуктивная идея.
Вместо того, чтобы и дальше развивать и совершенствовать способы совмещения смежных областей
изображений по контурам рисунков, затирать фантомные элементы и т.п., автор разработки решил трансформировать
исходные изображения целиком так, чтобы минимизировать различие в рисунках этих смежных областей.
Делается это по контрольным точкам (маркерам), расставляемым вручную. При этом трансформации подвергаются такие
параметры изображений, как фокусное расстояние объектива, с помощью которого получено исходное изображение,
параметры радиального смещения, присущие данному объективу, углы наклона объектива от кадра к кадра,
линейные смещения изображений. В результате работы программы получается многослойный файл в
формате PSD (как вариант), состоящий из маскированных трансформированных изображений,
смещенных друг относительно друга и образующих при этом панораму.
Первоначально пакет программ Х.Дерша получил название Panorama Tools и представлял собой 4 плагина
к Фотошопу или любому другому растровому графическому редактору, работающему со слоями. В дальнейшем,
по мере совершенствования, пакет пополнился несколькими самостоятельными программами. В состав пакета
входит также т.н. PTViewer - программа просмотра панорамный изображений (java-вьюер). Сегодня весь
этот пакет, состоящий из плагинов Panorama Tools, 8-ми самостоятельных программ и PTViewer'а, носит название
PanoTools.
Пакет PanoTools мог бы, пожалуй претендовать на роль той самой 'универсально-идеальной' программы
сшивания, если бы не одно весьма существенное обстоятельство. Работа с PanoTools предусматривает
весьма тщательную расстановку контрольных точек на одинаковых элементах смежных областей
исходных изображений. Причем выходное качество весьма чувствительно к количеству и точности их расстановки.
Сразу отметим, что использование PanoTools для сшивание панорам из изображений, полученных с помощью
прямоугольных обективов высокого качества вряд ли вообще оправдано. В настоящее время
предпринимаются попытки создания программ автоматического определения координат контрольных точек, но,
но полностью обойтись без ручного вмешательства в работу этих программ (проблема ложных точек) вряд ли удастся.
Изначально пакет не предусматривал наличие вообще какого-либо графического интерфейса пользователя (GUI).
Однако сегодня эта проблема успешно решена как самим автором PanoTools (программа PTPicker), так
другими разработчиками (программы PTGui, PTAssembler и PTMac). При этом 3 последних программы уже
не являются бесплатными. Следует сказать, что эти 3 программы не содержат какие-либо дополнения или
усовершенствования к программам и методикам профессора Дерша. Они лишь предоставляют графический
интерфейс для работы с созданными им средствами.
Перед тем, как мы перейдем к более подробному рассмотрению пакета PanoTools, заметим,
что на самом сайте Х.Дерша вы уже не найдете того содержания, которое изначально было там
размещено. В силу ряда обстоятельств (см. IPIX и другие) сайт неоднократно закрывался.
Лишь в начале 2004 г. работа сайта возобновилась, но уже с совершенно иными содержанием.
Однако, благодаря усилиям энтузиастов, существуют зеркала оригинального сайта (см. Ссылки).
Рассмотрение пакета PanoTools начнем с перечисления его модулей.
1. Panorama Tools, который состоит из следующих 4-х плагинов:
(а) Плагин Correct
Он позволяет корректировать радиальные смещения, т.е. устранять бочко- и подушкообразные искажения
искажения, корректировать хроматические аберрации, устранять скос изображений как по вертикали,
так и по горизонтали, осуществлять сдвиг изображений по вертикали и по горизонтали, в том числе
раздельно по цветам, компенсировать виньетирование, автоматически форматировать изображение по
самому яркому прямоугольнику, фильтровать изображения с использованием преобразований Фурье и фильтра Винера.
(б) Плагин Remap
Несмотря на то, что сегодня Remap считается устаревшим, роль его в графических преобразованиях
трудно переоценить. Его основное назначение - перепроецирование изображений. Remap позволяет
преобразовывать изображения из одного типа проекции в любой другой. Например, если ваш исходный снимок
выполнене с использованием объектива fish-eye, вы можете трансформировать его так, как если бы он был сделан
через традиционный прямоугольный объектив и наоборот. В качестве исходных и выходных можно задать
следующие типы проекций: нормальную (прямоугольную), цилиндрическую (QTVR), эквидистантную
(PSphere), проекцию типа fish-eye, проекцию типа 'выпуклое зеркало'.
(в) Плагин Perspective Control
Этот плагин моделирует шифт-объектив для обычных нормальных объективов и fish-eye'ев.
(г) Плагин Adjust
Основное назначение этого плагина - получение полного панорамного изображения из набора
исходных снимков, выполненых с помощью объективов любого типа. Плагин имеет встроенный оптимизатор
для определения параметров объектива (фокусное расстояние, радиальное смещение и т.д.), а также
встроенный блок сшивания изображений. Плагин позволяет осуществлять корректировку цветовой тональности,
выделять из готовой панорамы и вставлять в панораму фрагменты в любой проекции.
Однако плагин Adjust - это не единственное средство получения панорамных изображений. В дополнение
с набору плагинов Panorama Tools профессор Дерш разработал ряд автономных программных модулей,
одним из которых является PTStitcher, который, по существу решает ту же задачу, что и плагин
Adjust, но делает это уже без привязки к какому-либо графическоу редактору.
Помимо программы PTStitcher в пакет PanoTools входят также следующие программы:
(а) PTEditor - интерактивный редактор программных изображений,
(б) PTStereo, которая позволяет создавать 3-хмерные объекты из 2-х и более стереоскопических
изображений,
(в) PTInterpolate - интерполятор вида; при наличии 2 видов одной и той же сцены, сделанных из
разных точек, интерполятор позволяет создавать изображение с видом из любой промежуточной точки,
(г) PTMorpher - средство плавного преобразования одного изображения в другое,
(д) PTAverage - 'усредняет' изображения с целью снижения уровня шумов и повышения плотности,
(е) PTStripe - составляет из отдельных изображений ленты для просмотра в т.н. объектных вьюерах,
(ж) PTPicker - несложный графический Java-интерфейс к программе PTStitcher и другим перечисленным
выше программам.
Кроме того в состав этого пакета включен автономный PTOptimizer.
Нас основном будут интересовать средства создания панорам, т.е. плагины Panorama Tools и программа
PTStitcher.
Как же практически выглядит работа с PanoTools? Сразу скажем, что мы приведем лишь самые минимально
необходимые сведения, которые позволят облегчить более глубокое овладение этим мощным и разносторонним
пакета программ по созданию панорамных изображений.
В Интернете уже содержится достаточное количество
подробных описаний и инструкций по работе с PanoTools (см. Ссылки). Существует также форум на Yahoo под названием
PanoTools, насчитывающий почти полторы тысячи членов. На нем
можно найти информацию о всех новинках, касающихся этой замечательной разработки. Мы, также,
не будем касаться приемов работы с упомянутыми выше интерфесными программами (PTGui, PTAssembler),
посколько по нашему убеждению глубокое понимание того, каких результатов можно достичь при использовании
разработки профессора Дерша, не возможно без предварительного овладения изначально 'ручными'
приемами работы с ней.
Как мы уже говорили выше в основе метода лежит использование информации о контрольных точках,
а точнее о координатах пар этих точек на смежных снимках относительно их левых верхних углов.
В качестве контрольных точек следует выбирать такие, о которых заранее известно, что они не
изменят своего положения во время сеанса съемки. Иными словами характерные элементы зданий
(переплеты окон и т.п.) на снимках подойдут, а листья на деревьях в ветренную погоду и, тем
более, облака нет.
Следующим важным элементом в PanoTools, который совершенно необходимо понять и усвоить,
являются т.н. скрипты (script) - текстовые файлы, которые используется для управления работой
плагина Adjust и программы PTStitcher (а также работой других программ, входящих в пакет,
но сейчас они нас не интересуют). Помимо параметров управления скрипт содержит также
информацию о контрольных точках.
Рассмотрим конкретный пример получения круговой панорамы из 5-ти снимков (n0, n1, n2, n3, n4),
снятых с помощью диагонального fish-eye'я с интервалами, равными 72º:
Создадим 'пустой' скрипт, т.е. текстовый файл, содержащий информацию о параметрах исходных
снимков и нашей будущей панорамы, но без контрольных точек:
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
Как видно из текста скрипта он состоит строк, начинающихся с букв p, i и v.
Первая строка (p) содержит информацию о результирующей панораме:
f2 означает, что панорама должна быть в эквидистантной проекции (f0 используется для
прямоугольной проекции, f1 - для цилиндрической)(;
w и h - ширина и высота (в пикселях) будущей панорамы соответственно;
v360 указывает на то, что это полная круговая панорама шириной 360º;
u10 - ширина 'пера', которым обработаны края масок;
n"PSD_mask" означает, что результирующее панорамное изображение будет представлять собой
файл Фотошопа с маскированными слоями.
Следующие 5 строк (i) описывают свойства исходных снимков:
f3 говорит о том, что снимки сделаны с использованием диагонального объектива fish-eye
(f0 - прямоугольный объектив, f1 - снимки сделаны панорамным с поворотным объективом,
f2 - круговой fish-eye, f4 - исходные снимки сделаны в эквидистатной проекции);
w и h - ширина и высота (в пикселях) исходных снимков;
y (yaw), p (pitch), r (roll) - углы поворота аппарата в горизонтальной и двух вертикальных
плоскостях (т.н. эйлеровы углы), сответствующие, если следовать авиационной терминологии,
углам рысканья (курса), тангажа и крена; здесь исходные приблизительные значения этих
углов для каждого снимка;
v - приблизительное значения горизонтального поля зрения объектива (в нашем случае 90º);
a, b и c - коэффициенты полинома 3-й степени, аппроксимирущего кривую радиального смещения;
n"" содержит имена файлов исходных снимков.
И, наконец, последняя строка (v). Она содержит наименования параметров, которые должны
будут уточнены в результате последующего процесса оптимизации. К ним относятся: поле зрения
объектива v (одинаково для всех снимков), коэффициенты a, b и c (также постоянны от
снимка к снимку), углы y, p и r для всех исходных снимков, кроме 1-го (принимается за начало
координат).
Для получения информации о контрольных точках воспользуемся утилитой
ControlPoint 1.1.4.. Откроем созданный нами текстовый
файл-скрипт и загрузим первую пару снимков n0-n1. Начнем расставлять контрольные точки,
пользуясь приведенной выше рекомендацией:
Поочередно загрузим все пары снимков вплоть до n4-n0, расставляя для каждой пары контрольные
точки по той же методике. Определив последнюю контрольную точку, откроем наш скрипт (предварительно
его сохранив):
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
c n1 N2 x709 y140 X246 Y165 t0
c n1 N2 x712 y433 X131 Y428 t0
c n1 N2 x702 y609 X121 Y599 t0
c n2 N3 x645 y726 X90 Y719 t0
c n2 N3 x638 y478 X49 Y468 t0
c n2 N3 x552 y282 X18 Y251 t0
c n3 N4 x712 y556 X125 Y549 t0
c n3 N4 x666 y626 X88 Y619 t0
c n3 N4 x620 y993 X237 Y965 t0
c n4 N0 x574 y987 X203 Y976 t0
c n4 N0 x703 y578 X134 Y569 t0
Мы видим, что наш 'пустой' скрипт заполнился строками 'c', каждая из которых
содержит координаты контрольных точек. В целях экономии размеров скрипта мы ограничили их
количество. На деле же таких точек должно быть больше и расставлены они должны быть по
возможности по всему общему полю смежных изображений.
Выглядит пока это все немного сложно и не совсем понятно. Обещаем, что дальше будет
еще сложнее, но результат окупит все трудности.
Здесь мы прервемся и продолжим описание PanoTools во 2-й части этой статьи.
|