Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
міні-шпори - v3.doc
Скачиваний:
6
Добавлен:
01.09.2019
Размер:
834.05 Кб
Скачать

2.2. Стиснення з втратою інформації

Надмірність усувається за рахунок часткової зміни змісту даних, причому можна регулювати рівень втрати інформації та, в свою чергу, рівень стиснення, оскільки змінюється і структура.  Але при цьому неможливо повністю відтворити вихідну інформацію. На щастя, інколи це і не потрібно, якщо говорити про передавання зображень та звука. Справа в тому, що наші органи не чутливі до невеликих спотворень інформації такого типу (локальні зміни зображення, високі гармоніки, тощо). Характерні приклади форматів з втратою інформації: .JPG – для графічних даних,  .MPG – для відео даних, .MP3 – для звука. Не рекомендується використовувати алгоритми з втратою інформації, якщо зображення треба друкувати з високою якістю або воно призначено для автоматичної обробки типу систем розпізнавання символів.

 

3. Алгоритми стиснення без втрати інформації

 

3.1. Алгоритм rle

 

Першій варіант алгоритму

Цей алгоритм надзвичайно просто реалізується. Групове кодування — від  англійського Run Length Encoding (RLE) — один із найбільш старих і найпростіших алгоритмів архівування даних. Наприклад, зображення при цьому представляється як послідовність байтів по рядкам растру. Стиснення в RLE відбувається за рахунок того, що у вихідній інформації зустрічаються ланцюжки однакових байтів. Заміна їх на пари < коефіцієнт повторення, значенню зменшує надлишковість даних.

В даному алгоритмі ознакою коефіцієнту (counter) є одиниці у двох верхніх бітах зчитаного байту:

Відповідно решта 6 бітів витрачаються саме на коефіцієнт, який може приймати значення від 1 до 64. Стрічку із 64 однакових байтів буде перетворено на два байти, тобто стиснуто у 32 рази.

Наприклад, стрічка АААББББВВВВВГГ буде записана як 3А4Б5В2Г. Для представлення послідовності треба 14 байтів, а для її коду – тільки 8. Але це дуже спрощена ілюстрація (треба враховувати максимальну довжину послідовності, кількість символів, все це потребує додаткової службової інформації. Приклад – код с розподілом рядка на частини).

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

Даний алгоритм застосовано у форматі PCX.

 

Другий варіант алгоритму

Другий варіант цього алгоритму має більший максимальний коефіцієнт стиснення та менше збільшує у розмірах вихідний файл.

Ознакою повтору в цьому алгоритмі є одиниця в старшому розряді поточного байту:

Як можна легко підрахувати, в кращому випадку цей алгоритм стискає файл в 64 рази (а не в 32 рази, як у попередньому варіанті), в гіршому - збільшує на 1/128. Середні показники приблизно однакові.

Даний варіант алгоритму застосовано у форматі TIFF.

Переваги RLE: не треба додаткової пам’яті, швидкість.

 

3.2. Коди Хафмана

 

Основні принципи:

 

-     попередній статистичний аналіз джерела інформації (документа), щоби визначити ймовірності окремих символів (повідомлень);

-     найбільш ймовірні символи представляють найбільш короткими  кодовими послідовностями, а найменш ймовірні – більш довгими;

-     ієрархічна структура кодових послідовностей додається до стиснутого документу або використовується певна модифікація з усередненою постійною структурою кодових послідовностей, що дає субоптимальний результат з точки зору стиснення (приклад – коди МККТТ, де використано постійну таблицю).

 

Розглянемо двійкове кодування для джерела з 5 можливими повідомленнями (наприклад, це текст, у якому певні літери зустрічаються з різною частотою):

 

Р1=0.4         Р2=0.35       Р3=0.10       Р4=0.10       Р5=0.05

Н=1.94        Нmax=log5=2.32              R= 0,16

 

Щоб побудувати код Хафмана, виписуємо елементи в порядку убування ймовірностей. Потім два найменш ймовірних елемента об’єднуємо в один і отримаємо додатковий набір 3 елементів, причому ймовірність одного з них дорівнює сумі ймовірностей двох. Аналогічно робимо с цим додатковим набором, поки не отримаємо один елемент з Р=1.

Далі будуємо граф, якій відображає ці операції:

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

 

1 –   1

2 –   00

3 –   011

4 –   0100

5 –   0101

 

При цьому середня кількість бітів на символ буде дорівнювати:

 

Н = 1 × 0.4 + 2 × 0.35 + 3 × 0.10 + 4 × 0.10  + 4 × 0.05 = 2 біта

 

Чому забезпечена однозначність декодування? Код є префіксним, тобто початок коду не може співпасти з більш коротким кодом (до кожного повідомлення на графі веде тільки один шлях). Ця властивість забезпечує зворотність кодування.

Найбільшу ефективність цей код демонструє для великих файлів, що зрозуміло, оскільки до закодованого файлу треба додавати таблицю кодування. В такому випадку ефективно діють модифіковані коди Хафмана, де кількість символів обмежена (наприклад, в кодах МККТТ для передачі факсів довжина відрізка до 512 ел. зобр., а більш довгі послідовності представляються як комбінація декількох відрізків максимальної довжини з відповідними кодами продовження та закінчення), але тоді не треба додавати таблицю. Код Хафмана є складовою складних форматів представлення зображень.

Стиснення даних (частина 2)