Движение блок с компенсацией кодировщик - как иметь дело с блок-шума в системе отсчета?
Я не разбираюсь в сжатии видео, но в настоящее время работаю над проектом, в котором я сжимаю остаточные изображения, используя H.264
Мой вопрос более общего характера относительно видео кодеров. Как я понимаю (как Википедия объясняет это), движение блок компенсированы кодер делит текущий кадр на несколько непересекающихся блоки, для каждого блока он проверяет в системе отсчета, когда текущий блок пришел, то он вычисляет разность требуемый блок и блок с компенсацией движения, то он как-то кодирует этот остаток.
Википедия заявляет: "Основной недостаток компенсации движения блоков состоит в том, что она вводит разрывы на границах блоков (артефакты блокировки). Эти артефакты появляются в виде острых горизонтальных и вертикальных краев, которые легко обнаруживаются человеческим глазом и вызывают эффект звонка (большие коэффициенты в высокочастотных подполосах) в преобразовании, связанном с Фурье, используемом для кодирования преобразования остаточных кадров."
Таким образом, поскольку опорный кадр уже содержит блочные артефакты (потому что он был закодирован), а затем эти блочные артефакты сдвигаются в текущий блок и вычисляется остаток, то высокие частоты, созданные блочными артефактами на границах сдвинутый блок также будет отображаться как разрывы в остатке. И разрывы, как правило, вредны для сжатия.
Работает ли блочный кодер с компенсацией движения каким-либо образом с этими блочными артефактами до сжатия остатка? Поскольку он точно знает, как смещен блок, он знает, где находятся границы блоков, и может что-то с ними сделать до или во время кодирования остатка, удаляя / игнорируя ненужные высокие частоты в этом месте. Если что-то подобное выполняется в кодеке, подобном H.264, может кто-нибудь объяснить основную концепцию того, как кодер делает это, дать некоторую терминологию и т. Д.? Как кодер работает с блочными артефактами в системе отсчета?
1 ответ
@Mat: Это хороший вопрос, и, скорее всего, это открытое пространство для исследований в области кодирования видео. Короткий ответ заключается в том, что, насколько мне известно, современные видеокодеры явно не делают ничего, чтобы справиться с влиянием блочных артефактов на оценку движения.
Возможно, что в случаях быстрого движения в областях с низкой детализацией, если имеются заметные артефакты блока, векторы движения могут иногда быть кратны размеру блока:) или, другими словами, оценка движения находит блоки в предыдущем кадре и не детали исходного изображения. Это, вероятно, довольно редко; для этого требуется как быстрое движение, довольно малообъемная область изображения и явно недостаточный битрейт. Вы можете, вероятно, создать синтетические видео последовательности, которые демонстрируют это. Неизвестно, может ли помочь знание границ блоков. если края блоков вводят высокочастотные компоненты в остатки следующего кадра, то нам приходится тратить биты, чтобы стереть / исправить эти искусственно введенные компоненты, независимо от того, знаем ли мы, что они произошли от блочного артефакта или нет... и даже тогда, расходы на биты, которые могут быть лучше, чем решение с использованием другого типа эталонной области / вектора движения / блока.
Однако современные кодеки, такие как H.264 и VP8, имеют внутриблочный фильтр деблокирования, иными словами, декодированный кадр деблокируется перед использованием в качестве эталона, что уменьшает блочный шум и, следовательно, вероятно, сводит к минимуму влияние проблемы, с которой вы столкнулись. правильно идентифицирован.