Введение

Метод сжатия с потерями для уменьшения размера цифровых изображений.

Группа совместных экспертов по фотографии разработала стандарт в 1992 году. JPEG во многом способствовал распространению цифровых изображений и цифровых фотографий в Интернете, а затем и в социальных сетях. Сжатие JPEG используется в ряде форматов файлов изображений. JPEG/Exif – наиболее распространенный формат изображения, используемый цифровыми камерами и другими устройствами для захвата фотографических изображений; вместе с JPEG/JFIF это наиболее распространенный формат для хранения и передачи фотографических изображений в World Wide Web. Эти вариации формата часто не различаются и просто называются JPEG. MIME-тип для JPEG – "image/jpeg", за исключением старых версий Internet Explorer, которые используют MIME-тип "image/pjpeg" при загрузке JPEG-изображений. Файлы JPEG обычно имеют расширение имени файла "jpg" или "jpeg". JPEG/JFIF поддерживает максимальный размер изображения 65535×65535 пикселей, что соответствует до 4 гигапикселей при соотношении сторон 1:1. В 2000 году группа JPEG представила формат, предназначенный в качестве преемника – JPEG 2000, но он не смог заменить оригинальный JPEG в качестве доминирующего стандарта изображений.

Предыстория

Оригинальная спецификация JPEG, опубликованная в 1992 году, реализует процессы из различных предыдущих исследовательских работ и патентов, на которые ссылались CCITT (ныне ITU T) и Объединенная группа экспертов по фотографии. В спецификации JPEG приводятся патенты нескольких компаний. Следующие патенты послужили основой для алгоритма арифметического кодирования. Однако в спецификации JPEG также приводятся две более ранние исследовательские работы Вэнь Хсиун Чэна, опубликованные в 1977 и 1984 годах. В 1987 году ISO TC 97 стал ISO/IEC JTC 1, а в 1992 году CCITT стал ITU T. В настоящее время на стороне JTC1 JPEG является одной из двух подгрупп Совместного технического комитета ISO/IEC 1, Подкомитета 29, Рабочей группы 1 (ISO/IEC JTC 1/SC 29/WG 1) – под названием «Кодирование неподвижных изображений». На стороне ITU T соответствующим органом является ITU T SG16. Первоначальная группа JPEG была организована в 1986 году и выпустила первый стандарт JPEG в 1992 году, который был одобрен в сентябре 1992 года как Рекомендация ITU T T.81 и в 1994 году как ISO/IEC 10918-1. Стандарт JPEG определяет кодек, который определяет, как изображение сжимается в поток байтов и распаковывается обратно в изображение, но не формат файла, используемый для хранения этого потока. Стандарты Exif и JFIF определяют широко используемые форматы файлов для обмена изображениями, сжатыми с помощью JPEG. Стандарты JPEG официально называются «Информационные технологии – цифровое сжатие и кодирование изображений с непрерывными тонами». ISO/IEC 10918 состоит из следующих частей:

+Цифровое сжатие и кодирование изображений с непрерывными тонами – Части

Часть | Стандарт ISO/IEC | ITU T Rec. | Дата первого публичного выпуска | Последнее изменение | Наименование | Описание
------- | -------- | -------- | -------- | -------- | -------- | --------
1 | ISO/IEC 10918-1:1994 | T.81 (09/92) | | | Требования и руководящие принципы |
2 | ISO/IEC 10918-2:1995 | T.83 (11/94) | | | Правила испытаний на соответствие | Правила и проверки соответствия программного обеспечения (Части 1).
3 | ISO/IEC 10918-3:1997 | T.84 (07/96) | | | Расширения | Набор расширений для улучшения Части 1, включая формат файла обмена изображениями (SPIFF).
4 | ISO/IEC 10918-4:1999 | T.86 (06/98) | | | Регистрация | Регистрация профилей JPEG, профилей SPIFF, тегов SPIFF, цветовых пространств SPIFF, маркеров APPn, типов сжатия SPIFF и методов органов регистрации (REGAUT) для регистрации некоторых параметров, используемых для расширения JPEG.
5 | ISO/IEC 10918-5:2013 | T.871 (05/11) | | | JPEG File Interchange Format (JFIF) | Популярный формат, который де-факто является форматом файлов для изображений, закодированных стандартом JPEG. В 2009 году Комитет JPEG официально создал специальную группу для стандартизации JFIF как JPEG Part 5.
6 | ISO/IEC 10918-6:2013 | T.872 (06/12) | | | Применение к системам печати | Определяет подмножество функций и инструментов применения для обмена изображениями, закодированными в соответствии с ISO/IEC 10918-1, для печати.
7 | ISO/IEC 10918-7:2023 | T.873 (06/21) | Май 2019 | Ноябрь 2023 | Справочное программное обеспечение | Предоставляет эталонные реализации системы кодирования JPEG.

Ecma International TR/98 определяет формат обмена файлами JPEG (JFIF); первое издание было опубликовано в июне 2009 года.

Спор о патентах

В 2002 году Forgent Networks заявила, что владеет и будет обеспечивать соблюдение патентных прав на технологию JPEG, основанных на патенте, поданном 27 октября 1986 года и выданном 6 октября 1987 года: Wen Hsiung Chen и Daniel J. Klenke из Compression Labs. Хотя Forgent не владела Compression Labs в то время, Чен позже продал Compression Labs компании Forgent, прежде чем сам перешел на работу в Cisco. Это привело к тому, что Forgent приобрела право собственности на патент, что подтверждают различные эксперты. В период с 2002 по 2004 год Forgent смогла получить около 105 миллионов долларов США, лицензируя свой патент примерно 30 компаниям. В апреле 2004 года Forgent подала в суд на 31 другую компанию, требуя взыскания дальнейших лицензионных платежей. В июле того же года консорциум из 21 крупной компьютерной компании подал встречный иск с целью признания патента недействительным. Кроме того, Microsoft подала отдельный иск против Forgent в апреле 2005 года. В феврале 2006 года Управление по патентам и товарным знакам США (USPTO) согласилось пересмотреть патент Forgent на JPEG по запросу Public Patent Foundation. 26 мая 2006 года USPTO признало патент недействительным, ссылаясь на предшествующий уровень техники. USPTO также установило, что Forgent знала об этом уровне техники, но намеренно утаивала эту информацию от Патентного ведомства. Это делает маловероятным успешное обжалование решения о признании патента недействительным. Forgent также владеет аналогичным патентом, выданным Европейским патентным ведомством в 1994 году, однако степень его юридической силы неясна. По состоянию на 27 октября 2006 года, 20-летний срок действия патента США, по всей видимости, истек, и в ноябре 2006 года Forgent согласилась отказаться от принудительного исполнения патентных требований в отношении использования стандарта JPEG. Комитет JPEG ставит перед собой четкую цель – обеспечить возможность реализации своих стандартов (в частности, базовых методов) без уплаты лицензионных сборов, и получил соответствующие лицензионные права на свой стандарт JPEG 2000 от более чем 20 крупных организаций. Начиная с августа 2007 года, другая компания, Global Patent Holdings, LLC, заявила, что ее патент, выданный в 1993 году, нарушается при загрузке изображений JPEG на веб-сайтах или по электронной почте. Если этот патент не будет признан недействительным, он может применяться к любому веб-сайту, отображающему изображения JPEG. Патент подвергался пересмотру в USPTO с 2000 по 2007 год; в июле 2007 года Патентное ведомство отклонило все первоначальные пункты патента, но признало действительным дополнительный пункт, предложенный Global Patent Holdings (пункт 17). Global Patent Holdings затем подала ряд исков, основанных на пункте 17 своего патента. В первых двух исках, последовавших за пересмотром, оба поданных в Чикаго, штат Иллинойс, Global Patent Holdings предъявила обвинения Green Bay Packers, CDW, Motorola, Apple, Orbitz, Officemax, Caterpillar, Kraft и Peapod. Третий иск был подан 5 декабря 2007 года в Южной Флориде против ADT Security Services, AutoNation, Florida Crystals Corp., HearUSA, MovieTickets.com, Ocwen Financial Corp. и Tire Kingdom, а четвертый иск – 8 января 2008 года в Южной Флориде против Boca Raton Resort & Club. Пятый иск был подан против Global Patent Holdings в штате Невада. Этот иск был подан Zappos.com, Inc., которой, как утверждается, угрожала Global Patent Holdings, и требовал судебного признания недействительности и ненарушения патента '341. Global Patent Holdings также использовала патент '341 для подачи исков или угроз в отношении известных критиков широких патентных прав на программное обеспечение, включая Грегори Аароняна и анонимного оператора веб-блога, известного как "Patent Troll Tracker". 21 декабря 2007 года патентный адвокат Вернон Франциссен из Чикаго обратился в USPTO с просьбой пересмотреть единственный оставшийся пункт патента '341 на основании нового уровня техники. 5 марта 2008 года USPTO согласилось пересмотреть патент '341, установив, что новый уровень техники поднимает существенные вопросы относительно его действительности. В связи с пересмотром, ответчики в четырех из пяти ожидающих судебных процессов подали ходатайства о приостановке разбирательства до завершения рассмотрения патента '341 USPTO. 23 апреля 2008 года судья, рассматривающий два иска в Чикаго, штат Иллинойс, удовлетворил эти ходатайства. 22 июля 2008 года Патентное ведомство выпустило первое "Решение Патентного ведомства" по второму пересмотру, признав пункт патента недействительным по девятнадцати основаниям. 24 ноября 2009 года был выдан сертификат о пересмотре, отменяющий все пункты патента. Начиная с 2011 года и продолжаясь по начало 2013 года, организация под названием Princeton Digital Image Corporation, базирующаяся в Восточном Техасе, начала подавать в суд на большое количество компаний, обвиняя их в нарушении прав Princeton на сжатие изображений JPEG патентом '056 и подала иски против множества веб-сайтов, розничных продавцов, производителей камер и устройств, а также перепродавцов. Первоначально патент принадлежал и был передан General Electric. Срок действия патента истек в декабре 2007 года, но Princeton подала в суд на большое количество компаний за "прошлое нарушение" этого патента. (В соответствии с законодательством США о патентах, владелец патента может подать в суд за "прошлое нарушение" в течение шести лет до подачи иска, поэтому Princeton теоретически могла продолжать подавать в суд на компании до декабря 2013 года.) По состоянию на март 2013 года Princeton имела судебные разбирательства в Нью-Йорке и Делавэре против более чем 55 компаний. Участие General Electric в судебном процессе неизвестно, хотя записи в суде указывают на то, что она передала патент Princeton в 2009 году и сохранила определенные права на него.

Типичное использование

Алгоритм сжатия JPEG наиболее эффективно работает с фотографиями и картинами реалистичных сцен, характеризующихся плавными переходами тонов и цветов. Для использования в интернете, где уменьшение объема данных изображения важно для быстрой загрузки, преимущества сжатия JPEG делают его популярным форматом. JPEG/Exif также является наиболее распространенным форматом, используемым цифровыми камерами. Однако JPEG не подходит для линейных рисунков и других текстовых или графических изображений, состоящих из четких линий и фигур, поскольку резкие контрасты между соседними пикселями могут приводить к заметным артефактам. Такие изображения лучше сохранять в графических форматах без потерь, таких как TIFF, GIF, PNG или в формате RAW. Стандарт JPEG включает режим кодирования без потерь, но он не поддерживается большинством программ и устройств. Поскольку JPEG обычно используется как метод сжатия с потерями, снижающий точность изображения, он не подходит для точного воспроизведения данных изображения (например, в некоторых научных и медицинских приложениях, а также в определенных задачах технической обработки изображений). JPEG также не рекомендуется для файлов, которые будут подвергаться многократной обработке, так как при каждом повторном сжатии происходит потеря качества, особенно если изображение обрезается, сдвигается или изменяются параметры кодирования – подробности см. в разделе о потере качества при цифровой обработке. Чтобы избежать потери информации об изображении при последовательном и многократном редактировании, рекомендуется сохранить первую версию в формате без потерь, проводить дальнейшую обработку в этом формате, а затем опубликовать окончательный результат в формате JPEG для распространения.

Сжатие JPEG

JPEG использует сжатие с потерями, основанное на дискретном косинусном преобразовании (DCT). Эта математическая операция преобразует каждый кадр/поле видеоисточника из пространственной (2D) области в частотную область (также известную как область преобразований). Перцепционная модель, основанная на психовизуальной системе человека, отбрасывает высокочастотную информацию, то есть резкие переходы в яркости и цветовом тоне. В области преобразований процесс уменьшения информации называется квантованием. Проще говоря, квантование – это метод оптимального сокращения большого диапазона значений (с различным количеством вхождений каждого значения) до меньшего. Область преобразований представляет собой удобное представление изображения, поскольку высокочастотные коэффициенты, которые вносят меньший вклад в общую картину, чем другие коэффициенты, обычно имеют небольшие значения и высокую степень сжимаемости. Затем квантованные коэффициенты последовательно упорядочиваются и без потерь упаковываются в выходной битовый поток. Почти все программные реализации JPEG позволяют пользователю контролировать степень сжатия (а также другие дополнительные параметры), позволяя ему выбирать между качеством изображения и размером файла. Во встраиваемых приложениях (таких как miniDV, использующая аналогичную схему сжатия DCT) параметры предварительно выбираются и фиксируются для конкретного приложения. Метод сжатия обычно является сжатием с потерями, что означает, что часть исходной информации изображения теряется и не может быть восстановлена, что может повлиять на качество изображения. В стандарте JPEG определен необязательный режим без потерь, однако он не широко поддерживается в продуктах. Существует также прогрессивный, чередующийся формат JPEG, в котором данные сжимаются в несколько проходов с последовательно возрастающей детализацией. Это идеально подходит для больших изображений, которые будут отображаться во время загрузки по медленному соединению, обеспечивая предварительный просмотр разумного качества после получения лишь части данных. Однако поддержка прогрессивных JPEG не является повсеместной. Если программы не поддерживают прогрессивные JPEG (например, версии Internet Explorer до Windows 7), изображение отображается только после полной загрузки. Многие приложения для медицинской визуализации, систем видеонаблюдения и камер создают и обрабатывают 12-битные JPEG-изображения как в оттенках серого, так и в цвете. 12-битный формат JPEG включен в расширенную часть спецификации JPEG. Кодек libjpeg поддерживает 12-битный JPEG, и даже существует версия с высокой производительностью.

Безпотеря редактирования

Несколько изменений в JPEG-изображении могут быть выполнены без потерь (то есть без повторного сжатия и связанной с этим потери качества), если размер изображения кратен 1 блоку MCU (минимальная кодируемая единица) (обычно 16 пикселей в обоих направлениях для 4:2:0 субдискретизации цветности). Утилиты, реализующие это, включают: jpegtran и его графический интерфейс, Jpegcrop. IrfanView использует функции "JPG Lossless Crop (PlugIn)" и "JPG Lossless Rotation (PlugIn)", для которых требуется установка плагина JPG TRANSFORM. FastStone Image Viewer использует "Lossless Crop to File" и "JPEG Lossless Rotate". XnViewMP использует "JPEG lossless transformations". ACDSee поддерживает безпотерйное вращение (но не безпотерйную обрезку) с помощью опции "Force lossless JPEG operations". Блоки можно вращать с шагом 90 градусов, отражать по горизонтальной, вертикальной и диагональной осям и перемещать по изображению. Не все блоки из исходного изображения должны использоваться в измененном. Верхний и левый края JPEG-изображения должны совпадать с границей блока 8×8 пикселей (или 16×16 пикселей для больших размеров MCU), но нижний и правый края не обязаны. Это ограничивает возможные операции обрезки без потерь, а также предотвращает отражение и вращение изображения, нижний или правый край которого не лежит на границе блока для всех цветовых каналов (поскольку край окажется сверху или слева, где – как упоминалось выше – граница блока обязательна). Вращения, при которых изображение не кратно 8 или 16 (значение зависит от субдискретизации цветности), не являются безпотерйными. Вращение такого изображения приводит к пересчету блоков, что влечет за собой потерю качества. При использовании безпотерйной обрезки, если нижняя или правая сторона области обрезки не находится на границе блока, остальные данные из частично использованных блоков все равно будут присутствовать в обрезанном файле и могут быть восстановлены. Также возможно преобразование между базовым и прогрессивным форматами без потери качества, поскольку единственное различие заключается в порядке расположения коэффициентов в файле. Кроме того, несколько JPEG-изображений можно объединить без потерь, если они были сохранены с одинаковым качеством и края совпадают с границами блоков.

Расширения имен файлов JPEG

Наиболее распространенными расширениями файлов, использующих сжатие JPEG, являются jpg и jpeg, хотя также используются jpe, jfif и jif. Кроме того, данные JPEG могут быть встроены в другие типы файлов: TIFF-файлы часто содержат JPEG-изображение в качестве миниатюры основного изображения, а MP3-файлы могут включать JPEG-изображение обложки в теге ID3v2.

Цветовой профиль

Многие JPEG-файлы содержат встроенный цветовой профиль ICC (цветовое пространство). Наиболее распространенные цветовые профили включают sRGB и Adobe RGB. Поскольку эти цветовые пространства используют нелинейное преобразование, динамический диапазон 8-битного JPEG-файла составляет примерно 11 ступеней; см. гамма-кривую. Если в изображении не указана информация о цветовом профиле (изображение без профиля), для отображения на веб-страницах цветовое пространство по умолчанию принимается за sRGB.

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

Изображение JPEG состоит из последовательности сегментов, каждый из которых начинается с маркера, начинающегося с байта 0xFF, за которым следует байт, указывающий тип маркера. Некоторые маркеры состоят только из этих двух байтов; за другими следуют два байта (старший, затем младший), указывающие длину данных полезной нагрузки маркера, которые следуют. (Длина включает два байта для длины, но не включает два байта для самого маркера.) Некоторые маркеры сопровождаются данными, закодированными энтропией; длина такого маркера не включает данные, закодированные энтропией. Следует отметить, что последовательные байты 0xFF используются как байты заполнения, хотя такое заполнение должно происходить только для маркеров, непосредственно следующих за данными сканирования, закодированными энтропией (см. разделы B.1.1.2 и E.1.2 спецификации JPEG для подробностей; в частности, "Во всех случаях, когда маркеры добавляются после сжатых данных, необязательные байты заполнения 0xFF могут предшествовать маркеру"). В данных, закодированных энтропией, после любого байта 0xFF кодировщик вставляет байт 0x00 перед следующим байтом, чтобы избежать ложного распознавания маркера и предотвратить ошибки кадрирования. Декодеры должны пропускать этот байт 0x00. Эта техника, называемая байтовой подстановкой (см. раздел F.1.2.3 спецификации JPEG), применяется только к данным, закодированным энтропией, а не к данным полезной нагрузки маркера. Однако следует отметить, что данные, закодированные энтропией, имеют собственные маркеры, в частности, маркеры сброса (Reset) (0xD0–0xD7), которые используются для изоляции независимых блоков данных, закодированных энтропией, для обеспечения параллельного декодирования. Кодировщики могут вставлять эти маркеры сброса через регулярные интервалы (хотя не все кодировщики это делают).

+ Общие маркеры JPEG

Короткое название | Байты | Полезная нагрузка | Название | Комментарии
------- | -------- | -------- | -------- | --------
SOI | 0xFF, 0xD8 | нет | Начало изображения |
SOF0 | 0xFF, 0xC0 | переменный размер | Начало кадра (базовая DCT) | Указывает, что это JPEG на основе базовой DCT, и определяет ширину, высоту, количество компонент и субдискретизацию компонент (например, 4:2:0).
SOF2 | 0xFF, 0xC2 | переменный размер | Начало кадра (прогрессивная DCT) | Указывает, что это JPEG на основе прогрессивной DCT, и определяет ширину, высоту, количество компонент и субдискретизацию компонент (например, 4:2:0).
DHT | 0xFF, 0xC4 | переменный размер | Определение таблицы Хаффмана | Определяет одну или несколько таблиц Хаффмана.
DQT | 0xFF, 0xDB | переменный размер | Определение таблицы квантования | Определяет одну или несколько таблиц квантования.
DRI | 0xFF, 0xDD | 4 байта | Определение интервала перезапуска | Определяет интервал между маркерами RSTn в минимальных кодируемых блоках (MCU). За этим маркером следуют два байта, указывающие фиксированный размер, поэтому его можно рассматривать как любой другой сегмент с переменным размером.
SOS | 0xFF, 0xDA | переменный размер | Начало сканирования | Начинает сканирование изображения сверху вниз. В JPEG с базовой DCT обычно используется одно сканирование. В JPEG с прогрессивной DCT обычно используется несколько сканирований. Этот маркер определяет, какой фрагмент данных он будет содержать, и сразу же за ним следуют данные, закодированные энтропией.
RSTn | 0xFF, 0xDn (n=0–7) | нет | Перезапуск | Вставляется каждые r макроблоков, где r — интервал перезапуска, установленный маркером DRI. Не используется, если маркер DRI отсутствует. Младшие три бита кода маркера циклически изменяются от 0 до 7.
APPn | 0xFF, 0xEn | переменный размер | Специфичный для приложения | Например, файл Exif JPEG использует маркер APP1 для хранения метаданных, расположенных в структуре, тесно основанной на TIFF.
COM | 0xFF, 0xFE | переменный размер | Комментарий | Содержит текстовый комментарий.
EOI | 0xFF, 0xD9 | нет | Конец изображения |

Существуют и другие маркеры Start Of Frame, которые вводят другие типы кодирования JPEG. Поскольку несколько производителей могут использовать один и тот же тип маркера APPn, маркеры, специфичные для приложений, часто начинаются со стандартного или имени производителя (например, "Exif" или "Adobe") или другой идентифицирующей строки. При маркере перезапуска переменные предиктора от блока к блоку сбрасываются, а битовый поток синхронизируется с байтовой границей. Маркеры перезапуска обеспечивают возможность восстановления после ошибок битового потока, таких как передача по ненадежной сети или повреждение файла. Поскольку последовательности макроблоков между маркерами перезапуска могут быть декодированы независимо, эти последовательности могут быть декодированы параллельно.

Пример кодека JPEG

Хотя файл JPEG может быть закодирован различными способами, чаще всего это делается с использованием кодирования JFIF. Процесс кодирования состоит из нескольких этапов: представление цветов в изображении преобразуется из RGB в цветовое пространство, состоящее из одного компонента яркости (Y') и двух компонентов цветности (CB и CR). Этот шаг иногда пропускается. Разрешение данных цветности уменьшается, обычно в 2 или 3 раза. Это обусловлено тем, что глаз менее чувствителен к мелким цветовым деталям, чем к мелким деталям яркости. Изображение разбивается на блоки размером 8×8 пикселей, и для каждого блока данные Y, CB и CR подвергаются дискретному косинусному преобразованию (DCT). DCT аналогично преобразованию Фурье, поскольку оно создает своего рода спектр пространственных частот. Амплитуды частотных компонентов квантуются. Человеческое зрение гораздо более чувствительно к небольшим изменениям цвета или яркости на больших площадях, чем к интенсивности высокочастотных изменений яркости. Поэтому значения высокочастотных компонентов хранятся с меньшей точностью, чем низкочастотных компонентов. Настройка качества кодировщика (например, 50 или 95 по шкале от 0 до 100 в библиотеке Independent JPEG Group) определяет степень уменьшения разрешения каждого частотного компонента. При использовании чрезмерно низкой настройки качества высокочастотные компоненты отбрасываются полностью. Полученные данные для всех блоков 8×8 дополнительно сжимаются с помощью алгоритма без потерь, варианта кодирования Хаффмана. Процесс декодирования обращает эти шаги вспять, за исключением квантования, поскольку оно необратимо. В оставшейся части этого раздела процессы кодирования и декодирования будут описаны более подробно.

Кодирование

Многие опции стандарта JPEG редко используются, и, как упоминалось выше, большинство программного обеспечения для работы с изображениями использует более простой формат JFIF при создании JPEG-файла, который, в частности, определяет метод кодирования. Ниже приведено краткое описание одного из наиболее распространенных методов кодирования, применяемого к входным данным с 24 битами на пиксель (по восемь для красного, зеленого и синего). Этот конкретный вариант представляет собой метод сжатия данных с потерями.

Преобразование цветового пространства

Во-первых, изображение должно быть преобразовано из цветового пространства RGB (по умолчанию sRGB, в котором изображение хранится в отдельных каналах для красной, зеленой и синей составляющих яркости). Это приводит к менее эффективному сжатию и вряд ли будет применяться, когда размер файла имеет критическое значение.

Снижение выборки

Из-за плотности цветочувствительных и яркостных рецепторов в человеческом глазу, люди способны различать значительно больше мелких деталей в яркости изображения (компонент Y') по сравнению с оттенком и насыщенностью цвета изображения (компоненты Cb и Cr). Используя эти знания, можно разрабатывать кодировщики, способные более эффективно сжимать изображения. Преобразование в данную цветовую модель позволяет перейти к следующему стандартному этапу – уменьшению пространственного разрешения компонентов Cb и Cr (так называемому "downsampling" или "chroma subsampling"). Обычно для JPEG-изображений используются следующие соотношения при понижении дискретизации: 4:4:4 (без понижения дискретизации), 4:2:2 (уменьшение в два раза по горизонтали) или (наиболее часто) 4:2:0 (уменьшение в два раза по горизонтали и вертикали). На протяжении всего остального процесса сжатия компоненты Y', Cb и Cr обрабатываются раздельно, но схожим образом.

Разделение блоков

После понижения дискретизации каждый канал должен быть разделен на блоки 8x8. В зависимости от схемы понижения дискретизации цветности, это приводит к формированию минимальных кодируемых блоков (MCU) размером 8x8 (4:4:4 – без понижения дискретизации), 16x8 (4:2:2) или, наиболее часто, 16x16 (4:2:0). В видеокомпрессии блоки MCU называются макроблоками. Если данные для канала не соответствуют целому числу блоков, кодер должен заполнить оставшуюся область неполных блоков некоторым видом фиктивных данных. Заполнение краев фиксированным цветом (например, черным) может вызывать эффект звона вдоль видимой части границы; повторение крайних пикселей – распространенный метод, который уменьшает (но не обязательно устраняет) подобные артефакты, и могут также применяться более сложные методы заполнения границы.

Требуемая точность

Требуемая точность реализации JPEG-кодека неявно определяется требованиями, сформулированными для соответствия стандарту JPEG. Эти требования указаны в Рекомендации ITU-T T.83 | ISO/IEC 10918-2. В отличие от стандартов MPEG и многих более поздних стандартов JPEG, указанный документ определяет требуемую точность реализации как процесса кодирования, так и процесса декодирования JPEG-кодека посредством максимально допустимой ошибки прямого и обратного дискретного косинусного преобразования (DCT) в DCT-области, определяемой на основе эталонных тестовых последовательностей. Например, выход декодера не должен содержать ошибку, превышающую одну единицу квантования в DCT-области при обработке эталонных тестовых потоков, предоставляемых в рамках вышеуказанного стандарта. Хотя это необычно, и в отличие от многих других, более современных стандартов, ITU-T T.83 | ISO/IEC 10918-2 не устанавливает ограничения на ошибки в пространстве изображения.

Эффекты сжатия JPEG

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

JPEG Стереоскопический

JPS — это стереоскопическое JPEG-изображение, используемое для создания 3D-эффектов из 2D-изображений. Оно содержит два статических изображения, одно для левого глаза и одно для правого глаза, закодированных как два изображения, расположенных рядом друг с другом в одном JPG-файле. JPEG Stereoscopic (JPS, расширение jps) — это формат стереоскопических изображений на основе JPEG. Он содержит различные конфигурации, хранящиеся в маркере JPEG APP3, но обычно представляет собой одно изображение вдвое большей ширины, содержащее два изображения одинакового размера, расположенных бок о бок в перекрестном порядке (то есть левое изображение — на правой половине, а правое — на левой). Этот формат файла можно просматривать как обычный JPEG без специального программного обеспечения, либо обрабатывать для рендеринга в других режимах.

Формат JPEG с несколькими изображениями

JPEG Multi Picture Format (MPO, расширение mpo) — это формат на основе JPEG, предназначенный для хранения нескольких изображений в одном файле. Он содержит два или более объединенных JPEG-файла. Также он определяет сегмент маркера JPEG APP2 для описания изображения. Различные устройства используют его для хранения 3D-изображений, такие как Fujifilm FinePix Real 3D W1, HTC Evo 3D, видеокамера JVC GY HMZ1U с расширением AVCHD/MVC, Nintendo 3DS, Panasonic Lumix DMC TZ20, DMC TZ30, DMC TZ60, DMC TS4 (FT4) и Sony DSC HX7V. Другие устройства используют его для хранения "изображений предварительного просмотра", которые можно отображать на телевизоре. За последние несколько лет, в связи с растущим распространением стереоскопических изображений, научное сообщество приложило значительные усилия для разработки алгоритмов сжатия стереоскопических изображений.

Реализация

Очень важной реализацией кодека JPEG является бесплатная библиотека программирования libjpeg от Independent JPEG Group. Она была впервые опубликована в 1991 году и сыграла ключевую роль в успехе стандарта. Эта библиотека использовалась в бесчисленных приложениях. Разработка замедлилась в 1998 году; когда libjpeg вновь появилась с версией 7 в 2009 году, она нарушила обратную совместимость ABI с предыдущими версиями. Версия 8, выпущенная в 2010 году, представила нестандартные расширения, решение, которое подверглось критике со стороны Тома Лейна, оригинального лидера IJG. libjpeg turbo, ответвлённая от libjpeg 6b 1998 года, улучшает libjpeg за счёт SIMD-оптимизаций. Изначально рассматривалась как поддерживаемая ветка libjpeg, она стала более популярной после несовместимых изменений 2009 года. В 2019 году она стала эталонной реализацией ITU|ISO/IEC в соответствии со стандартами ISO/IEC 10918-7 и ITU-T T.873. Совместная группа экспертов по фотографии ISO/IEC поддерживает другую эталонную программную реализацию под названием JPEG XT. Она может кодировать как базовый JPEG (ISO/IEC 10918-1 и 18477-1), так и расширения JPEG XT (ISO/IEC 18477 Части 2 и 6–9), а также JPEG LS (ISO/IEC 14495). В 2016 году опция "JPEG на стероидах" была добавлена в эталонную реализацию ISO JPEG XT. Сохраняется постоянный интерес к нестандартным способам кодирования JPEG, которые максимизируют качество изображения при заданном размере файла. В 2014 году Mozilla создала MozJPEG на основе libjpeg turbo – более медленный, но обеспечивающий более высокое качество кодер, предназначенный для веб-изображений. В марте 2017 года Google выпустила проект с открытым исходным кодом Guetzli, который жертвует значительно большим временем кодирования ради уменьшения размера файла (аналогично тому, что Zopfli делает для PNG и других форматов данных без потерь). В апреле 2024 года Google представила Jpegli, новую библиотеку кодирования JPEG, которая предлагает расширенные возможности и улучшение коэффициента сжатия на 35% при настройках сжатия высокого качества, при этом скорость кодирования сопоставима с MozJPEG.

Преемники

Совместная группа экспертов по фотографии разработала несколько новых стандартов, призванных дополнить или заменить функциональность оригинального формата JPEG.

JPEG LS

JPEG LS, разработанный в 1993 году и опубликованный как ISO 14495 1/ITU T.87, представляет собой формат файлов без потерь с низкой вычислительной сложностью, который был эффективнее оригинальной реализации без потерь в JPEG. Он также включает режим с потерями, близкий к режиму без потерь. Его функциональные возможности в основном этим и ограничены, и во многом разделяет те же ограничения, что и оригинальный JPEG в других областях.

JPEG 2000

JPEG 2000 был опубликован как ISO/IEC 15444 в декабре 2000 года. Он основан на дискретном вейвлет-преобразовании (DWT) и был разработан для полной замены оригинального стандарта JPEG и превосходства над ним во всех аспектах. Он поддерживает до 38 бит на цветовой канал и 16384 каналов, что больше, чем в любом другом формате, с широким выбором цветовых пространств и, как следствие, высоким динамическим диапазоном (HDR). Кроме того, он обеспечивает кодирование альфа-канала прозрачности, изображения размером миллиарды на миллиарды пикселей, что также превышает возможности любого другого формата, и сжатие без потерь. Он значительно улучшил степень сжатия с потерями, при этом заметные артефакты при сильном сжатии стали значительно менее выраженными.

JPEG XT

JPEG XT (ISO/IEC 18477) был опубликован в июне 2015 года; он расширяет базовый формат JPEG, добавляя поддержку более высоких разрядностей целых чисел (до 16 бит), изображений с высоким динамическим диапазоном и кодирования с плавающей точкой, а также без потерь и кодирования альфа-канала. Расширения обратно совместимы с базовым форматом файла JPEG/JFIF и 8-битным изображением, сжатым с потерями. JPEG XT использует расширяемый формат файла, основанный на JFIF. Расширяющие слои используются для изменения 8-битного базового слоя JPEG и восстановления изображения высокого разрешения. Существующее программное обеспечение совместимо с новыми версиями и может читать двоичный поток JPEG XT, хотя оно будет декодировать только базовый 8-битный слой.

JPEG XL

JPEG XL (ISO/IEC 18181) был опубликован в 2021–2022 годах. Он заменяет формат JPEG новым форматом на основе DCT, не требующим выплаты роялти, и обеспечивает эффективное перекодирование как вариант хранения традиционных изображений JPEG. Новый формат разработан для превосходства над производительностью сжатия статических изображений, демонстрируемой HEVC HM, Daala и WebP. Он поддерживает изображения размером до миллиарда на миллиард пикселей, с высоким динамическим диапазоном до 32 бит на компонент и соответствующими функциями передачи (PQ и HLG), пакетное кодирование синтетических изображений, таких как растровые шрифты и градиенты, анимированные изображения, кодирование альфа-канала и выбор цветового пространства RGB, YCbCr или ICtCp.