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, т.е.
|