Головна Алгоритми та AI Стиснення DCT (Принцип JPEG)

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

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

Алгоритми та AI2DЛегкий60 FPS
dct-compression ↗ Відкрити окремо
DRAG · SCROLL · CLICK — керуйте прямо у вікні симуляції.

Як це працює

JPEG розбиває зображення на блоки 8×8 пікселів, зсуває значення відніманням 128, а потім застосовує двовимірне DCT-II. Отримані 64 коефіцієнти діляться на матрицю квантування (масштабовану коефіцієнтом якості) і округлюються до цілих чисел. Обернене DCT відновлює блок — із втратами. 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 for k>0 Quality → scale: s = (100−Q)/50 if Q<50 else 50/Q Quantized: Q[u][v] = round(X[u][v] / (step[u][v] · s))

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

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

Що таке дискретне косинусне перетворення (DCT)?

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

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

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

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

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

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

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

Чому DCT концентрує енергію краще, ніж DFT?

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

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

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

Що таке зигзагоподібне сканування в JPEG?

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

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

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

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

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

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

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

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

Ця симуляція виконує саме те ядро стиснення JPEG, що працює над одним блоком пікселів 8×8: двовимірне перетворення 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-складову — тому за низької якості цей коефіцієнт повністю квантується до нуля, і реконструкція перетворюється на суцільний сірий блок, на відміну від градієнта, який виживає, бо його енергія лежить у низьких, добре збережених частотах.

Схожі симуляції