Jpeg

Jpeg

JPEG (произносится «джейпег»[1], англ. Joint Photographic Experts Group — объединённая группа экспертов в области фотографии) — является широкоиспользуемым методом сжатия фотоизображений. Формат файла, который содержит сжатые данные обычно также называют именем JPEG; наиболее распространённые расширения для таких файлов .jpeg, .jfif, .jpg, .JPG, или .JPE. Однако из них .jpg самое популярное расширение на всех платформах.

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

Алгоритм JPEG является алгоритмом сжатия с потерей качества.

Содержание

Область применения

Формат является форматом сжатия с потерями, поэтому некорректно считать что JPEG хранит данные как 8 бит на канал (24 бит на пиксель). С другой стороны, так как данные, подвергающиеся компресии по формату JPEG и декомпрессированые данные обычно представляются в формате 8 бит на канал, иногда используется эта терминология. Поддерживается также сжатие черно-белых полутоновых изображений.

При сохранении JPEG-файла можно указать степень качества, а значит и степень сжатия, которую обычно задают в некоторых условных единицах, например, от 1 до 100 или от 1 до 10. Большее число соответствует лучшему качеству, но при этом увеличивается размер файла. Обыкновенно, разница в качестве между 90 и 100 на глаз уже практически не воспринимается. Следует помнить, что побитно восстановленое изображение всегда отличается от оригинала. Распространённым заблуждением является мнение о том, что качество JPEG тождественно доле сохраняемой информации.

Сжатие

При сжатии изображение переводится в цветовую систему Jpeg. Далее каналы изображения Cb и Cr, отвечающие за цвет, уменьшаются в 2 раза (по линейному масштабу). Уже на этом этапе необходимо хранить только четверть информации о цвете изображения.

Реже используется уменьшение цветовой информации в 4 раза или сохранение размеров цветовых каналов как есть. Количество программ, которые поддерживают сохранение в таком виде, относительно невелико.

Далее цветовые каналы изображения, включая черно-белый канал Y, разбиваются на блоки 8 на 8 пикселей. Каждый блок подвергается дискретно-косинусному преобразованию. Полученные коэффициенты подвергаются квантованию и упаковываются с помощью кодов Хаффмана (см. Алгоритм Хаффмана).

Матрица, используемая для квантования коэффициентов, хранится вместе с изображением. Обычно она строится так, что высокочастотные коэффициенты подвергаются более сильному квантованию, чем низкочастотные. Это приводит к огрублению мелких деталей на изображении. Чем выше степень сжатия, тем более сильному квантованию подвергаются все коэффициенты.

Варианты хранения

Progressive JPEG — такой способ записи сжатого изображения в файл, при котором старшие (низкочастотные) коэффициенты находятся в начале файла. Это позволяет получить уменьшенное изображение при загрузке лишь небольшой части файла и повышать детализацию изображения по мере загрузки оставшейся части. Поэтому Progressive JPEG получил широкое распространение в Internet. В целом алгоритм основан на дискретном косинусоидальном преобразовании (ДКП), которое является разновидностью дискретного преобразования Фурье, применяемом к матрице изображения для получения некоторой новой матрицы коэффициентов. Для получения исходного изображения применяется обратное преобразование. ДКП раскладывает изображение по амплитудам некоторых частот. Таким образом, при преобразовании мы получаем матрицу, в которой многие коэффициенты либо близки, либо равны нулю. Кроме того, благодаря несовершенству человеческого зрения, можно аппроксимировать коэффициенты более грубо без заметной потери качества изображения. Для этого используется квантование коэффициентов. В самом простом случае — это арифметический побитовый сдвиг вправо. При этом преобразовании теряется часть информации, но могут достигаться большие коэффициенты сжатия.

Процесс сжатия по схеме JPEG включает ряд этапов:

  • преобразование изображения в оптимальное цветовое пространство;
  • субдискретизация компонентов цветности усреднением групп пикселей;
  • применение дискретных косинусных преобразований для уменьшения избыточности данных изображения;
  • квантование каждого блока коэффициентов ДКП с применением весовых функций, оптимизированных с учетом визуального восприятия человеком;
  • кодирование результирующих коэффициентов (данных изображения) с применением алгоритма группового кодирования и алгоритма Хаффмана для удаления избыточности информации.

Синтаксис и структура

Изображение JPEG содержит последовательность маркеров, каждый из которых начинается с байта 0xFF, свидетельствующий о начале маркера. Некоторые маркеры состоят только из этого байта; другие же, кроме него содержат информация о длине полезной информации (длина включает в себя два байта длины, исключая длину маркера).

Основные маркеры JPEG[1]
Аббревиатура Байты Длина Имя Комментарии
SOI 0xFFD8 нет Начало изображения
SOF0 0xFFC0 переменный размер Начало фрагмента (Базовый DCT) Показывает что это JPEG изображение относится к базовому DCT и содержит длину, высоту, количество компонент, и соотношение компонент (например, 4:2:0).
SOF2 0xFFC2 переменный размер Начало фрагмента (Прогрессивный DCT) Показывает что это JPEG изображение относится к прогрессивному DCT и содержит длину, высоту, количество компонент, и соотношение компонент (например, 4:2:0).
DHT 0xFFC4 переменный размер Содержит таблицы Хафмана Задает одну или более таблиц Хафмана.
DQT 0xFFDB переменный размер Содержит таблицы квантизации Задает одну или более таблиц квантизации.
DRI 0xFFDD 2 байта Указывает интервал повторений Задает интервал между маркерами RST n, в макроблоках.
SOS 0xFFDA переменный размер Начало сканирования Начинает сканирование изображение сверху вниз. В базовом DCT JPEG изображении, используется один проход сканирования. В прогрессивных DCT JPEG изображения используется несколько проходов сканирования. Данный маркер является разделяющим между информативной и закодированной частью изображения.
RSTn 0xFFDn переменный размер Перезапуск Вставляется в каждом r макроблоке, где r — интервал перезапуска DRI маркера. Не используется при отстутствии DRI маркера. n, младшие 4 бита маркера кода, циклы от 0 до 7.
APPn 0xFFEn переменный размер Задается приложением Например, в Exif JPEG файле используется APP1 маркер для хранения метаданных, расположены в структуре, основанной на Комментарий Содержит текст комментария.
EOI 0xFFD9 нет Конец изображения

Достоинства и недостатки

К недостаткам формата следует отнести то, что при сильных степенях сжатия дает знать о себе блочная структура данных, изображение «дробится на квадратики» (каждый размером 8x8 пикселей). Этот эффект особенно заметен на областях с низкой пространственной частотой (плавные переходы изображения, например, чистое небо). В областях с высокой пространственной частотой (например, контрастные границы изображения), возникают характерные «артефакты» — иррегулярная структура пикселей искаженного цвета и/или яркости. Кроме того, из изображения пропадают мелкие цветные детали. Не стоит также забывать и о том, что данный формат не поддерживает прозрачность.

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

См. также

Примечания

Ссылки