Форум
 

Суббота, 23.11.2024, 12.56

Вы вошли как Гость
Группа "Гости"

Главная | Форум
Новые сообщения в форуме
Регистрация на сайте
Вход

[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Стабилизация видео
Alex_SpaconДата: Воскресенье, 05.09.2010, 14.57 | Сообщение # 1
Владелец сайта
Группа: Администратор
Сообщений: 1888
Репутация: 1545
Статус: Offline
Стабилизация видео

Введение
Данная статья посвящена исследованию вопроса о программной стабилизации видео. Не секрет, что одно из основных отличий профессиональной съёмки (в частности, кино) от любительской заключается в том, что профессионалы, как правило, снимают со штативами, кранами, тележками и прочими приспособлениями, обеспечивающими неподвижность или плавное движение камеры, тогда как любители обычно об этом не задумываются. Как следствие, часто в любительской съёмке происходит такое мельтешение в кадре, что после нескольких минут просмотра начинает болеть голова, или во всяком случае пропадает желание смотреть на экран. Рецепт профессионалов, конечно, годится и для нас, простых видеолюбителей — надо учиться снимать со штативом. Однако не всегда он есть под руками, да и некоторые сюжеты нельзя толком снять с использованием штатива (а кран и тележка уже, увы, для любителей практически недоступны). Что же делать с таким видеорядом? Существуют достаточно мощные возможности по стабилизации изображения уже на этапе компьютерной обработки, и о них пойдёт речь в этой статье (во второй её части). Но сначала некоторое теоретическое введение.

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

Стабилизаторы в видеокамерах
Перед тем, как перейти к разговору о программных стабилизаторах, вспомним, как осуществляется стабилизация при съёмке. Об одном, самом надёжном методе — механическом — я уже упомянул; помимо него, есть ещё два: оптический и цифровой стабилизатор. Их механизм работы отличается в обоих составляющих.
Оптический стабилизатор состоит из детектора движения (вращения) камеры — системы гироскопов, регистирующих ускорение, и компенсирующей линзы, которая может смещаться перпендикулярно оптической оси и отклонять лучи света в противофазе к обнаруженному смещению, так что они попадают в одну и ту же область на матрице. Снятие показаний с датчиков ускорения и соответственно смещение линзы происходит несколько сот раз в секунду, т.е. много раз за время экспонирования кадра, что позволяет избежать не только нежелательного сдвига картинки между кадрами, но и размытия её в пределах одного кадра (при сильном рывке). Кстати, аналогичную функцию выполняют оптические стабилизаторы в фотоаппаратах, где нет проблемы "межкадрового сдвига".
Цифровой стабилизатор определяет смещение по анализу изображения, получаемого с матрицы. Для этого, разумеется, её реальный размер должен быть существенно больше эффективного, чтобы при небольших смещениях кадр не вылетал за пределы матрицы. Записывается же на носитель изображение с меньшей по размеру области, которая "прыгает" по матрице от кадра к кадру согласно определённому вектору смещения. Недостатки у этого метода по сравнению с оптической стабилизацией очевидны: во-первых, используется не вся площадь матрицы, что приводит к ухудшению соотношения сигнал/шум при недостаточной освещённости, во-вторых, нет возможности устранить внутрикадровое размытие (которое, впрочем, досаждает только при длинных выдержках и достаточно сильной трясучке). Кроме того, стабилизатор не может предугадать, является ли смещение случайным дрожанием либо началом целенаправленного движения камеры (например, панорамы). Это иногда приводит к эффекту "залипания", когда при начале панорамирования кадр некоторое время удерживается на месте стабилизатором, а при достижении предела (края матрицы) может резко прыгнуть. В оптической системе стабилизации такого эффекта почему-то не наблюдается, хотя возможности предсказать движение камеры нет и там.
Эффект от стабилизатора в камере очень велик, особенно при длиннофокусной съёмке (большом "зуме"). Однако стабилизатор гасит только высокочастотные колебания не слишком большой (в силу конструктивных ограничений) амплитуды. Чтобы оценить эффект от накамерной стабилизации, взгляните на следующий график:

Спектр колебаний кадра с включённым и выключенным накамерным стабилизатором,
а также после программной стабилизации

На нём представлены частотные спектры смещений камеры, определённые с помощью анализа движения в фильтре Deshaker, о котором мы поговорим во второй части статьи. Съёмка с рук удалённого неподвижного объекта производилась камерой Canon XM-2 на максимальном (20х) приближении с включённым и выключенным оптическим стабилизатором. Надо сказать, что камера эта достаточно тяжёлая (1,5 кг) по сравнению с современными "пушинками", которые, следовательно, больше подвержены тряске. Видно, что оптический стабилизатор подавляет колебания с частотой выше 1-2 герц, что, безусловно, положительно сказывается на изображении, однако недостаточно для комфортного восприятия — картинка субъективно остаётся неприятно плавающей. После программной обработки фильтром Deshaker с параметрами, подобранными для визуально приятного результата, амплитуда колебаний уменьшилась ещё в несколько раз, а колебания с частотами больше 0,5 гц вовсе исчезли. То есть и при наличии стабилизатора в камере программная обработка часто бывает очень полезна. Рассмотрим же подробнее, что она нам может дать.

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

Пример заполнения границ участками из соседних кадров. При грамотном подходе всё работает отлично,
кроме движущихся объектов (нога внизу)

Методы определения движения, как правило, работают аналогично методам, применяющимся при MPEG-подобном сжатии. То есть кадр разбивается на блоки, для каждого из них находится наиболее похожий блок в предыдущем кадре и смещение относительно него. По построенной карте смещений определяются усреднённые характеристики для всего кадра. Как правило, это две-четыре величины: смещение по горизонтали и вертикали и часто поворот и изменение масштаба. (Хотя в реальной съёмке регулятор зума не дрожит, тем не менее удобнее аппроксимировать карту смещения четырьмя, а не тремя величинами). При этом можно отбрасывать те блоки, которые движутся в явном несогласии с общим направлением, т.к. они наверняка соответствуют движению отдельных объектов в кадре относительно фона, либо же просто неправильно отождествлены в предыдущем кадре. Есть и другие (не-поблочные) подходы, например, применённый в фильтре DePan фурье-анализ, но на выходе обычно получаются те же величины. Дальше в действие вступает модуль собственно стабилизации, который строит оптимальную траекторию камеры путём сглаживания имеющейся "хаотической", выполняет смещение, поворот и масштабирование кадров на соответствующие величины, заполняет края и т.д. Выбор оптимальной сглаженной траектории похож на применение низкочастотного фильтра к "сигналу", образованному векторами смещения, т.е., по сути, убираются колебания с частотами выше частоты среза, задаваемой пользователем. Низкочастотные колебания, как правило, соответствуют более-менее целенаправленному движению камеры. (В качестве примера рассмотрим следующий видеосюжет: камера некоторое время неподвижно смотрит в одну точку, а затем резко начинает панорамирование с постоянной скоростью. Оба интервала соответствуют нулевой частоте "колебаний", а переход между ними и есть "дрожание": чем ниже частота среза, тем плавнее после стабилизации будет начало движения).
Хочу подчеркнуть, что для полноценного использования всех возможностей программной стабилизации фильтр должен быть эффективно двухпроходным: на первом этапе строятся вектора смещения для всех кадров клипа, на втором — вычисляется оптимальная траектория и выполняется стабилизация. На самом деле необязательно обрабатывать весь клип, достаточно "заглянуть вперёд" хотя бы на несколько секунд. Но и этим могут похвастаться далеко не все фильтры, а ведь без этого их работа будет не сильно интеллектуальнее накамерного стабилизатора.

Возможные артефакты стабилизации
Конечно, программная стабилизация может давать и сбои или просто некрасивые результаты. Рассмотрим возможные причины неприятностей.
Во-первых, это группа вопросов, связанных с компенсацией границ (заполнением краёв). Конечно, можно совсем от неё отказаться и обойтись адаптивным или даже фиксированным зумом, но в этом случае мы проигрываем в разрешении и, что даже более заметно, в угле обзора: если мы пытались снять объект так, что он занимал почти весь кадр, но из-за дрожания периодически частично вылетал за его пределы, то после стабилизации с увеличением центральной части мы увидим только середину этого объекта. (Поэтому лучше снимать "с запасом", оставляя по краям кадра место). Если же мы обратимся к методикам заполнения краёв, то может получиться, что в соседних кадрах объект находился в другом положении, чем в текущем, и после компенсации мы будем наблюдать странноватую картину с искажёнными краями.
Чтобы этого не происходило, опять-таки лучше стараться взять в кадр целиком движущийся объект, если это позволяют условия и цель съёмки. Аналогичное, хотя и менее заметное, нарушение происходит из-за различия в яркости соседних кадров (если автоматический экспонометр вздумал увеличить или уменьшить её). Впрочем, как сказано в статье про основные правила съёмки, лучше вообще отключить автомат и регулировать экспозицию вручную. Кроме того, некоторые камеры склонны затемнять углы кадра (виньетирование), что тоже будет слегка заметно при компенсации краёв.
Ещё одна неприятность полностью унаследована из цифрового накамерного стабилизатора: при недостаточно короткой выдержке и достаточно резком смещении кадр "поплывёт", будучи даже смещён обратно в нужное положение при стабилизации. Это выглядит как резкая кратковременная расфокусировка, хотя размытие и происходит только в одном направлении. Впрочем, большинство зрителей посчитают это менее неприятным, чем исходный рывок кадра. Чтобы минимизировать этот эффект, лучше сразу при съёмке установить выдержку поменьше (автомат камеры, как правило, при уменьшении освещённости сначала поднимает выдержку до 1/50 секунды и лишь затем открывает диафрагму; мы же желаем сделать наоборот, поставить выдержку, скажем, на 1/200 или хотя бы 1/100, а диафрагма пусть будет пошире).
Наконец, ещё один эффект возникает, когда мы стабилизируем видео, снятое на широком угле (при минимальном зуме). Спрашивается, разве такое нужно? В некоторых ситуациях — да, см. ниже. Здесь мы сталкиваемся с той же ситуацией, что и фотограф, пытающийся просто склеить панораму в Photoshop'е: в соседних кадрах будет различная перспектива, и без компенсации перспективных искажений панорама не склеится.
Все программы для работы с фотопанорамами используют компенсацию перспективных искажений, но для этого нужно знать фокусное расстояние (или угол обзора кадра), что в фотографии достигается простым чтением EXIF-параметров файла (или задаётся вручную), а в случае с видео практически недостижимо. Поэтому при стабилизации такого видео мы можем наблюдать странные "покачивания" картинки, как буд-то кратковременно одна сторона кадра к нам приблизилась, а другая удалилась.

Иллюстрация перспективных искажений: два кадра сдвинуты до совпадения центров,
но по краям выглядят по-разному

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

Режимы применения стабилизаторов
Программную стабилизацию имеет смысл применять во многих различных случаях, которые тем не менее поддаются некоторой классификации (достаточно субъективной). Условно разделим все случаи применения на три категории.
1. Съёмка на максимальном зуме более-менее неподвижного объекта, или же панорама (при большом и не очень приближении, а то и вовсе на минимальном зуме). Отличительные особенности — всё нерегулярное движение в кадре относится на счёт дрожания камеры, а после стабилизации мы должны получить почти неподвижную картинку или равномерно прокручивающуюся панораму. Кстати, случай с панорамой, пожалуй, не менее важен — с рук, да и с обычного недорогого штатива, практически невозможно снять её равномерно и без рывков даже на самом широком угле; смотрится это довольно удручающе, но после стабилизации комфортность восприятия улучшается кардинально. Этот случай — самый простой для стабилизатора, с применением компенсации краёв мы практически ничего не теряем.
2. Не очень большой зум, но заметное движение центрального объекта в кадре относительно фона. Например, скатывающийся по склону лыжник или проезжающий автомобиль. Здесь процедуре анализа движения придётся изрядно подумать, чтобы отделить объект от фона. В сущности, привязываться по движению можно и к тому, и к другому, но привязка к фону выглядит более естественной в случае, когда в движении объекта имеются заметные нерегулярности (тогда камера движется более равномерно вместе с фоном). Главное, чтобы привязка не прыгала от кадра к кадру — в одном фон занимал больше места и движение определялось по нему, а в другом — "внимание" стабилизатора переключилось на объект. Впрочем, в более простых алгоритмах этой проблемы как бы нет - вектора движения усредняются по всему кадру, но и это может выглядеть не очень хорошо. Ещё одна неприятность возникает при попытке компенсировать границы у движущегося объекта (об этом мы говорили выше). В общем, при съёмке надо делать зум немножко меньше, чем хотелось бы для полного влезания объекта в кадр.
3. Съёмка на максимально широком угле в движении (камера движется относительно всего фона, да ещё наверняка на переднем плане тоже что-то пробегает). Самый сложный случай для стабилизатора, но если удаётся справиться с ним, то выглядит это потрясающе - почти как съёмка с рельсов или крана в кино. Применять это можно для создания самых необычных ракурсов: съёмка "от первого лица" при катании на лыжах, полёте на параплане, прохождении порога; съёмка движущегося человека (людей) двигающейся параллельно ему камерой и т.д. В этом случае вдобавок к проблемам предыдущего пункта добавляются и перспективные искажения, а неприятности с границами практически неизбежны, если не уменьшить немножко поле зрения заданием дополнительного увеличения. В некоторых ситуациях стабилизировать изображение, скорее всего, вообще не удастся — например, при съёмке из окна автомобиля далёкого пейзажа, на фоне которого постоянно мелькают деревья переднего плана на разном расстоянии от камеры и соответственно с разной экранной скоростью.
Соответственно, тестировать качество работы стабилизаторов мы будем на подборке из трёх сюжетов, согласно описанной классификации. Первый — панорама, второй — скатывающийся по склону лыжник, третий — съёмка от лица лыжника biggrin
Итак, настала пора закончить с теорией и перейти к практическому рассмотрению нескольких фильтров стабилизации.

Практика стабилизации
Суха теория, друзья, а древо жизни зеленеет!.. Описанные основные идеи программной стабилизации помогут нам лучше понять, как настраивать конкретные имеющиеся фильтры стабилизации. Мы подробно рассмотрим один из лучших на сегодняшний день фильтров - Deshaker для VirtualDub, а также набор функций для AviSynth, реализованный в плагинах DePan и MVTools. Все эти программные продукты бесплатны и легко доступны на соответствующих сайтах, к тому же постоянно развиваются. Помимо них, фильтры стабилизации есть во многих программах монтажа, но они небесплатны, а работают, как правило, хуже (вот парадокс?). Среди коммерческих плагинов мы рассмотрим Mercalli — вполне качественный продукт от компании proDAD, доступный для нескольких популярных программ видеомонтажа.

Deshaker — фильтр для VirtualDub
Фильтр Deshaker — это, на мой взгляд, самый мощный инструмент для стабилизации. Дело в том, что у него огромное количество настроек, при правильном применении которых (в том числе с разными настройками для разных участков клипа) можно добиться почти чего угодно (в смысле стабилизации). Фильтр относится к числу двухпроходных, как и положено всякой серьёзной программе такого рода. На первом этапе производится анализ движения (поблочный), и вычисленные для всего кадра величины сдвига, поворота и масштабирования записываются в текстовый log-файл. На втором проходе выполняется собственно стабилизация с использованием адаптивного зума, заполнения краёв и прочими вкусностями. Фильтр разрабатывается человеком по имени Gunnar Thalin и доступен по адресу www.guthspot.se (для работы последних версий может дополнительно потребоваться загрузить библиотеки VC++ 2005 (около 2 мб). Итак, будем предполагать, что вы уже знакомы с VirtualDub (если нет, читайте соответствующую статью). Загружаете исходный клип в программу и в диалоге фильтров добавляете Deshaker. Открывается окно с большим количеством настроек, которые мы сейчас разберём подробно.

Окно настроек Deshaker

Как можно видеть, настройки собраны в три группы: общие для обоих проходов и отдельно для первого и второго (переключается кнопками Pass 1 и Pass 2 вверху). Из общих надо выставить Source pixel aspect — параметр "неквадратности пиксела": для видео 4:3 с miniDV или другой камеры стандартного разрешения это будет Standard PAL, для широкоэкранного с такой же камеры — Anamorphic PAL, для видео с фотоаппарата, как правило, оставить вариант по умолчанию Square pixels. Не менее важно задать тип чересстрочного сигнала — для большинства камер это Interlaced, lower field first, для фотоаппарата и прогрессивного режима (или frame mode) в видеокамерах — Progressive scan. Дальше имеет смысл задать имя и местоположение будущего log-файла (вряд ли захочется хранить его в корневом каталоге диска C, да и имя лучше задать соответствующим имени видеофайла).

Настройки первого прохода
Настройки первого этапа в основном призваны улучшить качество определения движения на первом проходе. Мы рассмотрим их чуть позже, а пока обратим внимание на верхнее поле: Video output можно установить в none — тогда на выходе будет чёрный квадратик 8x8 пикселей (это удобно для пакетной обработки через VirtualDub Job control), или же оставить значение по умолчанию Motion vectors, что позволит любоваться векторами движения поверх картинки (и не только любоваться, а и делать соответствующие выводы, правильно ли работает анализатор движения). Если что-то идёт не так, то настала пора менять настройки из группы Image matching parameters. А пока закроем окно фильтра и запустим первый проход. Поскольку результат всё равно никуда не нужно сохранять (только разве смотреть на экране), то имеет смысл запускать либо Preview output from start (F5), либо кнопку , либо просто прокручивать стрелкой влево, если нам нужен только небольшой фрагмент. (Вообще обычно log-файл очищается при каждом начале работы первого этапа, но это можно изменить включением галки Append to log file). На протяжении первого этапа вы будете наблюдать на экране подобную картинку:

Видеоряд на первом проходе: векторы движения

(Если видео было чересстрочным, то кадр разбивается на два поля и все параметры определяются отдельно для них, а изображаются они друг под другом соответственно сплюснутыми вдвое по вертикали). Итак, белые стрелки показывают вектора движения, определённые для каждого блока (его размер задаётся в графе Block size параметров первого прохода и по умолчанию равен 30 пикс.) Если стрелка красная, то данный блок отбраковывается и не участвует в определении общего движения кадра (блок настроек Discard motion of blocks that..), потому что либо его движение слишком противоречит общему направлению (графа Move >X pixels in wrong direction), либо просто слишком велико (Move >X pixels (absolute motion)). Некоторые блоки вообще не имеют векторов движения, если их не удалось надёжно отождествить в предыдущем кадре (например, равномерно синее небо). Их отбраковкой управляют первые два пункта из раздела Discard motion of blocks. Если количество нормальных (белых) блоков недостаточно (задаётся параметром Skip frame if < X % blocks are ok, по умолчанию 5%), то кадр пропускается (точнее, считается началом новой сцены), иначе для него вычисляются и записываются в log-файл величины сдвига центра, поворота и масштабирования (выводятся также в строке под кадром; если она красная, то хороших блоков слишком мало).

Настройки второго прохода
Первый этап закончился — переходим ко второму (нажав соответственно кнопку Pass 2 в диалоге фильтра). Здесь можно настроить размер выходного изображения (обычно он равен входному, что и задано по умолчанию), метод масштабирования (bicubic по умолчанию - не надо менять), режим работы с границами.
Пункт Edge compensation управляет режимом использования дополнительного зума: No zoom (large borders) отключает эту функцию, Adaptive zoom использует плавно меняющийся (адаптивный) зум, Fixed zoom выбирает наиболее подходящее постоянное значение зума. В режиме адаптивного зума для каждого кадра выбирается необходимое значение увеличения (с учётом уже стабилизированного движения и поворота), а далее возможны два варианта: в режиме adaptive zoom only полученные значения зума сглаживаются с учётом параметра motion smoothness (zoom), чтобы не было иллюзии резких наездов-отъездов камеры. В режиме по умолчанию Adaptive zoom (small borders) сглаживанию подвергается произведение величины зума, определённого по движению кадра, и этой дополнительной величины адаптивного зума. Разница здесь в следующем: если в сюжете не было собственно зуммирования камеры или вы не хотите его сглаживать, то стоит выбирать Adaptive zoom only. В противоположном случае оставляйте значение по умолчанию. (Надо отметить, что управление зумом на камере по конструкции не допускает резких рывков, поэтому нужды стабилизировать зум может и не возникнуть. С другой стороны, Deshaker мог ошибиться при анализе движения на первом проходе и неверно рассчитать зум, тогда при попытке его стабилизации возникнет искусственный скачок увеличения, и тогда надо либо переделывать первый проход, либо установить Adaptive zoom only. С другой стороны, если нет противопоказаний, то можно использовать стабилизацию суммарного зума, что и включено по умолчанию).
Так вот, после стабилизации кадра возникают незаполненные края, частично (но не всегда полностью) убираемые зумом. Deshaker - практически единственный фильтр, который умеет их заполнять пикселями из соседних кадров, причём соответствующим образом сдвинутыми/повёрнутыми. Этим управляет пункт Use previous and future frames to fill borders. Здесь вы можете задать число соседних (предыдущих и следующих) кадров, используемых для компенсации краёв. Величины по умолчанию 30 кадров вполне подходят для большинства сюжетов, при очень плавном движении можно их и увеличить. Пункт Soft borders управляет ещё одной "фишкой" заполнения краёв: при выключенной галке для заполнения используется участок из ближайшего по времени подходящего кадра (т.е. просматриваются кадры №n-1, n+1, n-2, n+2 и т.д., пока не будет найден присутствующий в кадре кусок изображения). При включении Soft borders для вычисления значения пикселя используются все подходящие кадры, а не только ближайший. Они усредняются с различным весом — более важны кадры, расположенные ближе по времени. Кроме того, усреднение происходит не только по времени, но и по пространству — пункт Edge transition width определяет, с какого расстояния от границы начнётся усреднение. В целом, эта функция делает края более размазанными, но при этом позволяет избежать резких переходов, что в целом положительно сказывается на восприятии изображения. Правда, при наличии широких границ обсчёт происходит весьма медленно.

Режимы заполнения пустых границ

Дополнительно можно задать метод заполнения краевых пикселей, которые не могут быть зарисованы иным образом, путём экстраполяции значений граничных пикселей (галка Extrapolate colors into border). Впрочем, смотрится это не так здорово, как компенсация из соседних кадров, и обычно в ней не возникает нужды. Кроме того, если размазанные края всё-таки мешают, то можно задать дополнительный зум в графе Extra zoom factor, например, величину 1.05 или что-нибудь в этом духе. Это тоже не самый лучший выход — стоит попытаться сначала поварьировать параметры плавности.
Степень стабилизации регулируется параметрами плавности (Motion smoothness) — отдельно для горизонтального и вертикального движения, поворота и масштабирования. В отличие от других фильтров, где, как правило, регулируется частота среза высокочастотных колебаний, в Deshaker применён иной подход: перед началом второго прохода для всего клипа вычисляется оптимальная траектория камеры, т.е. минимизирующая одновременно и кривизну траектории, и отклонение её от реальной (создающее пустые края). Эти параметры являются весовыми коэффициентами в минимизирующей функции. Они могут варьироваться в широких пределах (от 0 до 100000), большее значение соответствует большей плавности. Величины по умолчанию (400 для смещения и 1500 для зума) довольно малы, для большинства сюжетов их можно увеличить в 10-30 раз (зависимость "плавности" от них, видимо, довольно пологая). При выборе значений можно руководствоваться следующим эмпирическим правилом: чем больше плавность движения в исходном видео, тем большие значения можно безболезненно задавать. Т.е. для панорам вполне сгодятся значения 10000, а для съёмок стремительного спуска с горы, держа камеру в руках, такая плавность приведёт, во-первых, к неоправданно большим областям по краям кадра, требующим заполнения (что чревато артефактами в случае такого сложного движения), и во-вторых, уменьшит зрелищность сюжета:). Для таких динамичных съёмок подойдут величины порядка 1000. Если вы видите, что при заданных значениях остаются слишком много областей по краям, требующим заполнения, то плавность стоит уменьшить (или включить дополнительный зум). Впрочем, есть ещё средство для урегулирования быстрых рывков: группа параметров Max correction limits, задающая пределы смещения/поворота при вычислении оптимальной траектории. Их действие состоит в том, что при резких рывках, когда невозможно обеспечить одновременно и плавность траектории, и невыход за пределы смещения, параметры плавности на короткое время уменьшаются по сравнению с заданными. Ещё нужно отметить, что траектория рассчитывается по кадрам, а не по времени (для интерлейсного видео — по полукадрам). Т.е. для получения той же плавности в случае интерлейсного видео нужно установить вдвое большие значения, чем для прогрессивного с той же частотой кадров.
Итак, параметры второго прохода настроены, можно запускать. Устанавливаем кодек для видео — и в путь. Перед началом второго этапа происходит вычисление оптимальной траектории камеры для всего клипа, что может занять продолжительное время (особенно при больших параметрах плавности), но обычно сам второй проход длится намного дольше. В это время на экран выводится табличка "Deshaking". Когда вычисления готовы, можно начинать второй проход.

Но есть одна тонкость, которую нужно учитывать при использовании для заполнения границ ненулевого числа будущих кадров. Дело в том, что интерфейс взаимодействия VirtualDub с плагинами не даёт возможности произвольного доступа к входному потоку - можно получить только текущий кадр (при последовательной обработке — запомнить и любое количество предыдущих). Поэтому Deshaker использует следующий трюк: если задано ненулевое число будущих кадров F, то вывод фильтра задерживается на F кадров для аккумуляции их во внутреннем буфере. Вместо них выдаётся чёрный экран с сообщением, суть которого сводится к тому, что надо установить соответствующую задержку для звука, чтобы не возникло рассинхронизации (величина задержки в мс указана на экране).

Это делается в VirtualDub в меню Audio / Interleaving / Delay audio track by ... ms. Впрочем, часто можно этого и не делать, если звук не важен и будет заменён при монтаже (шум), или просто не привязан к изображаемым объектам. Чтобы в полученном клипе не было лишних пустых кадров в начале, нужно задать диапазон обработки с F-го кадра и перед сохранением вручную прокрутить первые F кадров. Т.е., например, вы переходите на начало клипа, нажимаете стрелку вправо нужное число раз, на F-м кадре от начала появляется изображение, вы нажимаете Home (задав тем самым начало обработки с текущего кадра) и непосредственно за этим нажимаете File / Save as AVI. Опять-таки, можно этим не заниматься, если при монтаже всё равно можно подрезать клип нужным образом.
Более неприятно, что таким образом в полученном файле будут отсутствовать последние F кадров. Чтобы этого избежать, надо перед сохранением добавить (Append avi segment) любой файл с точно тем же форматом видео и звука (они не будут использоваться) и числом кадров не меньшим F. Можно использовать сам исходный клип (тогда нужно запомнить его длину и перед сохранением выставить диапазон обработки (Video / Select range): начало с кадра номер F и длина, равная исходной). Либо, если вы обрабатываете много файлов с одним и тем же значением F (как правило, менять его не требуется), то можно заранее отрезать кусок длины F от любого из исходных файлов и добавлять его ко всем (тогда не нужно будет запоминать и выставлять длину каждого клипа, поскольку обработка будет вестись с F-го кадра и до конца).
При прокрутке внутри клипа действуют те же ограничения — чтобы посмотреть с какого-то момента, надо сначала прокрутить вручную F кадров подряд. В целом, это неудобство, обусловленное непредусмотрительно спроектированной архитектурой VirtualDub, немножко досаждает, но при должном автоматизме отнимает всего десяток секунд на клип. Можно, конечно, и вовсе не использовать будущие кадры — тогда проблемы нет, но в большинстве случаем лучше всё же их включить и действовать по описанному рецепту.

 
Alex_SpaconДата: Воскресенье, 05.09.2010, 15.02 | Сообщение # 2
Владелец сайта
Группа: Администратор
Сообщений: 1888
Репутация: 1545
Статус: Offline
Резюме по применению
Итак, суммируя изложенное, последовательность действий для работы с Deshaker такова:
  • Открываем исходный файл в VirtualDub, добавляем фильтр Deshaker, настраиваем общие параметры — Source pixel aspect, Video type, при желании — Log file; настройки первого этапа можно не трогать.
  • Запускаем первый проход нажатием F5, откидываемся на спинку стула, пьём чай, при желании — наблюдаем за векторами смещения.
  • Заходим в настройки фильтра, выбираем второй проход, ставим подходящие значения плавности (Motion smoothness), например, по 5000; включаем галку Use previous and future frames (если неохота возиться с будущими кадрами, выставляем их число в 0); желательно также включить Soft borders (хотя это сильно замедляет работу).
  • Если используются будущие кадры, то действуем согласно описанному рецепту, иначе просто сохраняем клип (не забыв выбрать кодек для видео). Смотрим его в плеере, проверяем адекватность результата; при необходимости меняем настройки второго прохода и сохраняем; если заметны дёргания или другие признаки неправильного определения движения, то придётся подкорректировать первый проход.

Сложные случаи
Бывают, конечно, случаи, когда Deshaker выдаёт не совсем устраивающий результат. Сила этого фильтра не в том, что он всегда работает хорошо, а в том, что почти всегда его можно заставить работать неплохо. То есть регулированием различных параметров добиться вполне удовлетворительного, а иногда — и отличного результата. Сейчас мы поговорим о таких сложных случаях.
Прежде всего, если что-то не устраивает, то надо определить причину. Их может быть две: неподходящие настройки второго этапа проявляются в основном в том, что возникают артефакты по краям изображения, связанные с компенсацией границ при наличии заметного движения около них между кадрами. Ещё раз подчеркну, что применяемый в Deshaker метод заполнения границ не имеет аналогов среди доступных фильтров, но и он не всегда даёт хороший результат. В таком случае надо просто уменьшить эти границы либо введением дополнительного зума, либо снижением плавности (в т.ч. и кратковременным, за счёт Max correction limits). Это было рассмотрено в секции про второй проход.
Другая причина связана с неправильным определением движения на первом проходе для отдельных кадров или групп кадров. Проявляется это в дёрганиях в соответствующих местах (это может быть смещение кадра, резкий наклон или прыгание увеличения). В этом случае надо регулировать настройки первого прохода и переделывать его целиком или частично. Если число моментов дёрганий невелико, то есть смысл пройтись по ним непосредственно: запомнив номера кадров, на которых этот эффект проявляется, и переключившись обратно на первый проход, чтобы посмотреть на определяемые вектора движения. (Если использовались будущие кадры, то из номера кадра на втором проходе надо вычесть число будущих кадров). В большинстве случаев на первом проходе в эти моменты происходит что-то неправильное — либо движение вообще не определяется (слишком мало валидных векторов), и кадр считается началом новой сцены, либо же "фокус внимания" фильтра перескакивает с одного объекта на другой (в частности, фон).

Правильно определенное общее движение фона

Неправильно определённое движение - смесь фона с движущимся объектом

В приведённых последовательных кадрах движение камеры было примерно одинаковым, но в первом случае оно определилось правильно по движению фона, а во втором — неправильно, захватив объект и вынужденно выкинув часть фона. На самом деле в последних версиях Deshaker такая ситуация, скорее всего, не возникнет благодаря более "интеллектуальной" системе слежения за объектом на фоне, выраженной в галке Remember discarded areas to next frame. По умолчанию она включена и призвана сосредоточиться на движении фона, даже если объект, постепенно увеличиваясь, занимает бОльшую часть кадра. Другая полезная "ручка", применение которой может дать нужный эффект, но сильно замедлить работу, — Deep analysis if С этими установками связаны настройки отбрасывания векторов движения, не подходящих под общую картину. Discard motion of blocks that move > X pixels in wrong direction управляет отбраковкой таких блоков (они становятся красными). Если камера находится в одной точке и общий фон не движется существенно (как, например, листва в лесу на ветру), то движение блоков фона должно очень хорошо описываться общими значениями смещения/поворота, поэтому этот параметр можно снизить до 1, выкидывая т.о. всё что не относится к фону. (При этом можно и задать размер блока (Block size) поменьше, например, 16-24 пикс.) С другой стороны, если камера движется относительно фона, то можно и задать побольше значение в этой графе, чтобы "ловить" побольше векторов движения.
Также существует и более ручной способ управлять отбрасыванием разных частей кадра, задавая игнорируемые области в секции Ignore pixels inside ... и outside ... Например, если снимать в движении, то в нижней части кадра наверняка будут объекты переднего плана, движущиеся относительно "неподвижного" фона. Их можно отрезать, задав значение в поле Outside / Bottom. С другой стороны, "мешающий" объект в центре кадра можно попытаться ликвидировать через Ignore pixels inside. Правда, если он реально движется по кадру, то довольно скоро выйдет за пределы игнорируемой области или же придётся задавать её слишком большой, что нежелательно. С другой стороны, обычно это требуется максимум для нескольких кадров подряд, так что можно прогнать их с нужной установкой и подклеить соответствующие значения в общий log файл. В конечном итоге, надо добиваться того, чтобы все белые вектора относились к фону, а красные или отсутствующие — к движущимся объектам. Хотя в некоторых ситуациях может оказаться предпочтительнее следить за движением объекта, а не фона.
Если фон малоконтрастный (небо, снег), то для многих блоков не могут быть достоверно вычислены вектора движения, т.к. не удаётся точно отождествить их в предыдущем кадре. Такие блоки вообще не будут иметь векторов движения. Если хочется как-то ослабить эту отбраковку, можно поиграть значениями в полях Discard motion of blocks that have match value best — Y. Если определённых векторов движения слишком мало (особенно если меньше, чем задано в графе Skip frame if < X % blocks are OK, что приведёт к пропуску анализа кадра), то нужно попытаться уменьшить "критичность" отбраковки путём уменьшения этих двух параметров. Кроме того, по умолчанию не используются слишком тёмные области (Ignore darker than ..), т.к. в них невелика контрастность и много шумов. Также можно применить такой трюк: на первом этапе добавить в цепочку фильтров перед Deshaker что-нибудь типа Levels или Brightness/Contrast, и "разогнать" контрастность для нужных областей (светлых или тёмных), чтобы детектор движения лучше работал. Перед вторым проходом, конечно, дополнительный контраст нужно удалить.
Для всех тонких настроек лучше выставить в максимум поля Scale (=Full) и Use pixels (=All), хотя это замедляет обработку в 2-3 раза. В конечном итоге, ничто не мешает проводить тонкую настройку параметров для отдельных участков клипа, проходить по этим участкам вручную (стрелкой вправо) и затем совмещать полученные значения с основным log-файлом (который, конечно, надо сохранить под другим именем). Формат этого файла текстовый и довольно очевидный — в каждой строке идут величины смещения по X, Y, вращения и зума для данного кадра (если видео было чересстрочным — то отдельно для первого и второго по времени поля). Начало новой сцены (кадр, для которого не удалось определить движение), помечается дополнительным флагом new_scene. Если какие-то кадры отсутствуют в log-файле, они учитываются с нулевым движением (но не с флагом новой сцены). Однако, если какой-то кадр никаким способом не удалось "распотрошить" детектором движения, то лучше задать ему не нулевые значения, а сходные с ближайшими кадрами — так можно избежать рывка в конечном видео. В принципе, можно использовать опцию Append to file (для повторяющихся кадров используется последнее заданное значение), но лучше всё же сохранять отдельные куски лога в другой файл и затем вклеивать в основной только нужные кадры. Также может пригодиться следующий трюк: использовать разные настройки для определения смещения и поворота, а затем совмещать лог-файлы "по столбцам". Например, снимая фигуру человека на каком-то фоне движущейся вокруг него камерой, мы можем захотеть привязаться по движению к центру композиции — человеку, но из-за того, что он и сам движется, и камера движется вокруг него, горизонт будет "плавать". Можно прогнать первый проход с учётом только центра кадра, определив смещения, а затем — ещё раз с учётом периферии, определив повороты относительно горизонта, и вставить в первый log-файл столбец с поворотами из второго. В общем, варианты ручного вмешательства могут быть самыми разными.
Пару слов об организации "техпроцесса". Ясно, что лучше стабилизировать отдельные сюжеты, а не весь фильм (т.е. лучше при захвате делать нарезку сцен в отдельные файлы), причём ещё до включения видео в монтажную программу. Можно, впрочем, действовать следующим образом: монтировать с исходными файлами, а перед окончательной сборкой (render, export) заменить их на стабилизированные с теми же именами и параметрами, а исходные переложить в другую директорию. При этом первый проход фильтра можно провести в пакетном режиме (Virtual Dub job control) для всех требуемых файлов (только не забыть писать всё в отдельные log-файлы), а вот второй этап, скорее всего, придётся делать вручную (если использовать махинации с future frames и append avi segment). Впрочем, если не жалко последние 25-30 кадров и не напрягают пустые кадры в начале, то можно оба прохода делать в автоматическом режиме. На первом этапе тогда пригодится опция Video output: none. Также, чтобы не вводить постоянно значения параметров, их можно сохранить, используя опцию VirtualDub Save/Load processing settings (это относится не только к параметрам Deshaker, а и ко всем остальным настройкам VirtualDub — кодеки, параметры звука и т.д. — короче, удобно иметь один или несколько сохранённых пресетов обработки).
Итак, Deshaker — очень мощный и гибкий инструмент, отлично работающий на стандартных настройках и дающий широкие возможности для ручного вмешательства. Он имеет уникальный алгоритм заполнения краёв, что решает одну из главных неприятностей стабилизации. К недостаткам его можно отнести не очень удобное использование (в отдельной программе, а не в вашей любимой монтажке), необходимость предпринимать специальные меры для включения возможности работы с будущими кадрами, медленную скорость работы. Если вас интересует качественный результат любой ценой и вы готовы возиться с настройками, то Deshaker — лучший выбор.

 
Alex_SpaconДата: Воскресенье, 05.09.2010, 15.20 | Сообщение # 3
Владелец сайта
Группа: Администратор
Сообщений: 1888
Репутация: 1545
Статус: Offline
Depan и MVTools — фильтры для AviSynth

Плагины, которые мы сейчас рассмотрим, относятся к программе обработки видео Avisynth. Если вы ещё с ним незнакомы, то очень рекомендую почитать вводную статью. Принцип работы Avisynth отличается от привычного — последовательность действий над видеофайлами записывается в виде скрипта (текстового файла с расширением .avs), который может быть загружен для просмотра или сохранения (кодирования) во многие программы, например, в тот же VirtualDub. Все настройки фильтров осуществляются заданием соответствующих параметров в строке скрипта, вызывающей данный фильтр. Результат можно посмотреть, открыв заново скрипт в VirtualDub (или другой программе). Это несколько непривычно на первый взгляд, но весьма удобно в плане хранения шаблонов применения фильтров.
И Depan, и MVTools — это не отдельные фильтры, а наборы из нескольких функций, предназначенных для решения многих задач, связанных с определением и компенсацией движения в кадре. При этом Depan работает с глобальным движением в кадре (как Deshaker в VirtualDub), а MVTools — с движением отдельных блоков (Motion Vectors), аналогично тому, как это делают MPEG-кодировщики. Есть функции для определения движения (DepanEstimate и MVAnalyse), которые выдают в качестве результата специальный поток данных, содержащий движение кадра как всего (для Depan) или вектора смещения отдельно для всех блоков кадра (MV). (Также есть функция MVDepan, которая по векторам смещения для блоков выдаёт параметры движения для всего кадра, т.е. переводит информацию из второго плагина в первый). Далее эти данные можно использовать в различных целях. Например, для собственно стабилизации движения (функция DepanStabilize). Или для компенсации движения, т.е. приведения текущего кадра к виду, максимально похожему на соседний (смещением и масштабированием его как целого для Depan или поблочным смещением для MVCompensate). Это используется как промежуточный этап в ряде сложных скриптов для временнОго шумоподавления или motion-compensated деинтерлейса. В пакет MVTools также входят функции для плавного изменения частоты кадров (временнОй интерполяции движения), размытия (motion blur) и т.д. Отметим, что рассматриваемые фильтры не работают напрямую с чересстрочным видео — для этого надо его сначала разложить на поля (SeparateFields), а после обработки — собрать обратно (Weave).
Последовательность работы с этими плагинами для достижения стабилизации такова: вызывается функция-"сервер", определяющая движение (DepanEstimate или связка MVAnalyse+MVDepan), её результат присваивается некоторому промежуточному клипу (который содержит не видеокадры, а служебную информацию для каждого кадра). Это соответствует первому проходу — анализатору движения в Deshaker. Далее в скрипте этот промежуточный клип используется вместе с исходным видеорядом для стабилизации (функция DepanStabilize). В силу архитектуры Avisynth, для вычисления конечного результата (кадров выходного потока) могут использоваться любые кадры исходного и промежуточных клипов в любом порядке, что и используется в DepanStabilize: он вычисляет оптимальную траекторию, запрашивая данные по движению для ряда предыдущих и последующих кадров, которые в этот момент анализируются предыдущей функцией (например, DepanEstimate). Таким образом, хотя формально вычисление выходных кадров происходит в один проход, внутренний механизм работы фильтра двухпроходный (точнее, с заглядыванием вперёд на фиксированное число кадров, не на весь клип). Благодаря кэшированию промежуточных кадров в Avisynth анализ движения выполняется однократно для каждого кадра, то есть мы не теряем в производительности.
Функция DepanEstimate производит оценку глобального движения методом фазовой корреляции (с помощью преобразования Фурье и определения наиболее подходящих величин сдвига, максимизирующих корреляцию данного кадра с предыдущим). Этот метод очень устойчив, нечувствителен к изменениям яркости, но определяет только смещение. Увеличение можно найти, коррелируя отдельно левую и правую части кадра и вычисляя разницу, хотя это менее надёжно. Поворот кадра не оценивается вовсе из-за ещё меньшей надёжности. Функция имеет ряд необязательных настроечных параметров и выдаёт псевдоклип с данными по движению, а также может выводить результат в log-файл, совместимый по формату с Deshaker'овским. Из важных параметров отметим trust — пороговое значение корреляции, ниже которого кадры признаются непохожими (смена сцены); zoommax — ограничение для оценки зума, если 1 (по умолчанию), то зум не оценивается; info — если true, то выходной клип будет содержать не служебную информацию, а исходный видеоряд с наложением вычисленных величин смещения и флага смены сцены (для отладки параметров, по умолчанию false).
Альтернативный способ оценки движения — вызов MVAnalyse для поблочного определения движения, а затем MVDepan для оценки глобального движения (с отбрасыванием блоков, сильно выбивающихся из общего направления, также как в Deshaker). MVAnalyse имеет очень много настроечных параметров, касающихся методов определения движения блоков и их согласованности для всего кадра. Есть и отладочная функция MVShow, позволяющая увидеть векторное поле движения блоков. Функция MVDepan конвертирует выходные данные MVAnalyse в формат, совместимый с Depan, то есть по движению блоков вычисляет глобальное движение для кадра. Она также имеет много настроек, управляющих отбрасыванием "неправильных" векторов (не согласующихся с общим движением), но, к сожалению, не может раскрашивать их разным цветом для отладки (но может выводить текстовую информацию о глобальном движении поверх клипа, а также записывать её в совместимый с Deshaker'ом log-файл). Параметры zoom и rot включают оценку зума и вращения вдобавок к смещению (в последнем случае необходимо правильно указать пропорции пикселя — pixaspect).
Полученные на первом этапе данные по анализу движения передаются в функцию DepanStabilize. (Вместо этого ей можно указать имя log-файла в формате Deshaker, что делает эти плагины совместимыми с ним по отдельности для первого и второго прохода). Для стабилизации движения камеры используется один из двух методов (начиная с версии 1.10): инерциальный (ранее — единственный) и усреднения. Оба используют в качестве параметра плавности cutoff частоту среза колебаний в герцах (см. самый первый график в статье), но отличаются в способе построения траектории: инерционный метод использует уравнение типа осциллятора с вынуждающей силой (исходными колебаниями камеры) и затуханием, что приводит действительно к запаздыванию реакции: если быстро водить камерой туда-сюда, то на выходе будут всё равно колебания, но с меньшей амплитудой и запаздывающие относительно входа. Этот метод использует информацию о движении только для предыдущих кадров. Метод усреднения выглядит более предпочтительным, т.к. использует информацию и о движении в будущем, но работает медленнее.
Для устранения пустых краёв доступны несколько опций: адаптивный зум (параметр addzoom=true, zoommax= предел увеличения) - работает, по-видимому, только для инерционного метода; mirror — заполнение краёв зеркально отражёнными пикселами (смотрится довольно курьёзно); prev и next — число предыдущих и последующих кадров, один из которых выбирается для заполнения (при этом кадр смещается, а при использовании MVDepan — также поворачивается, до совпадения с текущим кадром). В целом, наиболее приемлемые результаты получаются при комбинировании всех трёх методов, при условии, что вблизи границ не было чётких контуров (возможно также размытие отражённых областей — параметр blur). Использование адаптивного зума (время реакции задаётся параметром tzoom (сек)) весьма желательно, т.к. заполнение краёв далеко не идеально, но, к сожалению, в текущей версии недоступно для более совершенного метода стабилизации (усреднения).
Также для заполнения пустых краёв можно воспользоваться алгоритмом Exemplar-based inpainting (нечто вроде инструмента Clone stamp в Photoshop, т.е. заполнение текстурой из соседней области того же кадра), который реализован в фильтре ExInpaint. Выглядит довольно интересно."
В общем, этот набор фильтров удобен для потоковой (в стиле Avisynth) обработки не очень сложных для стабилизации фрагментов, но в сложных ситуациях может давать заметные артефакты. Надо отметить, что область его применимости далеко не ограничивается стабилизацией, так что если вы активно используете Avisynth для обработки видео, то стоит изучить этот комплекс фильтров подробнее (сами фильтры, документацию к ним на русском языке и примеры скриптов можно взять здесь).

 
Alex_SpaconДата: Воскресенье, 05.09.2010, 15.26 | Сообщение # 4
Владелец сайта
Группа: Администратор
Сообщений: 1888
Репутация: 1545
Статус: Offline
Mercalli — фильтр для нескольких программ монтажа

Фильтр Mercalli от компании proDAD работает в нескольких наиболее популярных программах монтажа, включая Adobe Premiere Pro, Adobe Premiere Elements, Adobe AfterEffects, Avid Liquid, Canopus Edius, Sony Vegas и Pinnacle Studio. Фильтр доступен в демо-версии (функционально идентичен Expert, но выводит красный крест поверх видео), стандартной (ограничена SD разрешением и отсутствием некоторых настроек) и Expert. Также в паре к нему имеется фильтр VideoShaker, который, наоборот, добавляет дрожание (например, чтобы уравнять с видеорядом восприятие вставленной в фильм фотографии). Этот фильтр позиционируется разработчиками как "лёгкий в использовании", т.е. не требующий особых знаний теории, но при этом всё же предлагает определённое количество настроек. Кроме того, имеется около 30 пресетов, подбирающих оптимальные параметры под конкретный тип задач.
Фильтр также работает в два прохода. Сначала при его применении к клипу на timeline вызывается окно фильтра, в котором можно настроить его параметры.

Окно настроек Mercalli

Здесь мы сразу нажали кнопку Further settings, открывающую доступ ко всем настройкам. Как видно, почти все они даются в "условных величинах", но их физический смысл более-менее ясен. В середине находится блок настроек определения движения на первом проходе. Точность определения движения (Motion detection) может варьироваться от быстрой (more quickly) до точной (more valid) — нет причин не ставить её на максимум, просчёт всё равно идёт довольно быстро (хотя авторы утверждают, что среднее положение вполне достаточно в большинстве случаев). Important picture area управляет, на что больше ориентироваться при анализе движения — на центр кадра или его края, т.е., по большому счёту, на объект или фон. Настройки Special video analysis дают дополнительные возможности по учёту векторов движения: Detect shapeless content — в малоконтрастных областях (например, в облаках); Fast motions — с большими смещениями (обычно игнорируются), Micro motions — с очень малыми смещениями (тоже обычно игнорируются; включение сильно замедляет работу и может дать худший результат при большой зашумлённости картинки). Нижнее поле (Particular distinguishing characteristics) тоже управляет "вниманием" детектора движения: только силуэт (крупные детали) / контуры объекта / мелкие детали.
Справа находятся настройки стабилизации, т.е. второго прохода. Camera stabilization управляет степенью стабилизации — от лёгкой (Soft), устраняющей только сильную тряску, до Static, создающей эффект неподвижной камеры. Настройка Camera balance управляет "инерционностью" движения стабилизированной камеры; обычная установка in balance оптимальна для большинства случаев. Настройка Camera motion определяет, какие движения стабилизировать: только смещения (inclination), также повороты (tilt), также увеличение (zoom). Далее идут настройки компенсации краёв изображения. К сожалению, Mercalli не умеет заполнять их так, как Deshaker, так что остаются два варианта: или оставлять их чёрными, или заполнять пикселами с краёв картинки (галка Fill up border region). Кроме того, можно задать увеличение центральной части кадра для устранения бордюров (регулируется ползунком Scaling, либо включением режима Without borders(upscaled) для полного устранения бордюров). Адаптивным зумом фильтр, по-видимому, также не обладает, так что выбирается максимальная фиксированная часть кадра, не дающая пустых краёв. Вероятно, upscaled — единственная более-менее визуально приемлемая установка.
Кроме отдельных настроек, можно выбирать пресеты под конкретную задачу — съёмка с рук, с плеча, со штатива, с сильным дёрганием и т.д., а также пресет общего назначения (versatile).
После настройки и нажатия OK запускается первый проход фильтра, на экран при этом выводится окошко с исходным видео, раскрашенным в разные цвета и с различными линиями поверх. Видимо, для конечного пользователся это служит только средством внушения уважения к мощи фильтра, поскольку никаких комментариев по содержанию окошка разработчики не дают.

Первый проход фильтра Mercalli

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

Прочие программы и фильтры для стабилизации
Кроме описанных здесь, существует ещё множество других программ и фильтров для стабилизации видео. Можно упомянуть Dynapel SteadyHand, 2d3 SteadyMove, фильтр Motion stabilize в пакете BorisRED, фильтр Track/Stabilize motion в Adobe AfterEffects. Первые два имеют минимум настроек, а в последних двух сходу тяжело разобраться, хотя профессионалы вовсю используют и Boris RED, и After Effects. Качество определения движения у них приемлемое, но из-за более простой — однопроходной — реализации возникают большие поля, которые можно убрать только зумом (заполнять края эти фильтры не умеют). В общем, некоторая область применимости у них есть, но универсальными их никак не назовёшь.

 
Alex_SpaconДата: Воскресенье, 05.09.2010, 15.26 | Сообщение # 5
Владелец сайта
Группа: Администратор
Сообщений: 1888
Репутация: 1545
Статус: Offline
Сравнение работы стабилизаторов
Всё это хорошо, но что же выбрать? Для ответа на этот вопрос можно сравнить поведение программ в типичных ситуациях, с которыми приходится иметь дело, чем мы сейчас и займёмся. В конце будет дана сводная таблица особенностей программ и их субъективная оценка.

Тестирование на нескольких сюжетах
[size=10Чтобы столкнуть нос к носу рассмотренные фильтры стабилизации, мы выбрали несколько сюжетов, подчёркивающих те или иные сложности процесса. Все отрывки имеют длину 200 кадров (8 секунд) и прогрессивный источник видео (чересстрочное обрабатывается более-менее так же).[/size]

Сюжет 1

Первый сюжет — панорама, снятая на широком угле, с заметными рывками (в т.ч. и вращением камеры вокруг оси), с малоконтрастными объектами в кадре.
Для Deshaker настройки первого прохода стандартные, ему вполне хватало, за что зацепиться взглядом (в более сложных случаях прежде всего выставляются на максимум Use pixels и Scale, затем уменьшается отбраковка малоконтрастных блоков). На втором проходе ставится Adaptive zoom only, 30 соседних кадров, параметры плавности побольше (10000).
Для Depan в функции DepanEstimate понижается порог trust (до 1.0), иначе некоторые малоконтрастные кадры считаются началом новой сцены (выясняется через режим info). На втором проходе добавляем соседние кадры (prev=next=20), отражение границ (mirror=15, blur=20), адаптивный зум (addzoom=true) и увеличиваем плавность (cutoff=0.2, чем меньше — тем плавнее). Результат похуже - остаётся заметное вращение. Если вместо DepanEstimate использовать MVAnalyse+MVDepan, то ситуация несколько лучше, но всё равно неидеальна.
В Mercalli включаем Detect shapeless content, Also detect details, ручку Camera stabilization в среднее положение, компенсацию поворотов (also tilt compensation), а края приходится убрать установкой Without borders(upscaled). В результате поле зрения меньше, а картинка более размытая.

Сюжет 2

Второй сюжет — съёмка спускающегося на лыжах человека. Особенности: временами малоконтрастный фон, заметное и нерегулярное движение фигуры относительно фона, зуммирование камеры.
Deshaker: настройки первого этапа стандартные, второго такие же, как раньше, добавили Soft borders (в прошлом сюжете это не потребовалось, даже если было бы включено), уменьшили плавность до 2000. В середине сюжета несколько кадров, когда фон почти отсутствует, и движение определяется по фигуре, а не по фону — в этом месте для остальных фильтров заметен некоторый рывок в скорости движения. Тщательно поработав с настройками первого этапа и совмещая log-файлы от разных настроек, можно добиться полной плавности, что и было сделано. Ещё в паре мест видна неидеальность компенсации краёв.
Depan: порог чувствительности снижаем до 2.0, используем DepanEstimate (вращение несущественно на фоне быстрых движений), частота среза — 1.0 по умолчанию.
Mercalli: смещаем ручку Importance area левее (к borders), Stabilization — к Soft (обе на пару делений от края); включаем Detect fast motions.

Сюжет 3

Третий сюжет — съёмка в движении с рук, спускаясь на лыжах. Движение камеры относительно пейзажа, и как следствие, неравномерное движение в кадре разноудалённых объектов.
Deshaker: на всякий случай на первом проходе отключаем анализ для нижней четверти кадра (Ignore area outside), всё равно там быстро движущаяся навстречу земля. На втором проходе плавность снижаем до 1000, а то драйв пропадает:)
Depan: болтанка камеры по всем направлениям, поэтому используем MVAnalyse для учёта вращения; остальные настройки такие же. Дёргания уменьшаются, но остаются заметно сильнее, чем после Deshaker — это "заслуга" DepanStabilize: если с log-файлом от MVdepan запустить deshaker, то движение будет намного плавнее.
В Mercalli выбираем пресет Improve helmetcam while racy drive (как раз для нашего случая), опять убираем бордюры (и зачем их там оставляют по умолчанию, раз замазывают всё равно скверно?). Плавность движений адекватная, но опять угол обзора меньше (впрочем, это не особо заметно).
В целом, можно сделать следующие выводы: Mercalli уверенно стабилизирует практически любую болтанку, но при этом приходится уменьшать размер кадра, что часто нежелательно. Depan хорошо работает в несложных случаях, при наличии вращения камеры лучше пользоваться анализом движения из MVTools; в сложных случаях стабилизация недостаточная; заполнение краёв смотрится не слишком хорошо. Deshaker хорошо работает практически во всех случаях, хотя иногда бывает полезна ручная настройка отдельных кадров; заполнение границ реализовано наиболее правильным способом, если оно всё же даёт артефакты — можно использовать дополнительный зум.

Сравнительные характеристики рассмотренных программ

  • [1] первый проход выполняется параллельно со вторым
  • [2] первый проход выполняется при закрытии окна настроек
  • [3] для работы с чересстрочным видео требуются соответствующие "обкладки" в скрипте
  • [4] есть модификации скрипта для использования с многопоточной версией Avisynth
  • [5] Depan определяет только сдвиг, MVTools — также поворот кадра
  • [6] выглядит хорошо только при использовании дополнительного зума

Итак, выводы — кратко: Mercalli — удобен в работе, быстр, хорошо справляется со стабилизацией, но приходится растягивать центр кадра на весь экран, чтобы избежать краёв. Плагины для Avisynth стоит изучить, если душа лежит к этому замечательному средству обработки видео, и применять по мере необходимости (не только для стабилизации); в несложных случаях хорошо справляются с задачей стабилизации. Deshaker — универсальный инструмент, качественно (хотя и довольно медленно) работает почти в любой ситуации, его стоит освоить в любом случае (надеюсь, данная статья поможет в этом; см. также более старое руководство).
В большинстве случаев домашнее видео заметно выигрывает после программной стабилизации, так что изучайте и применяйте с умом! Если же у вас еще остались вопросы по стабилизации, то их можно обсудить в этой теме Конференции iXBT.com. Добро пожаловать!

Евгений Васильев. 18 февраля 2008 г.

Автор выражает благодарность Александру Балахнину aka Fizick
при участии Сергея Гавриша aka Turyst04

 
ИсаковДата: Воскресенье, 05.09.2010, 20.09 | Сообщение # 6
I
Группа: Друзья
Сообщений: 1
Репутация: 0
Статус: Offline
Олег Иванович. Спасибо за энциклопедию обработки видео. Я хотел, конечно, попроще, типа- туда нажми, сюда нажми, но и это здорово.

 
Alex_SpaconДата: Воскресенье, 05.09.2010, 20.30 | Сообщение # 7
Владелец сайта
Группа: Администратор
Сообщений: 1888
Репутация: 1545
Статус: Offline
Что бы туда-сюда на жмать,
надо перед съемками пить меньше и снимать со штатива!

Но сам в данный момент пытаюсь протестить Mercalli на своей Pinnacle Studio 11.1.
Когда сделаю, опишу.

 
  • Страница 1 из 1
  • 1
Поиск:

Rambler's Top100

Яндекс.Метрика

Copyright Alex Spacon © 2010-2024
Бесплатный конструктор сайтов - uCoz