Оценка / компенсация движения MPEG1 - PullRequest
5 голосов
/ 21 января 2012

Я видел следующее объяснение для оценки / компенсации движения для MPEG 1, и мне просто интересно, правильно ли это:

Почему бы нам просто не кодировать необработанную разницу между текущим блоком и эталонным блоком? Потому что числа для остатка обычно будут намного меньше.Например, скажем, объект ускоряется по всему изображению.Положение х в 11 кадрах было следующими числами.12 16 20 25 31 38 48 59 72 84 96 Необработанные различия будут x 4 4 5 6 7 10 11 13 12 12 Таким образом, прогнозируемые значения будут xx 20 24 30 37 45 58 70 85 96 Таким образом, остатки будут xx 0 11 1 3 1 2 -1 0

Является ли прогноз для кадра [i + 1] = (кадр [i] - кадр [i-1]) + кадр [i] , т. Е.добавить вектор движения двух предыдущих систем отсчета в самый последний?Затем мы кодируем остаток прогнозирования, который является фактическим захваченным кадром кадра [i + 1] - кадр прогнозирования [i + 1] , и отправляем его в декодер?

1 Ответ

2 голосов
/ 17 февраля 2012

Декодирование MPEG1 (компенсация движения) работает следующим образом:

Прогнозы и векторы движения превращают систему отсчета в следующий (текущий) кадр. Вот как вы можете рассчитать каждый пиксель нового кадра:

Для каждого макроблока у вас есть набор прогнозируемых значений (отличий от системы отсчета). Вектор движения является значением относительно системы отсчета.

// Each luma and chroma block are 8x8 pixels
    for(y=0; y<8; y++)
    {
       for (x=0; x<8; x++)
       {
          NewPixel(x,y) = Prediction(x,y) + RefPixel(x+motion_vector_x, y+motion_vector_y)
       }
    }

С MPEG1 у вас есть I, P и B. кадры. I-кадры полностью интракодированы (например, аналогичны JPEG), без ссылок на другие кадры. P-кадры кодируются с предсказаниями из предыдущего кадра (I или P). B-кадры кодируются с предсказаниями в обоих направлениях (предыдущий и следующий кадр). Обработка B-кадров делает видеопроигрыватель немного более сложным, поскольку он может ссылаться на следующий кадр, поэтому каждый кадр имеет порядковый номер, а B-кадры приводят к тому, что последовательность становится нелинейной. Другими словами, ваш видео декодер должен удерживать потенциально 3 кадра при декодировании потока (предыдущий, текущий и следующий).

...