Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
КОНСПЕКТ ЛЕКЦІЙ з КГвТП.doc
Скачиваний:
1
Добавлен:
01.04.2025
Размер:
9.35 Mб
Скачать

Загальна схема алгоритму

У цілому весь конвеєр перетворень можна представити так:

  • Підготовка макроблоків. Для кожного макроблоку визначається, яким образом він буде стислий. В I-Кадрах всі макроблоки стискуються незалежно. В P-Кадрах блок або стискується незалежно, або являє собою різниця з одному з макроблоків у попередньому опорному кадрі, на якому посилається P-Кадр.

  • Переклад макроблоку в колірний простір YUV. Одержання потрібної кількості матриць 8х8.

  • Для P-Блоків і B-блоків виробляється обчислення різниці з відповідним макроблоком в опорному кадрі.

  • ДКП

  • Квантування.

  • Зигзаг-сканування.

  • Групове кодування.

  • Кодування Хаффмана.

При декодуванні весь конвеєр повторюється для зворотних перетворень, починаючи з кінця.

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

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

Рис. 15.2. 

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

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

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