
- •Глава 1. Стиснення зображень
- •Глава 1
- •1.1. Основи
- •1.1.1. Кодова надмірність
- •1.1.2. Міжелементна надмірність
- •1.1.3. Візуальна надмірність
- •1.1.4. Критерії вірності відтворення
- •1.2. Моделі стиснення зображень
- •1.2.1. Кодер і декодер джерела
- •1.2.2. Кодер і декодер каналу
- •1.3. Елементи теорії інформації
- •1.3.1. Вимірювання інформації
- •1.3.2. Канал передачі інформації
- •1.3.3. Основні теореми кодування
- •1.3.4. Застосування теорії інформації
- •1.4. Стиснення без втрат
- •1.4.1. Нерівномірне кодування
- •1.4.2. Lzw кодування
- •1.4.3. Кодування бітових площин
- •1.4.4. Кодування без втрат з передбаченням
- •1.5. Стиснення з втратами
- •1.5.1. Кодовання з передбаченням
- •1.5.2. Трансформаційне кодування
- •1.5.3. Вейвлет-кодування
- •1.6. Стандарти стиснення зображень
- •1.6.1. Стандарти стиснення двійкових зображень
- •8.6.2. Стандарти стиснення півтонових нерухомих зображень
- •1.6.3. Телевізійні стандарти стиснення
1.4.2. Lzw кодування
Розглянувши основні методи скорочення кодової надмірності, перейдемо до розгляду одного з декількох методів стиснення без втрат, який також спрямований на скорочення міжелементних надлишковості зображення. Метод, званий методом кодування Лемпеля-Зіва-Уелша, відображає послідовність символів джерела різної довжини на рівномірний код, причому не вимагає апріорного знання ймовірностей появи кодуємих символів. Згадаймо з Розділу 1.3.3 твердженням першої теореми Шеннона про те, що n-кратне розширення джерела без памя’ті може бути кодоване з меншим середнім числом бітів на символ джерела, ніж сам нерозширення джерело. Незважаючи на той факт, що метод LZW -стиснення повинен бути ліцензований згідно патентом США № 4,558,302, він інтегрований в багато широко викорисвуємих файлових форматах зображень, включаючи GIF (graphic interchange format), TIFF (tagged image file format) а також PDF (portable document format).
Концептуально LZW-кодування є дуже простим. При запуску процесу кодування будується початок кодової книги або «словник», що містить лише кодовані символи джерела. Для 8-бітового монохромного зображення словник має розміри в 256 слів і відображає значення яркостей 0, 1,2, ..., 255. Кодер послідовно аналізує символи джерела (тобто значення пікселів), і при появі відсутньої в словнику серії, вона поміщається у визначувану алгоритмом (наступну вільну) місце словника. Якщо перші два пікселя зображення, наприклад, були білими (255-255), ця серія може бути приписана позиції 256, яка є наступною вільною після зарезервованих для рівнів яркостей позицій з 0 по 255. Наступного разу, коли зустрінеться серія з двох білих пікселів, для їх подання буде використовуватися кодове слово 256, як адресу позиції, що містить серію 255-255. У разі 9-бітового словника, що містить 512 кодових слів, вихідні 8+8 = 16 бітів, необхідні для подання двох пікселів, будуть замінені одним 9-бітовим кодовим словом. Ясно, що допустимі розмір словника є найважливішим параметром. Якщо він занадто малий, то виявлення співпадаючих серій яркостей буде малоймовірна; якщо занадто великий, то розмір кодового слова буде погіршувати характеристики стиснення.
Приклад 1.12. Приклад LZW-кодування.
Розглянемо наступне 8-бітове зображення розмірами 4 4, що має вертикальний контур:
39 39 126 126
39 39 126 126
39 39 126 126
39 39 126 126
У Таблиці 1.12 описуються кроки, використовувані при кодуванні його 16 пікселів. Підготовляється словник на 512 кодових слів:
У початковий момент позиції з 256 по 511 ще не використовуються.
При кодуванні пікселі зображення обробляються зліва направо і зверху вниз. Здійснюється катенація (приєднання) кожго наступного значення яскравості з наявною на даний момент серії, названої «розпізнана серія», яка наведена в позиції 1 Таблиці 1.7. Як можна побачити, спочатку ця змінна обнулена або порожня. Словник проглядається на виявлення збігу з кожною черговою серією, і якщо така виявляється, що і вімічено в першому рядку таблиці, то серія заміниться кодом (номером позиції) збігається і розпізнаної (тобто наявною в словнику) серії, що відзначено в першій колонці другого рядка. При цьому, ще не створює ніякого коду і не відбувається поновлення словника. Якщо ж співпадання серії і словника не виявляється (що зазначено у другому рядку таблиці), то номер позиції розпізнаної до теперішнього моменту серії (39) подається на вихід в якості чергового коду; ця нерозпізнана серія поповнює словник, а стан розпізнаної серії ініціюється останнім надійшовшим символом. Останні дві колонки таблиці описують коди і серії яркостей, які послідовно додаються до словника при кодуванні всього зображення розмірами 4 4 елемента. Додається дев'ять додаткових кодових слів. По завершенні кодування словник має 265 кодових слів; при цьому LZW алгоритм успішно виявив кілька повторюваних серій яркостей, що дозволило йому зменшити вихідне 128-бітове зображення до 90-бітового зображення (тобто до 10 кодів з 9 бітів). Кодова послідовність на виході створює при читанні третьої колонки (Вихід кодера) зверху вниз. Результуючий коефіцієнт стиснення дорівнює 1,42:1.
Таблиця 1.7. Приклад LZW-кодування.
Унікальним якістю тільки що продемонстрованого LZW кодування є те, що кодова книга (словник) створюється в процесі кодування даних. Примітно, що LZW-декодер будує ідентичний словник відновлення, якщо він декодує потік даних синхронно з кодером. Користувачеві пропонується в якості вправи (див. Завдання 1.16) декодувати вихід, отриманий в попередньому прикладі, і відновити кодову книгу. Хоча в даному прикладі це і не потрібно, тим не менше, більшість практичних додатків передбачають стратегію дій при переповнення словника. Простим рішенням є очищення, або ініціалізація, словника при його заповненні, і потім продовження кодування з чистим словником. Більш складним варіантом може бути стеження за характеристиками стиснення та очищення словника, якщо він стає недоступний або робота сповільнюється. В якості альтернативи можна простежувати і тимчасово видаляти найменш часто використовуємі входи словника, і відновлювати їх, якщо буде потрібно.