Особенности сжатия потока видеоданных
Измерение расхождения: Это наиболее чувствительная часть кодера. Здесь необходимо выбрать наиболее близкий блок к исходному блоку В. Эта процедура должна быть простой и быстрой, но, вместе с тем, надежной. Средняя абсолютная разность (или средняя абсолютная ошибка) вычисляет среднее значение модуля разностей между пикселами Bij блока В и пикселами Cij блока-кандидата С по формуле. Для этого потребуется выполнить Ъ2 операций вычитания, столько же операций взятия модуля числа и одной операции деления. Эта величина вычисляется для каждого из (2dx + 1)(2dy + 1) блоков- кандидатов для нахождения блока с наименьшим отклонением от блока В (обозначим его Ck). Если это отклонение меньше заданного порога, то блок Ck выбирается в качестве похожей пары для блока В. В противном случае такой пары нет, и блок В необходимо кодировать без компенсации движения.
В этом месте можно задать законный вопрос: «Как может случиться, что некоторый блок текущего кадра не имеет подходящей похожей пары на предыдущем кадре?» Для ответа представим себе, что снимающая видеокамера движется слева направо. Новые объекты попадают в поле зрения камеры справа. Поэтому самый правый блок кадра может содержать объекты, которых не было на предыдущем кадре. Другой мерой расхождения может служить «среднеквадратическое отклонение», в формуле которого вместо функции взятия модуля стоит возведение в квадрат разности пикселов:
Функция ранжирования разностей пикселов PDC (pixel difference classificatin) определяет, сколько разностей \B>ij — Cij| меньше, чем заданное число р. Мера интегральной проекции вычисляется с помощью нахождения суммы строки блока В, из которой вычитается сумма соответствующей строки С.
Модули результатов складываются для всех строк и к этому числу добавляется аналогичная величина, вычисленная для всех модулей разностей сумм столбцов. Методы подоптимального поиска: Такие методы делают поиск по части блоков среди всех (2dx + l)(2dy -I- 1) кандидатов. Это ускоряет поиск подходящего схожего блока, но платой служит эффективность сжатия. Корректировка вектора перемещения: Если блок С выбран в качестве самого похожего на блок J5, то для нахождения вектора перемещения следует найти разность между верхними левым углами блоков С и В. Независимо от выбора подходящего блока вектор перемещения может оказаться неверным из-за шума, локального минимума в кадре, или по причине недостатков самого алгоритма поиска. Тогда можно применить технику сглаживания вектора перемещения для достижения большей схожести блоков. Пространственная корреляция изображения предопределяет также корреляцию векторов перемещения. Если некоторый вектор нарушает это правило, то его следует подправить. Этот шаг тоже достаточно продолжителен и может даже все испортить. Перемещение большинства объектов в кадре может быть медленным, гладким, но некоторые малые объекты могут двигаться быстро, скачкообразно. Подправленные векторы перемещения могут вступать в противоречие с векторами перемещения таких объектов и быть причиной ошибочно сжатых кадров.
Кодирование векторов перемещения: Большая часть текущего кадра (возможно, половина его) может быть преобразована в
векторы перемещения, поэтому кодирование этих векторов весьма актуально. Это кодирование должно быть без потерь. Два свойства векторов перемещения позволяют осуществить эффективное кодирование: (1) эти векторы коррелированы и (2) они имеют неравномерное распределение. При сканировании кадров блок за блоком оказывается, что прилегающие блоки обычно имеют близкие векторы перемещения. Кроме того векторы также не имеют любые направления. Они, как правило, направлены в одну, реже, в две стороны; значит, векторы распределены неравномерно. Не существует единого общего метода кодирования, который был бы идеальным для всех случаев. Обычно применяется арифметическое кодирование, адаптивное кодирование Хаффмана, а также различные префиксные коды. Все они работают достаточно хорошо и с близкой эффективностью. Вот еще два возможных метода с хорошей степенью сжатия:
- Спрогнозировать вектор перемещения на основе его предшественников в той же строке и том же столбце текущего кадра. Вычислить разность между вектором-прогнозом и истинным вектором и закодировать его по Хаффману. Этот метод весьма важен. Он используется в MPEG-1 и в других алгоритмах сжатия. - Сгруппировать векторы перемещения в блоки. Если все векторы в блоке идентичны, то блок кодируется одним вектором. Все другие блоки кодируются как в пункте 1. Каждый кодированный блок начинается соответствующим идентификатором типа. Кодирование ошибки предсказания: Компенсация движения является сжатием с потерями, поскольку блок В обычно не совпадает с выбранным для него похожим блоком С. Сжатие можно улучшить, если кодировать разность между текущим несжатым кадром и его сжатым образом по блокам, причем делать это для достаточно сильно расходящихся блоков. Это часто делается с помощью кодирования преобразованных образов. Эта разность записывается в выходной файл после кода текущего кадра. Она будет использоваться декодером для улучшения отображения данного кадра.
- RSS
Наши услуги: