Що таке формат JPEG – докладний опис для фотографів

Що таке формат JPEG – докладний опис для фотографів



Той, хто коли-небудь користувався Інтернетом, ймовірно, бачив зображення в форматі JPEG. На сьогоднішній день це найпоширеніший спосіб кодування, надсилання по мережі і зберігання зображень. Формат JPEG використовується мільярди разів на день. Без JPEG Всесвітня павутина була б трохи менш барвистою, набагато повільнішою і, ймовірно, не володіла б таким багатством зображень кішок!

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

Для вирішення цієї проблеми в 1986 році спільними зусиллями ISO (Міжнародна організація по стандартизації) та IEC (Міжнародна електротехнічна комісія) була створена Об’єднана група експертів по фотографії (Joint Photographic Experts Group – абревіатура JPEG) зі штаб-квартирою в Женеві (Швейцарія).

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

 

 

Технічні деталі формату JPEG

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



Що таке формат JPEG – докладний опис для фотографів

 

 

Якщо ви відкриєте будь-яке зображення за допомогою текстового редактора (наприклад, Notepad++), ви побачите купу спотворених символів. Відкривши зображення в текстовому редакторі, ви заплутали комп’ютер, точно таким чином, як заплутали свій мозок, коли занадто сильно терли очі і тоді починаєте бачити тьмяні плями та кольори!

Що таке формат JPEG – докладний опис для фотографів

 

 

Ці тьмяні плями, які ви бачите – відомі як фосфени – не походять від будь-яких світлових стимулів, і при цьому вони не є галюцинаціями, створеними вашим розумом. Вони виникають тому, що ваш мозок передбачає, що будь-який електричний сигнал, що надходить через нерви в ваше око, передає світлову інформацію. Мозок повинен зробити це припущення, тому що немає ніякого способу дізнатися, чи є даний сигнал звуком, образом або чимось ще. Всі нерви в вашому тілі несуть електричний імпульс однакового типу. Коли ви чините тиск, потираючи очі, ви посилаєте невізуальні сигнали, що запускають рецептори в вашому оці, які ваш мозок інтерпретує – в даному випадку неправильно – як образ. І ви буквально бачите тиск на очі!

 

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

 

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

Що таке формат JPEG – докладний опис для фотографів

 

 

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

 

 

Загальна інформація про формат JPEG

Файли зображень в форматі JPEG мають наступні розширення: JPG, JFIF, JPE і JPEG. На сьогоднішній день найпоширенішим варіантом є розширення JPG.

Зберігання графічної інформації у файловому форматі JPEG використовує алгоритм методу стиснення з втратами. Це дозволяє стискати дані з досить високою ефективністю. У форматі JPEG можна зберігати картинки з глибиною кольору до 24 біт/піксель і розміром їх сторін не більше 65535 пікселів (2311,93 см).

В JPEG не зберігається альфа-канал (прозорість).

 

 

Переваги формату JPEG

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

Цей формат використовується у більшості цифрових фотокамер.

Зображення в форматі JPEG можна без проблем переглянути на будь-якому електронному пристрої: комп’ютер, телевізор, смартфон, ігрова приставка і так далі. Цей формат підтримується у всіх основних операційних системах: Mac OS, Linux, Windows, Android, iOS.

 

 

Недоліки формату JPEG

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

Іншим недоліком формату JPEG є те, що він не зберігає шари і альфа канали (прозорість).

Обмеження формату, які безпосередньо залежать від рівня стиснення інформації:

  • Спотворення кольору
  • Мозаїчність
  • Ореоли навколо контурів
  • Поява шумів
  • Втрата деталізації
  • Ступінчастість ліній
  • Погіршення різкості

 

 

 

Детальніше про процес стиснення файлів у форматі JPEG

Щоб дати вам уявлення про масштаб стиснення, яке використовується в цьому форматі, уявіть собі зображення вагою приблизно в 100 кілобайт. Якби інформація про зображення зберігалася без стиснення, для кожного пікселя треба було б три числа – по одному для кожного з червоного, зеленого і синього компонентів. Це буде означати в цілому 1 140 000 чисел, або близько 1,2 мегабайт. Завдяки стисненню JPEG вихідний файл стає в більш ніж десять разів меншим!

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

 

 

Три рівня стиснення, які використовуються в JPEG

  • Колірна субдискретизація (Chrominance Subsampling)
  • Дискретне косинусне перетворення і квантування (Discrete Cosine Transform and Quantization)
  • Довжина циклу, дельта і кодування Гоффмана (Run-Length, Delta & Huffman Encoding)

 

 

Етап стиснення №1: Підвибірка насиченості кольору (Колірна субдискретизація)

В першу чергу цифрове зображення переводиться з колірного простору RGB в YCbCr. У ньому компонента Y відповідає за яскравість зображення, Cb – це відносна синява (relative blueness), Cr – це відносне почервоніння (relative redness). Останні 2 компонента кодуються повністю, і в них зменшується інформація про колір.

Цей етап в деякій мірі схожий на те, як працюють людські очі. Кольорові рецептори в наших очах, відомі як «колбочки», діляться на три типи, кожен з яких найбільш чутливий до червоного, зеленого чи синього. Палички, інший тип рецептора, яким наші очі бачать, можуть виявляти тільки зміни яскравості, але вони набагато більш чутливі. У наших очах близько ста двадцяти мільйонів паличок в порівнянні з жалюгідними шістьма мільйонами колбочок.

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

Кожен піксель має рівно один компонент Y, тоді як кожна дискретна група з чотирьох пікселів має рівно один компонент Cb і один компонент Cr. Таким чином, зображення містить тільки чверть інформації про початковий колір.

Використання колірного простору YCbCr не є унікальним для JPEG. Насправді, він був розроблений в 1938 році для телевізійних передач. Не у всіх були кольорові телевізори, тому відділення кольору від яскравості дозволило всім отримувати однакову передачу, а телевізори, які не підтримували колір, просто використовували компонент яскравості.

 

 

Етап стиснення №2: Дискретне косинусне перетворення і квантування

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

Цей рівень стиснення в значній мірі є визначальною особливістю JPEG. Після перетворення кольорів в YCbCr компоненти стискаються окремо. Дискретне косинусне перетворення (Discrete Cosine Transform – DCT) – це процес розбиття зображення на блоки 8×8 і перетворення кожного блоку в комбінацію з 64 патернів.

Звучить неймовірним те, що будь-яке зображення може бути представлене з використанням 64 особливих шаблонів (патернів). Але це те ж саме, що сказати, що будь-яке місце на Землі можна уявити з використанням тільки двох чисел: довготи і широти. Поверхню Землі можна представити як двовимірну, тому тут потрібні тільки два числа. Зображення 8х8 має шістдесят чотири виміри, тому нам потрібно шістдесят чотири числа.

З точки зору стиснення, не очевидно, як це допомагає нам. Якщо нам потрібно шістдесят чотири числа для представлення зображення 8×8, чому це краще, ніж зберігати шістдесят чотири компонента яскравості? Ми робимо це з тієї ж причини, по якій ми перетворили три числа RGB в три числа YCbCr: це дозволяє нам видаляти деталі, які менш помітні.

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

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

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

 

 

Етап стиснення №3: Довжина циклу, дельта і кодування Гаффмана

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

Всі етапи стиснення досі були з втратами. Цей останній етап, навпаки, без втрат. Він не видаляє будь-яку інформацію, але значно зменшує розмір файлу.

Як відбувається стиснення, якщо не відсікається якась інформація?

Подумайте про просте суцільне чорне зображення. JPEG використовує близько 5000 чисел, щоб представити його, але ми можемо зробити набагато краще. Як можна зробити це з найменшою кількістю байтів? Найменше, що можна придумати, це чотири байти: три для вказівки кольору і один для визначення кількості пікселів, що мають цей колір. Ідея виразити всі повторювані значення коротко таким способом називається кодуванням по довжині прогону. Це буде без втрат, тому що ми можемо відновити закодовані дані точно в тому вигляді, як це було раніше.

Розмір файлу суцільного чорного зображення JPEG набагато більше, ніж чотири байти, тому що пам’ятайте, що в шарі DCT стиснення застосовується до блоків 8×8 одночасно. Тому, як мінімум, нам знадобиться один коефіцієнт DCT для кожного блоку в 64 пікселя. Нам потрібен тільки один, тому що замість збереження одного коефіцієнта DCT, за яким слідують 63 нуля для цього зображення, кодування по довжині прогону дозволяє нам просто зберегти одне число і сказати «інші дорівнюють нулю».

Дельта-кодування – це метод зберігання кожного байта в якості відносного значення в порівнянні з чимось перед ним, замість збереження його абсолютного значення.

 

Для цього етапу характерно те, що тут відбувається запис заголовків в JPEG. Заголовки – це перші близько 500 байтів, які містять метадані про зображення, такі як його ширина і висота. Без заголовка практично неможливо (або, принаймні, дуже важко) декодувати зображення JPEG. Кожне зображення JPEG стискається з кодом, який специфічний для цього конкретного зображення. Ці коди визначені в словнику, що зберігається в заголовку. Цей метод називається кодуванням Гаффмана, а словник (алфавіт) називається таблицею Гаффмана. Кожен компонент кольору може мати свою власну таблицю Гаффмана.

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

Це потенційно величезна трата сховища, якщо у вас багато невеликих номерів. Кодування Гаффмана – це метод, який дозволяє нам послабити цю вимогу про те, що кожне число має займати вісім бітів.

 

 

Як декодувати JPEG зображення?

Знаючи етапи процесу стиснення (кодування) картинки, описані вище, ми зможемо уявити собі процес читання (декодування) зображення у форматі JPEG. Для цього нам потрібно:

  1. Вилучити таблицю(і) Гаффмана із заголовку і декодувати біти.
  2. Вилучити коефіцієнти дискретного косинусного перетворення для кожного компонента кольору/яскравості, для кожного блоку 8×8, без кодування довжин серій та дельти.
  3. Об’єднати хвилі косинуса, засновані на коефіцієнтах, щоб отримати значення пікселів для кожного блоку 8×8 (це називається зворотним дискретним косинусним перетворенням).
  4. Збільшити компоненти кольоровості, якщо вони були піддані вибірці (ця інформація міститься в заголовку).
  5. Перетворити отримані значення YCbCr кожного пікселя в RGB.
  6. Вивести картинку в JPEG на екран!

 

 

Це досить велика робота, яка робиться програмою тільки для того, щоб ви могли побачити просту картинку із зображенням котика!

 

 

Як правильно зберігати фотографії у форматі JPEG

З огляду на всі переваги і недоліки файлового формату JPEG, які ми розглянули вище, ви зможете ефективно зберігати зображення в цьому форматі. Це дозволить вам заощадити дисковий простір на комп’ютері і при цьому зберегти високу якість зображень.

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

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

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

 

 

На сьогодні все. Сподіваємося, що дана стаття була вам корисна і цікава. Якщо у вас є якісь питання або зауваження по даній темі, не соромтеся їх озвучувати в розділі коментування нижче.

Дякуємо, що читаєте нас!

 



Напишіть тут свою думку/питання

Ваша пошта не публікуватиметься. Обов’язкові поля позначені *