Кодировщик с компенсацией движения блока - как бороться с блочным шумом в опорном кадре?

Я никоим образом не разбираюсь в сжатии видео, но в настоящее время работаю над проектом, в котором я сжимаю остаточные изображения с использованием H.264.

Мой вопрос носит более общий характер относительно видеокодеров. Насколько я понимаю (как объясняет Википедия), блочный энкодер с компенсацией движения делит текущий кадр на несколько непересекающихся блоков, для каждого блока проверяет в опорном кадре откуда взялся текущий блок, затем вычисляет разность нужный блок и блок с компенсацией движения, то он каким-то образом кодирует этот остаток.

В Википедии говорится: «Основным недостатком компенсации движения блока является то, что она вносит разрывы на границах блока (блокирующие артефакты). Эти артефакты проявляются в виде острых горизонтальных и вертикальных краев, которые легко заметить человеческим глазом и создают эффект звона ( большие коэффициенты в высокочастотных поддиапазонах) в связанном с преобразованием Фурье преобразовании, используемом для кодирования с преобразованием остаточных кадров».

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

Обрабатывает ли блочный кодировщик с компенсацией движения какие-либо артефакты блока перед сжатием остатка? поскольку он точно знает, как был сдвинут блок, он знает, где расположены границы блока и может что-то с ними сделать до или во время кодирования остатка, удаляя/игнорируя лишние высокие частоты в этом месте. Если что-то подобное выполняется в кодеке, таком как H.264, может ли кто-нибудь объяснить основную концепцию того, как это делает кодировщик, дать некоторую терминологию по этому поводу и так далее? Как кодер справляется с блочными артефактами в опорном кадре?


person Mat    schedule 16.05.2012    source источник


Ответы (1)


@Mat: Это хороший вопрос и, скорее всего, открытая область для исследований в области кодирования видео. Короткий ответ заключается в том, что, насколько мне известно, современные видеокодеры явно не делают ничего, чтобы справиться с влиянием блочных артефактов на оценку движения.

Возможно, что в случаях быстрого движения в областях с низкой детализацией, если есть заметные блочные артефакты, векторы движения иногда могут быть кратны размеру блока :) или, другими словами, оценка движения находит блоки в предыдущем кадре и не детали исходного изображения. Это, вероятно, довольно редко; для этого требуется и быстрое движение, и достаточно безликая область изображения, и явно недостаточный битрейт. Вероятно, вы можете построить синтетические видеоряды, демонстрирующие это. Неясно, может ли помочь знание границ блоков; если ребра блока вносят высокочастотные компоненты в остатки следующего кадра, то нам приходится тратить биты на стирание/исправление этих искусственно введенных компонентов, знаем ли мы, что они пришли из блочного артефакта или нет... и даже тогда , использование битов на это может быть лучшим решением, чем использование другой опорной области/вектора движения/типа блока.

Однако современные кодеки, такие как H.264 и VP8, имеют фильтр деблокировки в цикле, в других словами декодированный кадр деблокируется перед использованием в качестве эталона, что снижает блочный шум и, следовательно, сводит к минимуму влияние проблемы, которую вы правильно идентифицировали.

person Alex I    schedule 25.11.2012
comment
@Mat: это отвечает на твой вопрос? Если да, пожалуйста, не забудьте принять ответ. Если нет, пожалуйста, дайте мне знать, если у вас есть что-то конкретное, что я могу прояснить. - person Alex I; 02.12.2012