Опис алгоритму компресії

Базові технології стиску відео

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

Для того щоб задовольнити суперечливим вимогам і збільшити гнучкість алгоритму, розглядається чотири типи кадрів:

- I-Кадри - кадри стислі незалежно від інших кадрів ( I-Intra pictures),

- P-Кадри - стислі з використанням посилання на одне зображення ( P-Predicted),

- B-Кадри - стислі з використанням посилання на два зображення ( B-Bidirection),

- DC-Кадри - незалежно стислі з великою втратою якості (використовуються тільки при швидкому пошуку).

I-Кадри забезпечують можливість довільного доступу до будь-якого кадру, будучи своєрідними вхідними крапками в потік даних для декодера.P-Кадри використовують при архівації посилання на один I-I- або P-кадр, підвищуючи тим самим ступінь стиску фільму в цілому.B-Кадри, використовуючи посилання на два кадри, що перебувають спереду й за, забезпечують найвищий ступінь стиску. Самі як посилання використовуватися не можуть. Послідовність кадрів у фільмі може бути, наприклад, такий: IBBPBBPBBPBBIBBPBB... Або, якщо ми не заощаджуємо на ступені стиску, такий (мал. 15.1):

 

Рис. 15.1. I-Кадри - незалежно стислі ( I-Intrapictures), P-Кадри - стислі з використанням посилання на одне зображення ( P-Predicted), B-Кадри - стислі з використанням посилання на два зображення ( B-Bidirection)

Частота I-Кадрів вибирається залежно від вимог на час довільного доступу й надійності потоку при передачі через канал з помилками. Співвідношення P-P- і B-кадрів підбирається, виходячи з вимог до величини компресії й обмежень декодера. Як правило, декодування B-Кадрів вимагає більше обчислювальних потужностей, однак дозволяє підвищити ступінь стиску. Саме варіювання частоти кадрів різних типів забезпечує алгоритму необхідну гнучкість і можливість розширення. Зрозуміло, що для того, щоб розпакувати B-Кадр, ми повинні вже розпакувати ті кадри, на які він посилається. Тому для послідовності IBBPBBPBBPBBIBBPBB кадри у фільмі будуть записані так: 0**312645..., де цифри - номера кадрів, а зірочкам відповідають або В-Кадри з номерами -1 і -2, якщо ми перебуваємо в середині потоку, або порожні кадри (нічого), якщо ми на початку фільму. Подібний формат має досить велику гнучкість і здатний задовольняти всіляким наборам вимог.

Одним з основних понять при стиску декількох зображень є поняття макроблоку. При стиску кадр із колірного простору RGB переводиться в колірний простір YUV. Кожна із площин стисливого зображення (Y, U, V) розділяється на блоки 8x8, з якими працює ДКП. Причому площини U і V, що відповідають компоненту кольоровості беруться з дозволом у два рази меншим (по вертикалі й горизонталі), чим вихідне зображення. Таким чином, ми відразу одержуємо стиск у два рази, користуючись тим, що око людини гірше розрізняє колір окремої крапки зображення, чим її яскравість (докладніше про ці перетворення дивитеся в описі алгоритму JPEG). Блоки 8x8 групуються в макроблоки. Макроблок - це група із чотирьох сусідніх блоків у площині яркостной компоненти Y (матриця пикселов 16x16 елементів) і два відповідних їм по розташуванню блоку із площин кольоровості U і V. Таким чином, кадр розбивається на незалежні одиниці, що несуть повну інформацію про частину зображення. При цьому розмір зображення повинен бути кратний 16.

Окремі макроблоки стискуються незалежно, тобто в B-Кадрах ми можемо стиснути макроблок конкретний як I-Блок, P-блок з посиланням на попередній кадр, P-Блок з посиланням на наступний кадр і, нарешті, як В-Блок.

Алгоритм стиску окремих кадрів в MPEG схожий на відповідний алгоритм для статичних зображень - JPEG. Якщо говорити коротко, то сам алгоритм стиску являє собою конвеєр перетворень. Це дискретне косинусное перетворення вихідної матриці 8x8, квантування матриці й витягування її у вектор v11,v12,v21,v31,v22,...,v88 (зигзаг-сканування), стиск вектора груповим кодуванням і, нарешті, стиск по алгоритму Хаффмана.

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

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

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

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

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

- ДКП

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

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

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

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

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