Все разделы
Выбрать школу

Школа. Увлечения. Большое будущее.

PROSCHOOLS · ОБРАЗОВАНИЕ РЯДОМ

Ваш город

Выберите город, чтобы находить образование и возможности рядом.

Как учитываем городКаталог и кнопки «Выбрать школу» покажут школы выбранного города.Онлайн-курсы, учебник, ГДЗ и задания к экзаменам доступны по всей России.

Популярные города

Будет выбран: Вся Россия

Учебные материалы останутся прежними.

Поиск по сайту

По всему сайтуШколы выбранного города — выше в результатах

С чего начнём?

↑ ↓ — выбрать результат · Enter — открыть · Esc — закрыть

Сжатие JPEG: урок информатики для школьников с расчётами

💻 Информатика · 10 класс

Как фотография становится JPEG: цветовые компоненты, 4:2:0, блоки 8×8, ДКП и квантование. Расчёты объёма, потери качества и пять задач с ответами.

Клавиатура в компьютерном классе
Иллюстрация к предмету «Информатика»Hmartil · Wikimedia Commons · CC BY-SA 4.0

JPEG-сжатие с потерями уменьшает объём изображения, отбрасывая часть исходной информации. В школьном проекте это удобно для фотографий: файл легче отправить или вставить в презентацию, но мелкие детали могут измениться. Ниже разберём распространённый 8-битный режим на основе ДКП и кодирования Хаффмана. Семейство JPEG 1 (ISO/IEC 10918, ITU-T T.81), появившееся в 1992 году, включает и другие режимы, в том числе без потерь; свойства одного режима нельзя переносить на всё семейство.

Конвейер JPEG: семь шагов

1. Цветовое пространство. В распространённой схеме входные RGB-данные переводят в YCbCr: Y — яркостная компонента, Cb и Cr — цветоразностные. Это типичная схема, а не обязательное цветовое пространство любого JPEG: например, возможны RGB и оттенки серого. Глаз человека заметно лучше различает детали яркости, чем цветовые переходы, — этим воспользуемся на следующем шаге.

2. Субдискретизация цвета. Для каждого блока 2×2 пикселя яркость Y хранится для всех четырёх, а цветные Cb и Cr — один раз на блок. В схеме 4:2:0 каждая цветоразностная компонента имеет вчетверо меньше отсчётов, чем Y. Для области 2×2 вместо 12 отсчётов схемы 4:4:4 остаётся 6: четыре Y и по одному Cb и Cr. Общее количество отсчётов уменьшается вдвое, но это ещё не размер готового файла. Прореживание может быть заметно на мелких цветных буквах и границах; оно применяется не всегда.

3. Блоки 8×8 и сдвиг уровней. Отсчёты каждой компоненты группируют в блоки 8×8, значения сдвигаются из диапазона 0–255 в −128…+127.

4. Дискретно-косинусное преобразование (ДКП). Каждый блок 8×8 переводится в частотную область: получается матрица 64 коэффициента. Верхний левый, DC, пропорционален среднему уровню отсчётов блока после сдвига; для цветоразностных компонент это не яркость, остальные описывают постепенно более мелкие детали. Для плавных участков фото высокочастотные коэффициенты близки к нулю.

5. Квантование — здесь теряются данные. Каждый коэффициент делится на шаг квантования из таблицы и округляется. Более крупные шаги обычно дают более грубое восстановление и меньший файл, но точный размер зависит от содержимого и настроек кодировщика. В следующем учебном примере округляем к ближайшему целому, а при равном расстоянии — от нуля. Пример 1. Коэффициенты [140, −13, 8, 3] с шагами [16, 8, 4, 2] округляются до [9, −2, 2, 2]; при обратном квантовании получится [144, −16, 8, 4] — погрешности [4, 3, 0, 1] не превышают половины шага. Это округление необратимо: именно оно делает JPEG «с потерями».

6. Зигзаг и RLE. AC-коэффициенты обходят в зигзагообразном порядке. Кодируется число нулей перед следующим ненулевым коэффициентом и категория величины этого коэффициента, а его значение дополняется битами. Для длинных серий нулей и конца блока есть специальные обозначения. DC кодируют отдельно как разность с предыдущим DC той же компоненты. Это точнее, чем представлять весь поток просто парами «пропуск, значение».

7. Энтропийное кодирование. Полученные символы кодируют по таблицам Хаффмана; сами амплитуды также требуют дополнительных битов. Общий принцип переменной длины кода покажем на отдельном учебном алфавите, который не является реальной таблицей JPEG. Пример 2. Для трёх символов с вероятностями {A: 1/2, B: 1/4, C: 1/4} средняя длина кода равна энтропии распределения: 1.5 бита вместо 2 бит у фиксированного кода — выигрыш 25%. В обычном самостоятельном JPEG-файле передаются необходимые таблицы квантования и Хаффмана. В специальных сокращённых потоках таблицы могут передаваться отдельно.

Сколько весит фотография: расчёт

Снимок 4000×3000 в несжатом RGB занимает 4000·3000·3 = 36 000 000 байт ≈ 34,3 МиБ. Для 8-битных компонент после прореживания 4:2:0 получается 18 000 000 байт отсчётов до дальнейшего кодирования, без учёта служебных данных. Определить размер итогового JPEG только по разрешению нельзя: важны детали, шум, таблицы квантования и другие настройки. Для условного результата 3,6 МБ коэффициент сжатия равен 36 / 3,6 = 10. Это пример расчёта, а не обещание размера. Более высокая настройка качества обычно уменьшает потери при новом кодировании, но уже удалённые детали не восстанавливает.

Что лежит внутри .jpg

По справке Библиотеки Конгресса JPEG-поток — цепочка сегментов-маркеров: файл начинается с маркера SOI (байты FF D8), он может содержать APP0/JFIF или APP1/Exif, таблицы квантования и маркер кадра SOF. Наличие именно APP0 или APP1 не обязательно для любого JPEG-потока. Маркер 0xFFC0 означает базовый (baseline) режим ДКП, 0xFFC2 — прогрессивный JPEG, в котором коэффициенты передаются по нескольким проходам и файл можно отображать постепенно, с нарастающей детализацией.

Почему у JPEG артефакты

Главный источник потерь в рассматриваемом режиме — квантование; потери также может вносить прореживание цвета. Идеальное ДКП обратимо, а в численной реализации возможно округление. Кодирование Хаффмана не отбрасывает уже полученные символы. Крупные шаги стирают мелкие детали, поэтому на резких границах (текст, края предметов, небо с плавными градиентами) появляются блоки 8×8 и ореолы. Если изображение декодировать, отредактировать и снова закодировать с потерями, могут добавиться новые искажения. Простое копирование файла этого не делает; существуют и преобразования JPEG без повторного квантования. Для работы полезно хранить исходник или мастер-файл без новых потерь, а JPEG экспортировать для нужной задачи. Практические нюансы экспорта разбирает наш урок по экспорту из GIMP в PNG и JPEG.

У стандарта есть и режимы без потерь: lossless-режим JPEG 1 (маркер SOF3) и отдельный стандарт JPEG-LS (ISO/IEC 14495-1 | ITU-T T.87), который предусматривает сжатие без потерь и с ограниченными потерями. Эти режимы нельзя отождествлять с установкой «качество 100» у обычного ДКП-кодировщика.

Упражнения

Задание 1

Сколько байт занимает несжатое изображение 1920×1080 в формате RGB?

Ответ 1: 1920·1080·3 = 6 220 800 байт ≈ 5,93 МиБ.

Задание 2

Какой шаг квантования грубее: для коэффициента 140 с шагом 16 или для коэффициента 8 с шагом 4, и где абсолютная погрешность округления больше?

Ответ 2: шаг 16 грубее шага 4. В данных числах 140 превращается в 144 с абсолютной ошибкой 4, а 8 восстанавливается точно с ошибкой 0. Верхние границы ошибки при таком округлении — 8 и 2 соответственно; это границы, а не фактические ошибки примеров.

Задание 3

Почему цветную компоненту Cb можно хранить в четыре раза меньше отсчётов, чем яркость Y?

Ответ 3: человеческий глаз хуже различает цветовую детализацию, чем яркостную; поэтому такое уменьшение цветовой детализации часто приемлемо для фотографий, но на некоторых изображениях заметно. Вдвое уменьшается общее число отсчётов трёх компонент относительно 4:4:4, а число отсчётов самой Cb — вчетверо.

Задание 4

Фото занимает 36 МБ без сжатия и 3,6 МБ после JPEG. Чему равен коэффициент сжатия?

Ответ 4: 10:1 (36 / 3,6 = 10). Это результат условий задачи; универсального коэффициента для высокого качества нет.

Задание 5

Почему нельзя «улучшить» качество уже сохранённого JPEG, пересохранив его с качеством 100%?

Ответ 5: информация, удалённая квантованием, необратимо потеряна; установка качества 100 не вернёт удалённые детали и не гарантирует отсутствие новых потерь при перекодировании. Например, кодировщик может сохранять прореживание цвета; остаются и численные округления. Значение ползунка качества зависит от программы.

Источники и материалы