🖼️ Стиснення DCT (Принцип JPEG)

Дискретне косинусне перетворення стискає блок 8×8 пікселів, як JPEG. DCT-II: X_k = 2·Σx_n·cos(π(2n+1)k/2N). Квантування коефіцієнтів. Відношення стиснення проти якості.

АлгоритмиІнтерактивний
Оригінал · Коефіцієнти ДКП · Реконструкція · Різниця · Переключіть для перегляду коефіцієнтів

Як це працює

JPEG ділить зображення на блоки 8×8 пікселів, зміщує значення (−128), потім застосовує 2D DCT-II. Отримані 64 коефіцієнти ділять на матрицю квантування (масштабовану коефіцієнтом якості) і округляють до цілих. Обернений ДКП відновлює блок — з наближенням з втратами. DC-коефіцієнт відповідає середньому значенню блоку; AC-коефіцієнти кодують просторовий частотний вміст.

DCT-II: X[u][v] = (2/N) c(u)c(v) ΣΣ f[x][y] cos(π(2x+1)u/2N) cos(π(2y+1)v/2N) c(0) = 1/√2, c(k) = 1 для k>0 Якість → масштаб: s = (100−Q)/50 якщо Q<50 інакше 50/Q Квант.: Q[u][v] = round(X[u][v] / (step[u][v] · s))

Стандартна матриця квантування яскравості JPEG призначає малі кроки для низьких частот (лівий верхній кут) і великі для високих (правий нижній). При низькій якості більшість AC-коефіцієнтів обнуляється, що дає блокові артефакти, але малий розмір файлу.

Часті запитання

Що таке Дискретне Косинусне Перетворення (ДКП)?

ДКП виражає послідовність значень через косинусні базисні функції різних частот. DCT-II використовується в JPEG: X_k = 2·Σ x_n·cos(π(2n+1)k/2N) для k=0…N-1.

Чому JPEG використовує блоки 8×8?

Блоки 8×8 балансують обчислювальні витрати і кореляцію: сусідні пікселі сильно корельовані, тому 64-коефіцієнтне ДКП ефективно концентрує енергію в низькочастотних компонентах.

Що таке квантування в JPEG?

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

Що таке артефакти стиснення JPEG?

Блокові артефакти виникають на межах блоків, бо суміжні блоки 8×8 стискаються незалежно. Артефакти звивання (явище Гіббса) з'являються біля різких країв при відкиданні високочастотних коефіцієнтів.

Чому ДКП концентрує енергію краще за ДПФ?

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

Що таке DC-коефіцієнт?

DC-коефіцієнт (k=0) пропорційний середньому значенню пікселів блоку. Це найбільший коефіцієнт, який зазвичай кодується різницевою ІКМ (DPCM) від DC попереднього блоку.

Що таке зигзаг-сканування в JPEG?

Після квантування матриця коефіцієнтів 8×8 зчитується по зигзагу від низьких до високих частот. Це групує ненульові низькочастотні коефіцієнти на початку і дає довгі серії нулів для ентропійного кодування.

Як субдискретизація кольоровості покращує стиснення JPEG?

Зір людини чутливіший до яскравості (Y), ніж до кольоровості (Cb, Cr). JPEG перетворює RGB у YCbCr і підвибирає Cb/Cr (наприклад, 4:2:0 вдвічі зменшує обидва виміри), скорочуючи дані до застосування ДКП.

Яка різниця між JPEG і JPEG 2000?

JPEG використовує блочне ДКП 8×8; JPEG 2000 — вейвлет-перетворення (ДВП) по всьому зображенню. JPEG 2000 уникає блокових артефактів, підтримує режим без втрат і краще якість при великих коефіцієнтах стиснення.

Який коефіцієнт якості використовувати для веб-зображень?

Якість 75–85 є стандартом для веб, забезпечуючи баланс між розміром файлу і візуальною якістю. Якість нижче 60 спричиняє помітні блокові артефакти. Для мініатюр прийнятна якість 50–65.

Про цю симуляцію

Ця симуляція виконує саме ядро JPEG-стиснення на одному блоці 8×8 пікселів: 2D DCT-II перетворення, ділення на стандартну матрицю квантування яскравості JPEG, масштабовану обраним коефіцієнтом якості, і зворотне DCT для відновлення втратного результату. Перемикання типів патерну показує, як градієнти, краї, шахові дошки та випадковий шум стискаються геть по-різному за того самого налаштування якості.

🔬 Що показано

Чотири панелі 8×8 поруч — Оригінал, DCT-коефіцієнти (логарифмічна шкала), Відновлено та Помилка×5 — або, після перемикання вигляду, червоно-синя теплова карта самих квантованих коефіцієнтів із їхніми цілими значеннями, надрукованими на кожній клітинці.

🎮 Як користуватись

Оберіть патерн блоку у випадному списку, перетягуйте повзунок Коефіцієнта якості від 1 до 100, щоб побачити компроміс між коефіцієнтом стиснення й PSNR у реальному часі, налаштуйте масштаб для ближчого перегляду, і натисніть "Перемкнути вигляд" (або клавішу I), щоб оглянути сітку квантованих коефіцієнтів напряму.

💡 Чи знали ви?

Патерн "Випадковий шум" — найгірший випадок для всієї цієї схеми: оскільки DCT добре концентрує енергію лише коли сусідні пікселі корельовані, шум розсіює приблизно однакову енергію по всіх 64 коефіцієнтах, тож навіть за високої якості коефіцієнт стиснення майже не покращується — на відміну від патерну "Градієнт", де майже весь блок стискається в єдиний DC-коефіцієнт.

Часті запитання

Чому патерн "Різкий край" дає помітні артефакти "Помилка×5", яких немає у "Градієнт"?

Різкий край усередині блоку має енергію, розподілену по багатьох високочастотних DCT-коефіцієнтах, а саме ці коефіцієнти матриця квантування ділить на найбільші кроки — щойно вони квантуються до нуля, зворотне DCT не може відновити різкий перехід, породжуючи ефект дзвону (Гіббса), видимий на панелі помилки.

Чому зниження повзунка якості так сильно підвищує стиснення "Ненульових коеф."?

Коефіцієнт масштабу квантування різко зростає нижче якості 50 (scale = 5000/Q), множачи кожен елемент матриці квантування JPEG і змушуючи дедалі більше малих AC-коефіцієнтів округлюватись рівно до нуля — статистика "Ненульові коеф." і "Стиснення" оновлюється наживо, показуючи все менше вцілілих коефіцієнтів за низької якості.

Що насправді вимірює число PSNR тут?

PSNR (пікове співвідношення сигнал/шум) обчислюється напряму із середньоквадратичної похибки між оригінальним і відновленим блоком 8×8 за формулою 10·log10(255²/MSE) — вищий PSNR означає точніше відновлення, і ви можете спостерігати, як він прямує до нескінченності при підвищенні якості й зменшенні MSE до нуля.

Чому лише кілька клітинок теплової карти коефіцієнтів мають великі числа?

Для структурованих патернів 2D DCT концентрує більшість енергії блоку в низькочастотних коефіцієнтах біля верхнього лівого кута (u=0, v=0 — це DC-член), і саме тому матриця квантування JPEG призначає цим клітинкам малі кроки — великі вцілілі числа, які ви бачите, майже завжди скупчені саме там.

Чому патерн "Шахова дошка" поводиться так інакше, ніж "Градієнт" за тієї самої якості?

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