6.4.5.2. Векторы движения
Каждая часть
деления макроблока или подмакроблока в моде inter прогнозируется по
области того же размера на ссылочном снимке. Вектор смещения между двумя
областями (вектор движения) имеет разрешение в четверть пиксела для компоненты
яркости и одну восьмую пиксела для компонент хроматичности. Сэмплы яркости и
хроматичности не определены явно на ссылочном снимке с под- пиксельной
точностью, поэтому их необходимо вычислить с помощью интерполяции соседних сэмплов.
На рис. 6.13 блок размером 4x4
текущего кадра (а) прогнозируется по области ссылочного снимка, имеющей близкую
позицию к положению текущего блока. Если горизонтальные и вертикальные
компоненты вектора движения являются целыми числами (б), то соответствующий
прогнозный блок сэмплов существует в явном виде на ссылочном снимке (серые
кружки). Если один или оба компонента вектора движения являются дробными
числами (в), то блок-прогноз (серые кружки) генерируется с помощью
интерполяции по соседним сэмплам на ссылочном снимке (белые кружки).
Генерирование
интерполированных сэмплов. Сначала вычисляются
сэмплы компонент яркости, расположенные посередине между сэмплами с
целочисленными координатами (полусэмплы) на ссылочном снимке (рис. 6.14 серые
метки). Каждый полусэмпл, примыкающий к двумя целыми сэмплами (например, b,
h, m,
s на
рис. 6.14), интерполируется но целым сэмплам с помощью конечного фильтра
импульсного отклика, имеющего 6 отсчетов с весами (1/32,
-5/52,
5/8,
-5/32,
1/32).
Например, полусэмпл b
вычисляется
по шести горизонтальным целым сэмплам Е, F,
G, Н, I и J:
b = round((E
-
5F
+
20G
+
20Н - 5I + J)/32).
Аналогично
полусэмпл h интерполируется
(фильтрованием сэмплов А, С, G, М, R и Т. После того
как вычислены все примыкающие полусэмплы по горизонтали и вертикали, оставшиеся
полусэмплы вычисляются интерполяцией по шесть горизонтальным или вертикальным
полусэмплам, которые были найдены в начале процедуры. Например, j получается
фильтрованием сс, dd, h, m, ее и ff (заметим, что
фильтрация по вертикали даст тот же результат и, кроме того, при вычислении j используются
точные значения h и m). Интерполяционный
фильтр с шестью отсчетами является относительно сложным, но его результат
аккуратно вписывается в данные целочисленных сэмплов и, следовательно, дает
хорошую компенсацию движения.
Рис. 6.14. Интерполяция компонент яркости по
полусэмплам.
После вычисления
полусэмплов подсэмплы с шагом в четверть пиксела определяется с помощью
линейной интерполяции (см. рис. 6.15). Четвертьсэмплы, имеющие два прилегающих,
горизонтальные или вертикальные целые сэмплы или полусэмплы (например, а, с, i, k и d, f, n, q на рис. 6.15)
получаются интерполяцией этих прилегающих сэмплов, например:
а
= round((G + b)/2).
Остальные позиции
четвертьсэмплов (е, g, р и r на этом рисунке) генерируются линейной
интерполяцией пары полусэмплов по диагонали. Например, е получается из b и h. На рис. 6.16
показан результат интерполяции ссылочной области, приведенной на рис. 3.16, с
четвертьпиксельной точностью.
Рис. 6.15. Интерполяция компонент яркости по
четвертьсэмплам.
Рис. 6.16. Интерполяция компонент яркости по
четвертьсэмплам.
Векторам
движения с четвертьпиксельным разрешением компонент яркости требуются векторы
движения компонент хроматичности с шагов с 1/8 пиксела (при сэмплировании в
формате 4:2:0). Интерполированные хроматические сэмплы получаются линейной
интерполяцией (рис. 6.17). Каждый хроматический подсэмпл а равен линейной
комбинации Слизких целых сэмплов А, В, С и D:
Рис. 6.17. Интерполяция сэмплов хроматичности по 1/8
сэмпла.
На рис. 6.17
коэффициент равен 2, a — 3, т.е.