JPEG
JPEG | |
---|---|
Фотография заката в формате JPEG с уменьшением степени сжатия слева направо. | |
Расширение | .jpg, .jpe или .jpeg |
MIME-тип | image/jpeg |
Сигнатура | 0xFF 0xD8 |
Разработчик | Объединённая группа экспертов по фотографии |
Опубликован |
1991 год |
Тип формата | формат файла |
Развит в | JPEG 2000, JPEG-LS, JPEG XR, MotionJPEG |
JPEG(произносится «джейпег»[1], англ. Joint Photographic Experts Group — объединённая группа экспертов в области фотографии) — является широкоиспользуемым методом сжатия фотоизображений. Формат файла, который содержит сжатые данные обычно также называют именем JPEG; наиболее распространённые расширения для таких файлов .jpeg, .jfif, .jpg, .JPG, или .JPE. Однако из них .jpg самое популярное расширение на всех платформах.
Алгоритм JPEG является алгоритмом сжатия с потерей качества.
Область примененияПравить
Формат является форматом сжатия с потерями, поэтому некорректно считать что JPEG хранит данные как 8 бит на канал (24 бит на пиксель). С другой стороны, так как данные, подвергающиеся компресии по формату JPEG и декомпрессированые данные обычно представляются в формате 8 бит на канал, иногда используется эта терминология. Поддерживается также сжатие черно-белых полутоновых изображений.
При сохранении JPEG-файла можно указать степень сжатия, которую обычно задают в некоторых условных единицах, например, от 1 до 100 или от 1 до 10. Большее число соответствует лучшему качеству, но при этом увеличивается размер файла. Обыкновенно, разница в качестве между 90 и 100 на глаз уже практически не воспринимается. Следует помнить, что побитно восстановленое изображение всегда отличается от оригинала. Распространённым заблуждением является мнение о том, что качество JPEG тождественно доле сохраняемой информации.
СжатиеПравить
При сжатии изображение переводится в цветовую систему YCbCr. Далее каналы изображения Cb и Cr, отвечающие за цвет, уменьшаются в 2 раза (по линейному масштабу). Уже на этом этапе необходимо хранить только четверть информации о цвете изображения.
Реже используется уменьшение цветовой информации в 4 раза или сохранение размеров цветовых каналов как есть. Количество программ, которые поддерживают сохранение в таком виде, относительно невелико.
Далее цветовые каналы изображения, включая черно-белый канал Y, разбиваются на блоки 8 на 8 пикселей. Каждый блок подвергается дискретно-косинусному преобразованию. Полученные коэффициенты подвергаются квантованию и упаковываются с помощью кодов Хаффмана (см. Алгоритм Хаффмана).
Матрица, используемая для квантования коэффициентов, хранится вместе с изображением. Обычно она строится так, что высокочастотные коэффициенты подвергаются более сильному квантованию, чем низкочастотные. Это приводит к огрублению мелких деталей на изображении. Чем выше степень сжатия, тем более сильному квантованию подвергаются все коэффициенты.
Варианты храненияПравить
Progressive JPEG — такой способ записи сжатого изображения в файл, при котором старшие (низкочастотные) коэффициенты находятся в начале файла. Это позволяет получить уменьшенное изображение при загрузке лишь небольшой части файла и повышать детализацию изображения по мере загрузки оставшейся части. Поэтому Progressive JPEG получил широкое распространение в Internet. В целом алгоритм основан на дискретном косинусоидальном преобразовании (ДКП), которое является разновидностью дискретного преобразования Фурье, применяемом к матрице изображения для получения некоторой новой матрицы коэффициентов. Для получения исходного изображения применяется обратное преобразование. ДКП раскладывает изображение по амплитудам некоторых частот. Таким образом, при преобразовании мы получаем матрицу, в которой многие коэффициенты либо близки, либо равны нулю. Кроме того, благодаря несовершенству человеческого зрения, можно аппроксимировать коэффициенты более грубо без заметной потери качества изображения. Для этого используется квантование коэффициентов. В самом простом случае — это арифметический побитовый сдвиг вправо. При этом преобразовании теряется часть информации, но могут достигаться большие коэффициенты сжатия.
Процесс сжатия по схеме JPEG включает ряд этапов:
- преобразование изображения в оптимальное цветовое пространство;
- субдискретизация компонентов цветности усреднением групп пикселей;
- применение дискретных косинусных преобразований для уменьшения избыточности данных изображения;
- квантование каждого блока коэффициентов ДКП с применением весовых функций, оптимизированных с учетом визуального восприятия человеком;
- кодирование результирующих коэффициентов (данных изображения) с применением алгоритма группового кодирования и алгоритма Хаффмана для удаления избыточности информации.
Синтаксис и структураПравить
Изображение JPEG содержит последовательность маркеров, каждый из которых начинается с байта 0xFF, свидетельствующий о начале маркера. Некоторые маркеры состоят только из этого байта; другие же, кроме него содержат информация о длине полезной информации (длина включает в себя два байта длины, исключая длину маркера).
Аббревиатура | Байты | Длина | Имя | Комментарии |
---|---|---|---|---|
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 маркер для хранения метаданных, расположены в структуре, основанной на TIFF. |
COM | 0xFFFE | переменный размер | Комментарий | Содержит текст комментария. |
EOI | 0xFFD9 | нет | Конец изображения |
Достоинства и недостаткиПравить
К недостаткам формата следует отнести то, что при сильных степенях сжатия дает знать о себе блочная структура данных, изображение «дробится на квадратики» (каждый размером 8x8 пикселей). Этот эффект особенно заметен на областях с низкой пространственной частотой (плавные переходы изображения, например, чистое небо). В областях с высокой пространственной частотой (например, контрастные границы изображения), возникают характерные «артефакты» — иррегулярная структура пикселей искаженного цвета и/или яркости. Кроме того, из изображения пропадают мелкие цветные детали. Не стоит также забывать и о том, что данный формат не поддерживает прозрачность.
Однако, несмотря на недостатки, JPEG получил очень широкое распространение из-за высокой степени сжатия, относительно существующих во время его появления альтернатив.
См. такжеПравить
СсылкиПравить
ПримечанияПравить
- The JPEG committee homepage
- Подробное описание алгоритма сжатия
- Спецификация формата (текстовый файл)
- Оптимизация JPEG. Часть 1, Часть 2, Часть 3.