Я не впевнений, чи хтось ще пояснив, чому магічне число здається рівним 1: 2, а не, наприклад, 1: 1,1 або 1:20.
Однією з причин є те, що у багатьох типових випадках майже половина оцифрованих даних є шумом , а шум (за визначенням) не може бути стиснутим.
Я зробив дуже простий експеримент:
Я взяв сіру карту . Для людського ока це виглядає як звичайний нейтральний шматок сірого картону. Зокрема, інформації немає .
І тоді я взяв звичайний сканер - саме такий пристрій, який люди можуть використовувати для оцифрування своїх фотографій.
Я просканував сіру карту. (Насправді я просканував сіру карту разом з листівкою. Листівка була там для перевірки правильності, щоб я міг переконатися, що програмне забезпечення сканера не робить нічого дивного, наприклад, автоматично додавати контраст, коли він бачить безхарактерну сіру карту.)
Я обрізав частину сірої картки розміром 1000x1000 пікселів і перетворив її на масштаб сірого (8 біт на піксель).
Зараз у нас має бути досить хороший приклад того, що відбувається, коли ви вивчаєте безхарактерну частину відсканованої чорно-білої фотографії , наприклад, чисте небо. В принципі, нічого точно дивитись не повинно.
Однак при більшому збільшенні це насправді виглядає так:
Немає чітко видимого малюнка, але він не має рівномірного сірого кольору. Частина його, найімовірніше, викликана недосконалістю сірої картки, але я б припустив, що більшість це просто шум, що видається сканером (тепловий шум у датчику комірки, підсилювач, перетворювач A / D тощо). Схоже на гауссовий шум; ось гістограма (в логарифмічному масштабі):
Тепер, якщо припустити, що кожен піксель має свій відтінок в цьому розподілі, скільки ентропії ми маємо? Мій сценарій Python сказав мені, що у нас є 3,3 біта ентропії на піксель . І це багато шуму.
Якби це було дійсно так, то це означало б, що незалежно від того, яким алгоритмом стиснення ми користуємося, растровий малюнок 1000x1000 пікселів був би стислий, в кращому випадку, у файл 412500-байт. І що відбувається на практиці: я отримав файл PNG 432018-байт, досить близько.
Якщо ми трохи узагальнимо, здається, що незалежно від того, які чорно-білі фотографії я сканую за допомогою цього сканера, я отримаю суму наступного:
- "корисна" інформація (якщо така є),
- шум, прибл. 3 біта на піксель.
Тепер навіть якщо ваш алгоритм стиснення видавить корисну інформацію в << 1 біт на піксель, у вас все одно залишиться стільки, скільки 3 біти на піксель нестислимого шуму. А нестиснена версія - 8 біт на піксель. Таким чином, коефіцієнт стиснення буде в бальній площі 1: 2, незалежно від того, що ви робите.
Ще один приклад із спробою пошуку наддеалізованих умов:
- Сучасна камера DSLR, що використовує налаштування найнижчої чутливості (найменший шум).
- Позафокусований знімок сірої картки (навіть якщо в сірій картці була якась видима інформація, вона буде розмитою).
- Перетворення файлу RAW у 8-бітове зображення сірого масштабу, без додавання контрасту. Я використовував типові налаштування в комерційному перетворювачі RAW. Перетворювач намагається зменшити шум за замовчуванням. Більше того, ми зберігаємо кінцевий результат як 8-бітний файл - ми, по суті, викидаємо біти найнижчого порядку з неочищених показань датчика!
І який був кінцевий результат? Це виглядає набагато краще, ніж те, що я отримав від сканера; шум менш виражений, і точно нічого не видно. Тим не менш, шум Гауса є там:
А ентропія? 2,7 біт на піксель . Розмір файлу на практиці? 344923 байт для 1М пікселів. У справді найкращому випадку, з деяким обманом, ми піднесли коефіцієнт стиснення до 1: 3.
Звичайно, все це не має нічого спільного з дослідженнями TCS, але я вважаю, що добре пам’ятати, що насправді обмежує стиснення оцифрованих реальних даних. Успіхи в розробці динамічніших алгоритмів стиснення та сильної потужності процесора не допоможуть; якщо ви хочете зберегти весь шум без втрат, ви не можете зробити набагато краще, ніж 1: 2.