Поля, интерлейс, прогрессивная и чересстрочная развертка.
Итак, являясь счастливым обладателем видеокамеры, Вы, наконец, нашли способ сбросить свое видео на компьютер для дальнейшей обработки. И вдруг, разглядывая видео на мониторе, Вы замечаете искажения на границах движущихся объектов, очень похожие на гребенку (Рис.1)
Interlace_01.gif 14,33К
1361 Количество загрузок:
Рис.1. Искажения границ
Не пугайтесь, с Вашей камерой, кабелями, картой и программой захвата, а так же софтовым плеером все в порядке. Так и должно быть! Вы столкнулись с интерлейсом (Interlace) - следствие чересстрочной развертки.
Так в чем же собственно дело? Рассмотрим принцип формирования обыкновенного телевизионного кадра. ТВ кадр состоит из 625 строк, 576 из которых являются видимыми (несущими информацию об изображении), а 49 – служебными. Строки выводятся (отображаются) на экран не последовательно (1-я, 2-я, 3-я и т.д.), как естественно было бы предположить, а через одну – в начале выводятся нечетные строки (1-я, 3-я, 5-я и т.д.), а затем четные (2-я, 4-я, 6-я и т.д.), или наоборот, что называется чересстрочной разверткой. Т.о. кадр делится на два полукадра состоящих из нечетных и четных строк. Каждый такой полукадр называется полем. Причем, поле, состоящее из нечетных строк, называется нечетным или верхним, а поле, состоящее из четных строк – четным или нижним (Рис.2). Очередность вывода полей может быть разной, для DV формата (следовательно, для всех miniDV видеокамер) первым полем является нижнее/четное.
Interlace_02.gif 7,52К
662 Количество загрузок:
Рис.2. Поля ТВ-кадра.
Т.е. телевизионное изображение обновляется не 25 раз в секунду (частота кадров), а 50 раз в секунду (здесь и далее имеется ввиду формат PAL).
Теперь мы подошли к самому главному. Видеокамеры, в отличие от кинокамер, снимающих на кинопленку, со скоростью 24 кадра в секунду, снимают 50 полей (полукадров) в секунду и кадр формируется путем сложения обоих полей. Т.е. каждую 1/50 секунды с матрицы видеокамеры считываются и записываются по переменно четные и нечетные строки. (Ради справедливости стоит заметить, что на сегодняшний день появились сравнительно недорогие видеокамеры, реализующие функцию прогрессивной съемки – фиксирующие полный кадр каждые 1/25 секунды.)
Но, рассмотрим процесс видеосъемки подробнее на примере уже знакомого колобка. Пусть колобок катится слева направо, видеокамера неподвижна. В первый момент времени видеокамера фиксирует на матрице изображение и считывает четные строки, формируя нижнее поле. Через 1/50 секунды видеокамера считывает нечетные строки, формируя верхнее поле. Сложим два поля – получим кадр (Рис.3).
Interlace_03.gif 8,83К
639 Количество загрузок:
Рис.3. Видеосъемка.
Вот оно! За 1/50 секунды колобок успел переместиться относительно положения зафиксированного в нижнем поле и верхнем поле оказался правее! Ну, как? Похожа картинка на то, что Вы видите на своем видео?
Для подтверждения теории рассмотрим фрагмент кадра реального видео - "Рука в прощальном жесте" (Рис.4).
Interlace_04.gif 22,41К
332 Количество загрузок:
Рис.4. Разложение по полям.
Слева фрагмент исходного кадра, в котором присутствуют оба поля. Далее, я накладывал маску из черных строк. Сначала, закрыв все нечетные строки, я получил нижнее поле, затем закрыв все четные строки – верхнее. И если в кадре не ясно, в каком положении находятся пальцы руки, то в полях четко зафиксированы два различных их положения.
Итак, видеокамеры используют чересстрочный режим съемки – по полям, телевизоры выводят изображение по полям, и никаких искажений границ мы не замечаем. Вдобавок, получаем выигрыш в плавности движений – фиксация положения движущегося объекта каждые 1/50 секунды против 1/25 или в киносъемке – 1/24. И если Вы готовите свое видео для будущего просмотра на телевизоре (SVCD, DVD или видеокассета), вам надо беспокоиться лишь о правильном чередовании полей. Но в мониторах компьютеров используется прогрессивная (построчная) развертка - кадр отображается полностью, т.е. поля складываются и выводятся одновременно за один проход, вот тут мы и наблюдаем описанные выше искажения. Что же делать, если мы хотим создать фильм, предназначенный для просмотра на ПК? Выход есть! Но это отдельная тема, которую мы рассмотрим в следующий раз. (Ищите тему "Деинтерлейс".)
Деинтерлейс.
В прошлой теме мы выяснили, что причиной интерлейса является смещение изображения объекта в кадре за промежуток времени между его фиксацией в нижнем и верхнем поле. И время это, для видеокамер, равно 1/50 секунды.
Как же можно избавиться от этой противной "гребенки"?
У нас на выбор целых 4 методики устранения интерлейса (здесь мы рассматриваем только общедоступные программные методы, без уменьшения физического разрешения по вертикали):
1. Отбрасывание информации одного из полей и копирование в него информации из другого поля, т.е. дублирование одного из полей;
2. Смешивание цветов из обоих полей;
3. Отбрасывание информации одного из полей и интерполяция пикселей по окружающим его пикселям другого поля;
4. Компенсация движения между полями, т.е. расчет векторов смещения объектов в одном поле относительно другого и возврат их в нужное положение.
Рассмотрим уже знакомый фрагмент кадра:
Interlace_01.gif 14,33К 1361 Количество загрузок:
Рис.1.
Ниже приведена его часть, увеличенная в два раза, после обработки фильтрами деинтерлейса по каждой из методик (Рис.2).
DeInterlace_01.gif 51,46К
895 Количество загрузок:
Рис.2. Результаты работы фильтров деинтерлеса.
Рассмотрим подробнее каждую из методик:
- Дублирование – самый простой и быстрый метод, однако на изображении явно заметны "ступеньки". Фактически данный метод вдвое уменьшает вертикальное разрешение изображения, отбрасывая одно поле - теряем ровно половину информации.
- Смешение цветов – так же достаточно простой и быстрый метод, с одной стороны потери информации не происходит, но смазывает детали и образует отражения движущихся объектов (как на следующем фрагменте).
DeInterlace_01a.gif 4,5К
199 Количество загрузок:
- Интерполяция – заметно проигрывает в производительности первым двум методам, однако, на первый взгляд, дает более симпатичный результат. Но, не будем забывать, что информация одного из полей интерполируется по информации из другого поля, детали, зафиксированные камерой в одном из полей потеряны. Фактически этот метод, как и первый, вдвое снижает эффективное разрешение изображения.
- Компенсация движения – теоретически самый эффективный метод, поскольку должен предотвратить потерю информации из второго поля и сохранить лучшую детализацию по сравнению со всеми предыдущими методами. Хотя на практике этого практически не заметно, видимо, весьма сложно достаточно точно определить те самые вектора смещения изображения. Рассмотрим искусственно созданный пример с высокой вертикальной детализацией (Рис.3).
DeInterlace_02.gif 59,72К
713 Количество загрузок:
Рис.3.
Попытка фильтра, основанного на компенсации движения, сохранить детализацию (4) сильно похожа на шум и выглядит даже хуже чем результат интерполяции (3). При наличии в движении еще и вращательного момента, ситуация только усугубляется – появляются ложные детали. Вторая проблема – поля далеко не всегда дополняют друг друга. Такой простой пример – прыгающий матрос в тельняшке. Пусть в первый момент времени в первом поле были зафиксированы темные полосы тельняшки, какова вероятность того, что через 1/50 секунды во втором поле окажутся белые полосы? Думаю – 50/50. Т.е. запросто может оказаться, что и в первом и во втором поле будут зафиксированы темные полосы, и какой суперфильтр не применяй, а матрос будет не в полосатом тельнике, а в темной майке. Но все-таки, при малом движении существующие фильтры, применяющие компенсацию, показывают лучший результат.
Итак, мы пришли к тому, что практически любой способ деинтерлейса ведет к понижению эффективного вертикального разрешения вдвое. Не отчаивайтесь, не все так плохо. Здесь на сцену выступают так называемые area-based фильтры. До сих пор мы говорили о движущихся в пределах кадра изображениях, что же происходит с неподвижной частью кадра? Отличительной особенностью area-based фильтров является то, что они пытаются определить и подвергнуть обработке только движущиеся части изображения, в то время как неподвижная часть изображения остается не тронутой, т.е. сохраняется вся информация из обоих полей. А движущиеся изображения объектов и так немного смазаны. Вас это радует? Идем дальше…
Вернемся к рис.2, вы обратили внимание, что в результатах 2, 3 и 4 на некоторых участках изображения присутствуют горизонтальные полосы? А это как раз недостаток area-based фильтров. Дело в том, что фильтру необходимо по какому-то признаку определять является ли конкретный пиксель частью движущегося изображения и подлежит обработке или нет. А определяется это на основе сравнения соседних пикселей в разных полях, либо сравнением одного пикселя в разных кадрах, либо применяются оба метода вместе. Сравнение может проходить по цвету или по яркости. Т.о. должно существовать некоторое пороговое значение, если разница меньше – пиксель признается принадлежащим статичной части изображения и не подлежит обработке, если разница больше – пиксель принадлежит движущейся части изображения и подлежит обработке. Некоторые фильтры позволяют настраивать все эти параметры: производить сравнение в полях или кадрах, или и обоими способами, сравнивать по цветовой или яркостной составляющей, задавать пороговое значение. Чем больше величина порогового значения, тем меньше пикселей подвергаются обработке, чем меньше значение, тем больше размывается статичных элементов (Рис.4).
DeInterlace_03.gif 50,27К
601 Количество загрузок:
Рис.4.
Опять дилемма, – какой способ сравнения выбрать, и какое выставить пороговое значение? Вообще, для каждого фильма приходится подбирать настройки индивидуально. Единственное, что могу посоветовать – оставить сравнение по цветовой составляющей для мультфильмов, а для фильмов выбирать сравнение по яркостной составляющей.
И на последок выскажу еще несколько соображений.
Обращали ли вы внимание на то, что miniDV видеокамеры, имеющие (по проводимым тестам) горизонтальное разрешение чуть ли не более 600ТВЛ (что само по себе сомнительно, поскольку теоретический предел PAL кадра 720х576 – 540ТВЛ), в то же время, в вертикальном разрешении имеют показатели не многим более 400? Возможно, производители видеокамер намеренно занижают показатель вертикального разрешения, чтобы в изображении снизить искажения (изломы) тонких наклонных линий.
И второе, коли речь идет о деинтерлейсе, вероятно, что видео предназначается для просмотра на ПК, тогда есть смысл сразу привести его к нормальному соотношению сторон, исправив тем самым некоторую вытянутость изображения по вертикали. Ближайшее "правильное" разрешение (с учетом дальнейшего сжатия в MPEG) составляет 720х544, можно уменьшить и до 640х480, или, если фильм захвачен с VHS видеомагнитофона, и мы хотим уместить 1.5 часа на 1 CD – уменьшить до 512х384. Изменяя размер кадра, мы интерполируем все пиксели изображения, частично скрывая артефакты в виде горизонтальных полос.
Я нарочно не приводил здесь сравнения фильтров различных производителей, поскольку многое зависит от самого видео, да и у пользователей нет единого мнения на их счет, тем более ПО постоянно обновляется. Многие фильтры являются встроенными в пакеты обработки видео (Adobe Premier, Canopus ProCoder), в кодеки (DivX), некоторые поставляются отдельными подключаемыми модулями (QS Deinterlace, Alparysoft Deinterlace). Я ставил себе задачу помочь начинающим разобраться в применяемых методиках и выбрать наилучший для себя вариант.
p.s.: если у вас ничего путного не получается с деинтерлейсом вашего видео - остается эффект отражения, или, хуже того, в видео наблюдается жуткий строб, смотрите следующую тему "Проблемы чередования полей".
Проблемы чередования полей
Здесь я хотел рассмотреть проблемы, причиной которых становится чередование полей в видео. Это и не настоящая чересстрочность и бич многих монтажистов – строб.Кто-то, прочтя первые две темы, может спросить: "А зачем это нужно? Сколько лет монтирую, и никогда не сталкивался ни с какими проблемами". И в самом деле, если вы сбрасываете на компьютер материал с цифровой камеры, монтируете и выводите готовый фильм на DVD (VSD, SVCD), который потом просматриваете на телевизоре, подключенном к аппаратному DVD-плееру, то вероятнее всего вы не столкнетесь с описываемыми здесь проблемами. Однако если вы готовите фильм к показу на компьютере или занимаетесь оцифровкой аналогового сигнала, вы просто обязаны разбираться особенностях прогрессивной и чересстрочной развертки.
Первая проблема это тривиальная ошибка (которую вы никогда не сделаете, зная особенности чересстрочной развертки) – изменение размеров кадра без предварительного диентерлейса, что приводит к тому, что я назвал не настоящей чересстрочностью. На рисунке 1 показан результат подобного преобразования.
Interlace_05.gif 58,52К
360 Количество загрузок:
Рис 1. Не настоящая чересстрочность
Фрагмент 1 – исходный кадр, фрагмент 2 – получен изменением размеров исходного кадра, на нем так же видна "гребенка", но она уже ре раскладывается по полям, информация из разных полей была смешана при изменении размеров. Если такое видео теперь подать на телевизор "гребенка" будет заметна и на нем. Применение фильтра деинтерлейса (фрагмент 3) так же не даст хороших результатов по той же причине смешивания полей. При более быстром движении в кадре картинка будет еще страшнее. Для сравнения в четвертом фрагменте приведен пример правильной последовательности действий: деинтерлейс а затем изменение размеров.
Справедливости ради следует заметить, что существуют фильтры, выполняющие масштабирование не всего кадра целиком, а по полям, т.е. масштабируется каждое поле в отдельности. Так в VirtualDub фильтр Resize умеет делать масштабирование по полям, для чего нужно в настройках фильтра выбрать опцию «Interlaced». Так же, работая с чересстрочным видео, поступают и монтажные программы при манипуляциях приводящих к изменению размеров видео: картинка в картинке, различные 3D переходы и т.п. В других случаях необходимость изменения размеров чересстрочного видео вообще представляется мне весьма сомнительной т.к. при показе на телевизоре в системе PAL изображение должно быть разложено на 576 видимых строк, по 288 в каждом поле. В других случаях видео следует в начале преобразовать в прогрессивное, т.е. выполнить деинтерлейс.
Если вышеописанная проблема встречается достаточно редко, то следующая, судя по появлению вопросов на различных форумах, встречается достаточно часто. И имя ее - Строб – дерганое, прерывистое движение. Вообще строб может возникать из-за пропущенных при захвате кадров и из-за недостаточной производительности компьютера или конфликтов устройств и т.п. Но есть еще одна причина, сразу не заметная ни при монтаже, ни при просмотре на компьютере, но проявляющая себя во всей красе, когда мы, переполненные чувством гордости, устраиваем первый просмотр готового, записанного на DVD, фильма, усадив перед телевизором все семейство, а еще хуже – заказчика.
Итак, захват аналогового сигнала. Вспомним, что видео представляет собой последовательность полукадров – полей. На рисунке 2 представлено разложенное по полям видео катящегося колобка. В каждом кадре присутствуют два поля "Н" – нижнее и "В" – верхнее. На рисунке 2а можно видеть последовательный показ всех 12 полей.
Colob_f01.gif 7,53К
484 Количество загрузок:
Рис 2.
Colob_01.gif 14,88К 128 Количество загрузок:
Рис 2а.
Так вот, дело в том, что при захвате, показанный выше порядок полей может поменяться. Две причины могут повлиять на это: во первых – нет гарантии, что захват начнется с нижнего поля, может и с верхнего; а во вторых – одни карты располагают в памяти сначала нижнее поле, а потом верхнее, в то время как другие наоборот. И тогда, из оригинальной последовательности (Н1В1-Н2В2-Н3В3…) можем получить 4 варианта:
1. Н1В1-Н2В2-Н3В3… - без изменений
2. В1Н1-В2Н2-В3Н3…
3. В1Н2-В2Н3-В3Н4…
4. Н2В1-Н3В2-Н4В3…
А после, при просмотре, например 2-го варианта, увидим следующую картину (рис. 3, 3а).
Colob_f02.gif 7,53К
197 Количество загрузок:
Рис 3.
Colob_02.gif 14,88К 96 Количество загрузок:
Рис 3а.
Здорово? А вы заметили, что кадры по прежнему состоят из тех же полей, что и в оригинальном видео? Следовательно, при монтаже и просмотре на компьютере, где используется прогрессивная развертка, и кадр отображается целиком за один проход, никакой разницы мы не увидим. "Гребенка на месте, ну и ладно, все равно на телевизоре ее не будет!" Ее и в самом деле на телевизоре не будет, но все движение будет жутко "стробить" (рис. 3а).
Что делать? Для начала необходимо определить каков же порядок полей в исходном видео. Самый простой и надежный способ записать фрагмент на DVD-RW и прогнать на DVD-плеере, если строб есть – непорядок с полями. Если есть карта захвата аналогового сигнала, которые, как правило, умеют и выводить видео, раскладывая его по полям, тогда можно вывести на телевизор через нее (однако, надо точно знать, как работает с полями ваша карта). Я лично использую фильтр Deshaker для VirtualDub. Сам фильтр предназначен для стабилизации изображения, но он при работе раскладывает кадр на два поля и показывает вектора смещения блоков, направления векторов в разных полях должны совпадать, если вектора направлены в разные стороны, значит, выбрана не правильная очередность полей.
Вторым этапом следует решить: исправлять очередность полей или оставить как есть. В самом деле, многие монтажные программы позволяют явно указать очередность полей, да и DVD-плееру все равно – они умеют выводить как нижнее, так и верхнее поле первым. В самом деле, MPEG2 содержит два значения с информацией о полях: первое значение указывает реальную очередность полей, а второе – в каком порядке плееру их выводить. Т.е. мы можем управлять очередностью вывода полей. Я все же предпочитаю приводить все видео «правильному» виду – нижнее поле первое. Это позволяет в дальнейшем не беспокоиться, что в один проект попадут фрагменты видео с разным чередованием полей, а так же не ломать голову о том какие поля выставлять при подготовке видео к записи на DVD. Studio9 от Pinnacle вообще не позволяет указать очередность полей. И что же, если у вас в проекте используется видео в котором верхнее поле – первое, то при использовании переходов, Studio9 просчитает их, сделав первым нижнее поле. Т.о. строб вам обеспечен или на всем видео или на переходах.
Как изменить очередность полей? Я использую для этих целей все тот же VirtualDub и его встроенный фильтр – «field swap». Если же поля не просто поменяны местами (как в вариантах 1 и 2), а еще присутствует смещение полей (варианты 3 и 4), можно воспользоваться фильтром «QS Deinterlace». Этот фильтр позволяет, отключив выполнение деинтерлейса, воспользоваться его расширенными возможностями по работе с полями (менять поля до сдвига, сдвигать поля, менять поля после сдвига).
Пожалуй, это все что я хотел рассказать о проблемах чередования полей. Надеюсь, этот материал сбережет немного ваших нервных клеток и времени.
Сообщение отредактировано ALES74: 26 июн 2007 - 11:46