Як працює формат JPEG?

www.citforum.ru

Знання деяких принципів відшкодовує незнання багатьох фактів. Сьогодні ми поговоримо про технологію стиснення JPEG і про те, за рахунок чого досягаються такі сильні ступеня стиснення.

Процес стиснення за схемою JPEG складається з декількох кроків. На першому кроці проводиться перетворення зображення з колірного простору RGB у простір YUV, засноване на характеристиках яскравості і кольоровості. Вся подальша робота проводиться саме з цим колірним простором, який завдяки деяким своїм характеристикам дозволяє отримувати нам настільки великі ступеня стиснення.

Що ж такого незвичайного в YUV уявленні кольору в порівнянні з RGB? А те, що воно найближче до "природного", тому, яке неусвідомлено виконує людина. Y-компонента, або яскравість, тісно пов'язана з якістю картинки. Точніше сказати Y – це і є картинка, тільки чорно-біла. Компоненти U і V містять інформацію про колір і дозволяють нам розфарбовувати Y-картинку.

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

Людське око влаштований таким чином, що найбільш чутливий саме до складовій яскравості зображення (Y-компоненту) та найменш до колірним. Причина цього феномена лежить у фізіології. Ви, напевно, пам'ятайте, що зіницю складається з т.з. паличок і колбочок. Ну так от, палички – це сенсори, що сприймають саме яркостную складову, а колбочки – кольорову. Причому паличок на порядок більше, ніж колб, і вони набагато більш чутливі до світла. Згадайте приказку "Вночі всі кішки сірі". Чому так? Чому ввечері все втрачає колір? Саме через те, що кількості падаючого на зіницю світла не вистачає для того, щоб викликати реакцію колбочки. Але і чутливість людського ока до різних кольорів теж величина не постійна. Зіниця більш чутливий до нижньої частини колірного спектру, ніж до верхньої. Формат JPG якраз і враховує ці особливості.

Аналізуючи частотну інформацію про появу квітів, вдається позбутися від частини інформації вже в процесі квантування. При цьому кольору у верхній частині спектру виключаються, що практично не позначається на зоровому сприйнятті образу. Також виключається частина яркостной інформації. Грубо кажучи, JPG просто відкидає від складовій яскравості половину корисного сигналу, а від колірної 3 / 4. Це, звичайно, приблизно, тому що існують градації і більш складні схеми стиснення.

Кількість інформації, исключаемой при стисненні, залежить від необхідної якості зображення. При максимально-високих рівнях стиснення деталі повністю стираються, і блок стає сірим. При середніх і низьких рівнях стиснення у файлі зберігається _прімерная_ інформація про колір даної ділянки. Величина цієї "приблизно" напряму залежить від ступеня стиснення. І це потрібно зрозуміти, що на відміну від звичайних форматів, зберігають зображення поточечно, JPG зберігає зразкові кольору. Якщо говорити науковою мовою, то JPG використовує для збереження ряди Фур'є і при великих ступенях стиснення просто відкидає члени ряду вищого порядку. І кожен раз при відтворенні зображення на екрані комп'ютер виробляє синтез. Причому, досить ресурсномісткий і помітний на повільних комп'ютерах. З цього випливає одне зауваження – якщо Ви зберегли який-небудь малюнок в форматі JPG, то відновити його назад до останнього пікселя неможливо! Саме через це формат називається "форматом з втратами", і саме тому не рекомендується пересжімать JPG-зображення, тому що вони обов'язково стануть гіршими. А якщо це зробити 10 разів?

Інформація про яскравості і кольорі потім кодується так, що зберігаються тільки відмінності між сусідніми блоками. У результаті блоки представляються рядками чисел, які можна стискати далі. Оскільки в результаті обробки блоки містять багато нулів, остання стадія кодування (виконавча за алгоритмом Хаффмана – подібного до того, що застосовується в архіваторах) дає хороші результати. Звідси ще невелике зауваження – Стискати JPG-файл архіватором не має ніякого сенсу, адже він вже утисків. Отриманий архів напевно буде більше за розміром, ніж початкова фотографія.

Таким чином, початкові 24 біта на елемент зображення або 1536 біт (192 байти) на блок перетворюються на жменьку біт, які описують зорові характеристики всієї ділянки зображення.

Стаття з'явилася, як результат листування з Сергієм Єрьоміним з приводу оптимізації JPEG – за що йому велике спасибі.

Схожі статті:


Сподобалася стаття? Ви можете залишити відгук або підписатися на RSS , щоб автоматично отримувати інформацію про нові статтях.

Коментарів поки що немає.

Ваш отзыв

Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

*