JPEG

JPEG (вимовляється "джейпег" [1], англ. Joint Photographic Experts Group , За назвою організації-розробника) - один з популярних графічних форматів, застосовуваний для зберігання фотозображень і подібних ним зображень. Файли, що містять дані JPEG, зазвичай мають розширення (суфікси). jpeg,. jfif,. jpg,. JPG, або. JPE. Однак з них. Jpg є найпопулярнішим на всіх платформах. MIME -типом є image / jpeg.

Фотографія заходу в форматі JPEG із зменшенням ступеня стиску зліва направо

Алгоритм JPEG дозволяє стискати зображення як з втратами, так і без втрат (режим стиснення lossless JPEG). Підтримуються зображення з лінійним розміром не більше 65535 65535 пікселів.


1. Область застосування

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

З іншого боку, JPEG малопридатний для стиснення креслень, текстової та знаковою графіки, де різкий контраст між сусідніми пікселами призводить до появи помітних артефактів. Такі зображення доцільно зберігати у форматах без втрат, таких як TIFF, GIF або PNG.

JPEG (як і інші методи спотворює стиснення) не підходить для стиснення зображень при багатоступінчастої обробки, так як спотворення в зображення будуть вноситися кожен раз при збереженні проміжних результатів обробки.

JPEG не повинен використовуватися і в тих випадках, коли недопустимі навіть мінімальні втрати, наприклад, при стисненні астрономічних або медичних зображень. У таких випадках може бути рекомендований передбачений стандартом JPEG режим стиснення Lossless JPEG (який, однак, не підтримується більшістю популярних кодеків) або стандарт стиснення JPEG-LS.


1.1. Стиснення

При стисненні зображення перетворюється з колірного простору RGB в YCbCr ( YUV). Слід зазначити, що стандарт JPEG (ISO / IEC 10918-1) ніяк не регламентує вибір саме YCbCr, допускаючи і інші види перетворення (наприклад, з числом компонентів [2], відмінним від трьох), і стиснення без перетворення (безпосередньо в RGB), проте специфікація JFIF (JPEG File Interchange Format, запропонована в 1991 році фахівцями компанії C-Cube Microsystems, і стала в даний час стандартом де-факто) припускає використання перетворення RGB-> YCbCr.

Після перетворення RGB-> YCbCr для каналів зображення Cb і Cr, що відповідають за колір, може виконуватися "проріджування" (subsampling [3]), яке полягає в тому, що кожному блоку з 4 пікселів (2х2) яскравості каналу Y ставляться у відповідність усереднені значення Cb і Cr (схема проріджування "4:2:0" [4]). При цьому для кожного блоку 2х2 замість 12 значень (4 Y, 4 Cb і 4 Cr) використовується всього 6 (4 Y і по одному усередненому Cb і Cr). Якщо до якості відновленого після стиснення зображення пред'являються підвищені вимоги, проріджування може виконуватися лише в якомусь одному напрямі - по вертикалі (схема "4:4:0") або по горизонталі ("4:2:2"), або не виконуватися зовсім ("4:4:4").

Стандарт допускає також проріджування з усередненням Cb і Cr не для блоку 2х2, а для чотирьох розташованих послідовно (по вертикалі або по горизонталі) пікселів, тобто для блоків 1х4, 4х1 (схема "4:1:1"), а також 2х4 і 4х2 (схема "4:1:0"). Допускається також використання різних типів проріджування для Cb і Cr, але на практиці такі схеми застосовуються виключно рідко.

Далі яскравості компонентів Y та відповідають за колір компоненти Cb і Cr розбиваються на блоки 8х8 пікселів. Кожен такий блок піддається дискретному косинусному перетворенню (ДКП). Отримані коефіцієнти ДКП квантуються (для Y, Cb і Cr в загальному випадку використовуються різні матриці квантування) і пакуються з використанням кодування серій і кодів Хаффмана. Стандарт JPEG допускає також використання значно більш ефективного арифметичного кодування, однак через патентних обмежень (патент на описаний в стандарті JPEG арифметичний QM-кодер належить IBM) на практиці воно використовується рідко. В популярну бібліотеку libjpeg останніх версій включена підтримка арифметичного кодування, але з переглядом стислих з використанням цього методу зображень можуть виникнути проблеми, оскільки багато програм перегляду не підтримують їх декодування.

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

При збереженні зображення в JPEG-файлі вказується параметр якості, що задається в деяких умовних одиницях, наприклад, від 1 до 100 або від 1 до 10. Більше число зазвичай відповідає кращій якості (і більшого розміру стиснутого файлу). Однак навіть при використанні найвищої якості (відповідного матриці квантування, що складається з одних тільки одиниць) відтворене зображення не буде в точності збігатися з вихідним, що пов'язано як з кінцевою точністю виконання ДКП, так і з необхідністю округлення значень Y, Cb, Cr і коефіцієнтів ДКП до найближчого цілого. Режим стиснення Lossless JPEG, не використовує ДКП, забезпечує точний збіг відновленого і вихідного зображень, проте його мала ефективність (коефіцієнт стиснення рідко перевищує 2) і відсутність підтримки з боку розробників програмного забезпечення не сприяли популярності Lossless JPEG.


1.2. Різновиди схем стиснення JPEG

Стандарт JPEG передбачає два основних способи представлення кодованих даних.

Найбільш поширеним, підтримуваним більшістю доступних кодеків, є послідовне (sequential JPEG) подання даних, що припускає послідовний обхід кодованого зображення поблочно зліва направо, зверху вниз. Над кожним кодуються блоком зображення здійснюються описані вище операції, а результати кодування поміщаються в вихідний потік у вигляді єдиного "скана", тобто масиву кодованих даних, відповідного послідовно пройденому ("просканувати") зображенню. Основний або "базовий" (baseline) режим кодування допускає тільки таке подання. Розширений (extended) режим поряд з послідовним допускає також прогресивне (progressive JPEG) подання даних.

У разі progressive JPEG стислі дані записуються в вихідний потік у вигляді набору сканів, кожен з яких описує зображення повністю з все більшим ступенем деталізації. Це досягається або шляхом запису в кожен скан не повного набору коефіцієнтів ДКП, а лише якийсь їх частини: спочатку - низькочастотних, у наступних Сканія - високочастотних (метод "spectral selection" тобто спектральних вибірок), або шляхом послідовного, від скана до Сканія, уточнення коефіцієнтів ДКП (метод "successive approximation", тобто послідовних наближень). Таке прогресивне уявлення даних виявляється особливо корисним при передачі стислих зображень з використанням низькошвидкісних каналів зв'язку, оскільки дозволяє отримати уявлення про весь зображенні вже після передачі незначної частини JPEG-файлу.

Обидві описані схеми (і sequential, і progressive JPEG) базуються на ДКП та принципово не дозволяють отримати відновлене зображення абсолютно ідентичним вихідному. Однак стандарт допускає також стиснення, що не використовує ДКП, а побудоване на основі лінійного провісника (lossless, тобто "без втрат", JPEG), що гарантує повне, біт-в-біт, збіг вихідного й відновленого зображень. При цьому коефіцієнт стиснення для фотографічних зображень рідко досягає 2, але гарантоване відсутність спотворень в деяких випадках виявляється затребуваним. Помітно великі ступеня стиснення можуть бути отримані при використанні не має, незважаючи на схожість у назвах, безпосереднього відношення до стандарту JPEG ISO / IEC 10918-1 (ITU T.81 Recommendation) методу стиснення JPEG-LS, описуваного стандартом ISO / IEC 14495-1 (ITU T.87 Recommendation).


2. Синтаксис і структура

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

Основні маркери JPEG [5]
Маркер Байти Довжина Призначення Коментарі
SOI 0xFFD8 немає Початок зображення
SOF0 0xFFC0 змінний розмір Початок фрейму (базовий, ДКП) Показує що зображення кодувалося в базовому режимі з використанням ДКП та коду Хаффмана. Маркер містить число рядків і довжину рядка зображення (двобайтові поля зі зміщенням відповідно 5 і 7 відносно початку маркера), кількість компонентів (байтове поле зі зміщенням 8 щодо початку маркера), число біт на компонент (байтове поле зі зміщенням 4 щодо початку маркера), а також співвідношення компонентів (наприклад, 4:2:0).
SOF1 0xFFC1 змінний розмір Початок фрейму (розширений, ДКП, код Хаффмана) Показує що зображення кодувалося в розширеному (extended) режимі з використанням ДКП та коду Хаффмана. Маркер містить число рядків і довжину рядка зображення, кількість компонентів, число біт на компонент, а також співвідношення компонентів (наприклад, 4:2:0).
SOF2 0xFFC2 змінний розмір Початок фрейму (прогресивний, ДКП, код Хаффмана) Показує що зображення кодувалося в прогресивному режимі з використанням ДКП та коду Хаффмана. Маркер містить число рядків і довжину рядка зображення, кількість компонентів, число біт на компонент, а також співвідношення компонентів (наприклад, 4:2:0).
DHT 0xFFC4 змінний розмір Містить таблиці Хаффмана Задає одну або більше таблиць Хаффмана.
DQT 0xFFDB змінний розмір Містить таблиці квантування Задає одну або більше таблиць квантування.
DRI 0xFFDD 4 байти Вказує довжину рестарт-інтервалу Задає інтервал між маркерами RST n в макроблоку. При відсутності DRI поява в потоці кодованих даних маркерів RST n неприпустимо і вважається помилкою. Якщо при кодуванні маркери RST n не застосовуються, маркер DRI або не використовується зовсім, або інтервал повторень в ньому вказується рівним 0.
SOS 0xFFDA змінний розмір Початок сканування Початок першого або чергового скана зображення з напрямом обходу зліва направо зверху вниз. Якщо використовувався базовий режим кодування, використовується один скан. При використанні прогресивних режимів використовується кілька сканів. Маркер SOS є поділяючим між інформативною (заголовком) і закодованої (власне стислими даними) частинами зображення.
RST n 0xFFD n немає Перезапуск Маркери перезапуску використовуються для сегментації кодованих ентропійних кодером даних. У кожному сегменті дані декодуються незалежно, що дозволяє распараллеліть процедуру декодування. При пошкодженні кодованих даних в процесі передачі або зберігання JPEG-файлу використання маркерів перезапуску дозволяє обмежити втрати (макроблоки з непошкоджених сегментів будуть відновлені правильно). Вставляється в кожному r-м макроблоків, де r - інтервал перезапуску DRI маркера. Не використовується за відсутності DRI маркера. N, молодші 3 біта маркера коду, цикли від 0 до 7.
APP n 0xFFE n змінний розмір Здається додатком Наприклад, в EXIF JPEG-файлу використовується маркер APP1 для зберігання метаданих, розміщених в структурі, заснованій на TIFF.
COM 0xFFFE змінний розмір Коментар Містить текст коментаря.
EOI 0xFFD9 немає Кінець закодованої частини зображення.

3. Переваги і недоліки

До недоліків стиснення за стандартом JPEG слід віднести появу на відновлених зображеннях при високих ступенях стиснення характерних артефактів : зображення розсипається на блоки розміром 8x8 пікселів (цей ефект особливо помітний на областях зображення з плавними змінами яскравості), в областях з високою просторовою частотою (наприклад, на контрастних контурах і кордонах зображення) виникають артефакти у вигляді шумових ореолів. Слід зазначити, що стандарт JPEG (ISO / IEC 10918-1, Annex K, п. K.8) передбачає використання спеціальних фільтрів для придушення блокових артефактів, але на практиці подібні фільтри, незважаючи на їх високу ефективність, практично не використовуються. Однак, незважаючи на недоліки, JPEG отримав дуже широке поширення через досить високу (щодо існували під час його появи альтернатив) ступеня стиснення, підтримки стиснення повнокольорових зображень і відносно невисокою обчислювальної складності.


4. Продуктивність стиснення за стандартом JPEG

Для прискорення процесу стиснення за стандартом JPEG традиційно використовується розпаралелювання обчислень, зокрема - при обчисленні ДКП. Історично одна з перших спроб прискорити процес стиснення з використанням такого підходу описана в опублікованій в 1993 р. статті Касперовича і Бабкіна [6], в якій пропонувалася оригінальна апроксимація ДКП, що робить можливим ефективне розпаралелювання обчислень з використанням 32-розрядних регістрів загального призначення процесорів Intel 80386 . З'явилися пізніше більш продуктивні обчислювальні схеми використовували SIMD -розширення набору інструкцій процесорів архітектури x86. Значно кращих результатів дозволяють домогтися схеми, що використовують обчислювальні можливості графічних прискорювачів (технології NVIDIA CUDA і AMD FireStream) для організації паралельних обчислень не тільки ДКП, але й інших етапів стиснення JPEG (перетворення колірних просторів, run-level, статистичне кодування і т.п.), причому для кожного блоку 8х8 кодованого або декодіруемий зображення. У статті [7] була вперше представлена ​​реалізація розпаралелювання всіх стадій алгоритму JPEG за технологією CUDA, що значно прискорило продуктивність стиснення і декодування за стандартом JPEG.


5. Цікаві факти

У 2010 році вчені з проекту PLANETS помістили інструкції з читання формату JPEG в спеціальну капсулу, яку помістили у спеціальний бункер у швейцарських Альпах. Зроблено це було з метою збереження для нащадків інформації про популярних на початку XXI століття цифрових форматах. [8]

Примітки

  1. JPEG pronounced - Пошук в Google - www.google.ru/search?hl=ru&q=JPEG pronounced & lr = & aq = f & oq =
  2. Відповідно до ГОСТ 34.003-90 в області інформаційних технологій даний термін має чоловічий рід
  3. ISO / IEC 10918-1: 1993 (E) p.28 - www.digicamsoft.com/itu/itu-t81-28.html. Читальний - www.webcitation.org/6183BhkYF з першоджерела 22 серпня 2011.
  4. Kerr, Douglas A. "Chrominance Subsampling in Digital Images" - dougkerr.net / Pumpkin / articles / Subsampling.pdf
  5. ISO / IEC 10918-1: 1993 (E) p.36 - www.digicamsoft.com/itu/itu-t81-36.html. Читальний - www.webcitation.org/6183CO9I0 з першоджерела 22 серпня 2011.
  6. Kasperovich, LV, Babkin, VF "Fast discrete cosine transform approximation for JPEG image compression" - link.springer.com/chapter/10.1007/3-540-57233-3_12
  7. "Використання технології CUDA для швидкого стиснення зображень за алгоритмом JPEG" - telephototech.ru / kat_podr.php? stid = 27 & st_gr_id = 3
  8. Вчені законсервували для нащадків формати JPEG і PDF - ruformator.ru/news/article06724/default.asp.