Використання векторів зсувів блоків

Найпростіший спосіб ураховувати подобу сусідніх кадрів - це віднімати кожний блок стисливого кадру з відповідного блоку попереднього. Однак більше гнучким є алгоритм пошуку векторів, на які зрушилися блоки поточного кадру стосовно попередній. Для кожного блоку в зображенні ми знаходимо блок близький по деякій метриці (наприклад, по сумі квадратів різниці пикселей) у попередньому кадрі в деякій околиці поточного положення блоку. Якщо мінімальна відстань по обраній метриці із блоками в попередньому кадрі більше обраного порога - блок стискується незалежно (мал. 15.2).

Рис. 15.2.

 

Таким чином, разом з кожним блоком у потік тепер зберігаються координати зсуву максимально схожого блоку в попередньому I-I- або P-кадрі, або ознака того, що дані стислі незалежно. Ці координати задають вектор зсуву блоку (motion vector). У ситуаціях, коли камера наїжджає на об'єкт або дає панораму, використання векторів зсувів блоків дозволяє значно зменшити амплітуду різниці кадрів, і як наслідок - значно підняти ступінь стиску.

Якщо ми проаналізуємо реальні фільми, то виявиться, що часто блок зрушується не на кратне число пикселов, а, наприклад, на 10.4 пиксела (камера швидко рухається вправо, план зйомки зрушується рівномірно й проходить повний кадр розміром 352х240 за 1.35 секунди). При цьому виявляється, що для підвищення ступеня стиску вигідно будувати 4 області пошуку векторів зсувів: вихідну, зрушену на полпиксела по горизонталі, зрушену на полпиксела по вертикалі й зрушену на полпиксела по горизонталі й по вертикалі (по діагоналі), які будуються за допомогою досить швидких алгоритмів билинейной або кусочно-лінійної апроксимації. Цей прийом також дозволяє зменшити різниця між блоками й підвищити ступінь стиску при мінімальній додатковій інформації, яку треба зберігати у файл (плюс 2 біти на кожний блок). Правда будувати аппроксимированные блоки прийде й при декомпресії, однак це порівняно дешева за часом операція, що досить незначно збільшує загальний час декомпресії.

Також треба розуміти, що алгоритм пошуку оптимальних векторів зсуву полягає, загалом кажучи, у переборі. Існують різні методи зменшення цього перебору, і настроювання відео-кодеков, що регулюють швидкість стиску нерідко варіюють саме параметри методу перебору.