3.6.1. Пример работы кодекаВидеопоследовательность с частотой кадров 25 Гц в формате CIF (352 х 288 сэмплов яркости и 176 х 144 красных и голубых хроматических сэмплов на кадр) кодируется и декодируется кодеком DPCM/DCT. На рис. 3.52 показан видеокадр формата CIF (), который необходимо закодировать, а на рис. 3.53 приведен предыдущий реконструированный видеокадр (). Заметим, что кадр был закодирован, потом декодирован, и при этом обнаружилось определенное расхождение с оригиналом. Разность между кадрами и без компенсации движения (см. рис. 3.54), очевидно, имеет большую остаточную энергию, особенно по границам движущихся объектов. Оценка компенсации движения выполняется для блоков яркости 16 х 16 с полупиксельной точностью. При этом получается множество векторов, изображенное на рис. 3.55, которое для ясности наложено на текущий кадр. Многие векторы равны нулю (это показано белыми точками). Это означает, что максимально близкие к ним макроблоки расположены в тех же местах ссылочного кадра. Около перемещающихся объектов векторы имеют направления, указывающие, откуда переместился данный макроблок (например, мужчина в кадре слева перемещается влево, и векторы, соответственно, указывают вправо, т.е. туда, откуда пришли данные блоки). Некоторые из этих векторов не отражают «настоящее» движение (например, на поверхности стола), но они означают, что где-то на ссылочном кадре есть более похожие макроблоки, имеющие другие координаты). Такие «шумовые» векторы часто появляются на однородных областях изображений, где нет объектов с ярко выраженными чертами на ссылочном кадре. Ссылочный кадр с компенсацией движения (рис. 3.56) представляет собой исходный ссылочный кадр, на котором были сделаны «перестановки» некоторых макроблоков в соответствии с векторами движения. Например, заметим, что идущий влево мужчина (второй слева) был немного сдвинут влево для получения лучшего совпадения с его макроблоками на текущем кадре, а рука сидящего слева мужчины была приподнята вверх для лучшего приближения соответствующих макроблоков. Вычитая ссылочный кадр с компенсацией движения из текущего кадра, получаем разность с компенсацией движения на рис. 3.57, энергия которого, очевидно, сильно понижена, особенно в районах перемещающихся объектов. Рис. 3.52. Исходный кадр . Рис. 3.53. Реконструированный ссылочный кадр . Рис. 3.54. Разность кадров (без компенсации). Рис. 3.55. Векторы движения 16 х 16 (наложенные на кадр). Рис. 3.56. Ссылочный кадр с компенсацией движения Рис. 3.57. Остаточный кадр с компенсацией движения. На рис. 3.58 показан макроблок исходного кадра (расположенный в районе головы мужчины справа), а на рис. 3.59 — остаточный блок яркости после компенсации движения. Применяя двухмерное DCT к верхнему правому блоку 8x8 (табл. 3.9) этого макроблока, получаем коэффициенты DCT, приведенные в табл. 3.10. Величина каждого коэффициента показана в виде графика на рис. 3.60. Заметим, что большие коэффициенты группируются в верхнем левом углу вокруг коэффициента DC. Рис. 3.58. Исходный макроблок (яркость). Таблица 3.9. Остаточные сэмплы яркости (верхний правый блок 8x8)
Таблица 3.10. Коэффициенты DCT.
Таблица 3.11. Квантованные коэффициенты DCT
Рис. 3.59. Остаточный макроблок (яркость). Далее применяется простейший квантователь: где — размер шага квантования, в этом примере равный 12. Малые коэффициенты квантуются до нуля (табл. 3.11), а ненулевые коэффициенты образуют кластер около верхнего левого коэффициента DC. Квантованный блок переупорядочивается сканированием по зигзагу (начиная из верхнего левого угла), и получается массив чисел: -1,2,1,-1,-1,2,0,-1,1,-1,2,-1,-1,0,0,-1,0,0,0,-1,-1, 0,0,0,0,0,1,0,... Из этого массива образуется следующая последовательность пар («серия», «значение»): (0, -1)(0,2)(0,1)(0, -1)(0, -1)(0,2)(1, -1)(0,1)(0, -1)(0,2)(0, -1) (0, -1)(2-1)(3, -1)(0,-1)(5,1)(ЕОВ) Маркер ЕОВ (End Of Block) означает, что оставшиеся коэффициенты равны нулю. Каждая пара («серия», «значение») кодируется кодом VLC. При использовании таблицы TCOEF стандарта MPEG-4 Visual (табл. 3.6) получаются коды переменной длины, приведенные в табл. 3.12. Таблица 3.12. Коды переменной длины данного примера
Рис. 3.60. Величины коэффициентов DCT. В последнем коде VLC «конец» = 1, что указывает на конец блока. Вектор движения для этого макроблока равен (0,1), т.е. вектор смотрит вниз. Предсказанный вектор (основанный на соседнем макроблоке) равен (0,0), поэтому координаты разности векторов движения , . Используя кодовую табл. 3.7 для MPEG-4 Visual, кодируем эти величины кодами (1) и (0010) соответственно. Макроблок передается в виде последовательности кодов VLC, включая заголовок макроблока, разность векторов движения ( и ) и коэффициенты преобразования (TCOEF) для каждого блока 8x8. На приемном конце производится декодирование принятой последовательности VLC. При этом сначала извлекаются параметры заголовка, потом числа и и пары («серия», «значение») для каждого блока. Затем воспроизводится массив из 64 элементов, т.е. вставляется соответствующее число нулей («серий») перед каждым ненулевым значением, и строится блок 8x8 (см. табл. 3.11). Далее производится деквантование коэффициентов по формуле: (здесь, как и раньше, ), и получается блок коэффициентов, показанный в табл. 3.13. Отметим, что эти коэффициенты существенным образом отличаются от исходных DCT коэффициентов (табл. 3.10) из-за процедуры квантования. Теперь применяется обратное DCT (IDCT) для получения декодированного остаточного блока (табл. 3.14), который подобен, но неидентичен исходному остаточному блоку (табл. 3.9). Графики исходного и декодированного остаточных блоков построены рядом друг с другом на рис. 3.61. Видно, что декодированный блок имеет меньше высокочастотных компонент в силу потери высокочастотных коэффициентов DCT в процессе квантования. Таблица 3.13. Деквантованные коэффициенты DCT.
Таблица 3.14. Декодированные остаточные сэмплы яркости.
Рис. 3.61. Сравнение исходного и декодированного остаточных блоков. Рис. 3.62. Декодированный кадр Декодер формирует свое собственное предсказание вектора движения по ранее декодированным векторам и восстанавливает исходный вектор движения (0, 1). С помощью этого вектора и декодированного ранее кадра декодер реконструирует макроблок. Полностью продекодированный кадр показан на рис. 3.62. Процесс квантования внес определенные искажения в этот кадр по сравнению с исходным (рис. 3.52). Например, вокруг мелких деталей изображения (лица людей, формулы на доске и т.п.) отчетливо видны края вдоль границ и стыков блоков 8x8. Исходная картинка была сжата примерно в 300 раз (т.е. закодированная сжатая видеопоследовательность занимает 1/300 часть несжатого видео), причем столь замечательный результат компрессии достигнут ценой относительно небольшого снижения качества изображения.
|