Як створювати JPEG, як можна мінімізувати виникнення артефактів?


10

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

Приклад:

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

Це правильно робити? Тобто, якщо стиснення без втрат генерує досить детальне зображення, артефакти, отримані внаслідок згладжування, будуть помітнішими, тому баланс може бути знайдений за допомогою правильного стиснення, хоча і погіршує якість зображення.

Редагувати

Щойно я зберег цей JPEG у mspaint (3,46 КБ):

Без втрат

Ось той самий JPEG з максимальною компресією (найнижча якість, 0,5 КБ):

Втрачений

Ось той самий JPEG з 50% стисненням (зауважте, різниця у розмірі, 1,29 КБ):

Безрезультатні варіанти

Це ж 50% -не стиснення, але збережене як "прогресивне JPG", зберігало оригінальні дані EXIF ​​та XMP та "намагалося зберегти з оригінальною якістю JPG" (ви можете помітити, що навколо них немає сірих пікселів, 2,96 КБ):

Напів варіантів

І нарешті те саме, що і раніше, відключена підсистема кольоровості (той же розмір файлу, 2,96 КБ):

Напівкольоровий колір


1
Цікаво, що це за причина того, що ви бажаєте jpg, чи менший розмір файлу? Якщо це допомагає вашій конкретній ситуації, чи знаєте ви про стиснення dxt або текстури поля на відстані?
Алан Вулф

1
Мені незрозуміло, у чому ваше питання. Хочете знати, чи добре компресувати за допомогою JPEG? Ви хочете знати, які види зображень добре стискають JPEG? Або ви вже використовуєте JPEG і хочете дізнатися, як авторувати свої зображення, щоб мінімізувати артефакти, спричинені JPEG?
Мокоша

@AlanWolfe Я не раз стикався з тим, що мені вдалося використовувати лише JPEG (в основному в веб-додатках), і саме тому мені це потрібно, щоб він був у JPEG. Спасибі, але я не був знайомий з DXT стиснення , ні відстані польових текстур, від того, що я бачив в вікіпедії , DXT алгоритми відрізняються від тих , які використовуються в JPEG, ви маєте в виду , вони можуть бути використані для створення JPEGs?
Armfoot

@Moshoka спасибі, це більше пов'язане з вашим останнім запитанням: як мінімізувати "візуальний вплив", який приносять артефакти у зображеннях JPEG?
Armfoot

майте на увазі, що mozjpegкомпресор має спеціальну хитрість, щоб зменшити спотворення таких зображень. (і це взагалі ефективніше, ніж звичайні письменники jpeg.) Ви спробували це?
Відображати ім'я

Відповіді:


9

Стиснення JPEG включає три основні етапи:

  1. Підсистема кольоровості . Зображення перетворюється з RGB в кольоровий простір YCbCr, в якому лума або яскравість (Y) зберігаються окремо від кольорових або кольорових компонентів, Cb і Cr. Компонент Y підтримується з повною роздільною здатністю, але Cb і Cr є вибірками, як правило, до половини роздільної здатності на кожній осі. Це використовує той факт, що зорова система людини чутливіша до тонких деталей яскравості, ніж до кольору.

  2. Квантування частоти. Образи Y, Cb і Cr перетворюються на частотне представлення, розбиваючи їх на 8x8 блоків і застосовуючи дискретні косинусні перетворення (варіант перетворення Фур'є) до кожного блоку. Результат - матриця чисел, що описують амплітуди різних просторових частот у блоці. Ці цифри потім можуть бути квантовані (округлені до обраної кількості біт точності). Різні рівні квантування використовуються для різних частот, використовуючи відносно нижчу чутливість нашої зорової системи до високих частот. Ось тут вступають у дію налаштування якості кодера JPEG: нижчі якості використовують більш грубе квантування.

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

Етапи 1 і 2 - це втрати, і кожен створює свій тип артефактів (хоча є певне перекриття). Підсистема кольоровості має розмиття гострих країв між областями різних кольорів. Це особливо добре видно у векторному мистецтві, де яскраво забарвлені фігури підбирають по своїх краях порочні косяки. Квантування частоти розмиває дрібні деталі в цілому, а також створює артефакти у формі блоку при налаштуваннях низької якості, оскільки DCT робиться на основі блоку. Це особливо добре видно на тексті.

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


Дуже дякую за ваше детальне пояснення Натан +1. Я розумію, що алгоритми стиснення мають свої обмеження для JPEG, але я просто хотів з’ясувати, чи є правильний баланс кількості стиснення разом з іншими параметрами (при його збереженні), які можуть зробити артефакти менш помітними. Я редагував своє запитання зразками.
Armfoot
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.