.JPEG
JPEG | |
---|---|
![]() | |
Расширение |
.jpg ,.jpeg ,.JPG ,.JPEG ,.jpe или.JPE |
Сигнатура | 0xFF 0xD8 |
Опубликован | 18 сентября 1992 |
Тип формата | Графический формат |
Развит в | JPEG 2000,JPEG-LS,JPEG XR,MotionJPEG |
Стандарт(ы) | ISO/IEC 10918 |
Сайт | jpeg.org/jpeg/(англ.) |
![]() |
JPEG(произносится «джейпег»[1],англ.Joint Photographic Experts Group,по названиюорганизации-разработчика) — один из популярныхрастровыхграфических форматов,применяемый для храненияфотографийи подобных им изображений. Файлы, содержащие данные JPEG, обычно имеютрасширения(суффиксы).jpg(самое популярное),.jfif,.jpeили.jpeg.MIME-тип — image/jpeg.
![](https://upload.wikimedia.org/wikipedia/commons/thumb/c/c5/JPEG_example_down.jpg/350px-JPEG_example_down.jpg)
Алгоритм JPEG позволяет сжимать изображение какс потерями,так ибез потерь(режим сжатия lossless JPEG). Поддерживаются изображения с линейным размером не более 65535 × 65535 пикселов.
В 2010 году с целью сохранения для потомков информации о популярных в начале XXI века цифровых форматах учёные из проекта PLANETS заложили инструкции по чтению формата JPEG в специальную капсулу, которую поместили в специальное хранилище в швейцарских Альпах[2].
Область применения
[править|править код]![]() | В разделене хватаетссылок на источники(см.рекомендации по поиску). |
Алгоритм JPEG наиболее эффективен для сжатия фотографий и картин, содержащих реалистичные сцены с плавными переходами яркости и цвета[3].Наибольшее распространение JPEG получил вцифровой фотографиии для хранения и передачи изображений с использованиемИнтернета.
Формат JPEG в режиме сжатия с потерями малопригоден для сжатия чертежей, текстовой и знаковой графики, где резкий контраст между соседними пикселами приводит к появлению заметныхартефактов.Такие изображения целесообразно сохранять в форматах без потерь, таких какJPEG-LS,TIFF,GIF,PNG,либо использовать режим сжатия Lossless JPEG.
JPEG (как и другие форматысжатия с потерями) не подходит для сжатия изображений при многоэтапной обработке, так как искажения в изображения будут вноситься каждый раз при сохранении промежуточных результатов обработки.
JPEG не должен использоваться и в тех случаях, когда недопустимы даже минимальные потери, например при сжатии астрономических или медицинских изображений. В таких случаях может быть рекомендован предусмотренный стандартом JPEG режим сжатия Lossless JPEG (который, однако, не поддерживается большинством популярныхкодеков) или стандарт сжатияJPEG-LS.
Сжатие
[править|править код]![]() | В разделене хватаетссылок на источники(см.рекомендации по поиску). |
При сжатии изображение преобразуется из цветового пространства RGB вYCbCr.Стандарт JPEG (ISO/IEC 10918-1) не регламентирует выбор именно YCbCr, допуская и другие виды преобразования (например, с числом компонентов[4],отличным от трёх), и сжатие без преобразования (непосредственно в RGB), однако спецификация JFIF (JPEG File Interchange Format, предложенная в 1991 году специалистами компании C-Cube Microsystems, и ставшая в настоящее время стандартом де-факто) предполагает использование преобразования RGB->YCbCr.
После преобразования RGB->YCbCr для каналов изображения Cb и Cr, отвечающих за цвет, может выполняться «прореживание» (subsampling[5]), которое заключается в том, что каждому блоку из 4 пикселей (2х2) яркостного канала Y ставятся в соответствие усреднённые значения Cb и Cr (схема прореживания «4:2:0»[6]). При этом для каждого блока 2х2 вместо 12 значений (4 Y, 4 Cb и 4 Cr) используется всего 6 (4 Y и по одному усреднённому Cb и Cr). Если к качеству восстановленного после сжатия изображения предъявляются повышенные требования, прореживание может выполняться лишь в каком-то одном направлении — по вертикали (схема «4:4:0») или по горизонтали («4:2:2»), или не выполняться вовсе («4:4:4»).
![](https://upload.wikimedia.org/wikipedia/commons/thumb/2/24/%D0%A6%D0%B2%D0%B5%D1%82%D1%8B_%D0%B1%D1%83%D0%BA%D0%B5%D1%82.jpg/271px-%D0%A6%D0%B2%D0%B5%D1%82%D1%8B_%D0%B1%D1%83%D0%BA%D0%B5%D1%82.jpg)
Стандарт допускает также прореживание с усреднением Cb и Cr не для блока 2х2, а для четырёх расположенных последовательно (по вертикали или по горизонтали) пикселей, то есть для блоков 1х4, 4х1 (схема «4:1:1»), а также 2х4 и 4х2 (схема «4:1:0»). Допускается также использование различных типов прореживания для Cb и Cr, но на практике такие схемы применяются исключительно редко.
Далее яркостный компонент Y и отвечающие за цвет компоненты Cb и Cr разбиваются на блоки 8х8 пикселей. Каждый такой блок подвергаетсядискретному косинусному преобразованию (ДКП).Полученные коэффициенты ДКПквантуются(для Y, Cb и Cr в общем случае используются разные матрицы квантования) и пакуются с использованием кодирования серий икодов Хаффмана.Стандарт JPEG допускает также использование значительно более эффективногоарифметического кодирования,однако из-за патентных ограничений (патент на описанный в стандарте JPEG арифметический QM-кодер принадлежитIBM) на практике оно используется редко. В популярную библиотекуlibjpeg(в последнее время создана и библиотека Jpegli[7]) последних версий включена поддержка арифметического кодирования, но с просмотром сжатых с использованием этого метода изображений могут возникнуть проблемы, поскольку многие программы просмотра не поддерживают их декодирование.
Матрицы, используемые для квантования коэффициентов ДКП, хранятся в заголовочной части JPEG-файла[3].Обычно они строятся так, что высокочастотные коэффициенты подвергаются более сильному квантованию, чем низкочастотные. Это приводит к огрублению мелких деталей на изображении. Чем выше степень сжатия, тем более сильному квантованию подвергаются все коэффициенты.
При сохранении изображения в JPEG-файле кодеру указывается параметр качества, задаваемый в некоторых условных единицах, например, от 1 до 100 или от 1 до 10. Большее число обычно соответствует лучшему качеству (и большему размеру сжатого файла). Однако, в самом JPEG-файле такой параметр отсутствует, а качество восстановленного изображения определяется матрицами квантования, типом прореживания цветоразностных компонентов и точностью выполнения математических операций как на стороне кодера, так и на стороне декодера. При этом даже при использовании наивысшего качества (соответствующего матрице квантования, состоящей из одних только единиц, и отсутствию прореживания цветоразностных компонентов) восстановленное изображение не будет в точности совпадать с исходным, что связано как с конечной точностью выполнения ДКП, так и с необходимостью округления значений Y, Cb, Cr и коэффициентов ДКП до ближайшего целого. Режим сжатия Lossless JPEG, не использующий ДКП, обеспечивает точное совпадение восстановленного и исходного изображений, однако его малая эффективность (коэффициент сжатия редко превышает 2) и отсутствие поддержки со стороны разработчиков программного обеспечения не способствовали популярности Lossless JPEG.
Разновидности схем сжатия JPEG
[править|править код]Стандарт JPEG предусматривает два основных способа представления кодируемых данных.
Наиболее распространённым, поддерживаемым большинством доступныхкодеков,является последовательное (sequential JPEG) представление данных, предполагающее последовательный обход кодируемого изображения разрядностью 8 бит на компоненту (или 8 бит на пиксель для чёрно-белых полутоновых изображений) поблочно слева направо, сверху вниз. Над каждым кодируемым блоком изображения осуществляются описанные выше операции, а результаты кодирования помещаются в выходной поток в виде единственного «скана», то есть массива кодированных данных, соответствующего последовательно пройденному («просканированному») изображению. Основной или «базовый» (baseline) режим кодирования допускает только такое представление (и хаффмановское кодирование квантованных коэффициентов ДКП). Расширенный (extended) режим наряду с последовательным допускает также прогрессивное (progressive JPEG) представление данных, кодирование изображений разрядностью 12 бит на компоненту/пиксель (сжатие таких изображений спецификацией JFIF не поддерживается) и арифметическое кодирование квантованных коэффициентов ДКП.
В случае progressive JPEG сжатые данные записываются в выходной поток в виде набора сканов, каждый из которых описывает изображение полностью с всё большей степенью детализации. Это достигается либо путём записи в каждый скан не полного набора коэффициентов ДКП, а лишь какой-то их части: сначала — низкочастотных, в следующих сканах — высокочастотных (метод «spectral selection» то есть спектральных выборок), либо путём последовательного, от скана к скану, уточнения коэффициентов ДКП (метод «successive approximation», то есть последовательных приближений). Такое прогрессивное представление данных оказывается особенно полезным при передаче сжатых изображений с использованием низкоскоростных каналов связи, поскольку позволяет получить представление обо всём изображении уже после передачи незначительной части JPEG-файла.
Обе описанные схемы (и sequential, и progressive JPEG) базируются на ДКП и принципиально не позволяют получить восстановленное изображение абсолютно идентичным исходному. Однако стандарт допускает также сжатие, не использующее ДКП, а построенное на основе линейного предсказателя (lossless, то есть «без потерь», JPEG), гарантирующее полное, бит-в-бит, совпадение исходного и восстановленного изображений. При этом коэффициент сжатия для фотографических изображений редко достигает 2, но гарантированное отсутствие искажений в некоторых случаях оказывается востребованным. Заметно большие степени сжатия могут быть получены при использовании не имеющего, несмотря на сходство в названиях, непосредственного отношения к стандарту JPEG ISO/IEC 10918-1 (ITU T.81 Recommendation) метода сжатияJPEG-LS,описываемого стандартом ISO/IEC 14495-1 (ITU T.87 Recommendation).
Синтаксис и структура
[править|править код]Файл JPEG содержит последовательностьмаркеров,каждый из которых начинается с байта 0xFF, свидетельствующего о начале маркера, и байта-идентификатора. Некоторые маркеры состоят только из этой пары байтов, другие же содержат дополнительные данные, состоящие из двухбайтового поля с длиной информационной части маркера (включая длину этого поля, но за вычетом двух байтов начала маркера, то есть 0xFF и идентификатора) и собственно данных. Такая структура файла позволяет быстро отыскать маркер с необходимыми данными (например, с длиной строки, числом строк и числом цветовых компонентов сжатого изображения).
Маркер | Байты | Длина | Назначение | Комментарии |
---|---|---|---|---|
SOI | 0xFFD8 | нет | Начало изображения | |
SOF0 | 0xFFC0 | переменный размер | Начало фрейма (базовый, ДКП) | Показывает, что изображение кодировалось в базовом режиме с использованием ДКП икода Хаффмана.Маркер содержит число строк и длину строки изображения (двухбайтовые поля со смещением соответственно 5 и 7 относительно начала маркера), количество компонентов (байтовое поле со смещением 9 относительно начала маркера), число бит на компонент — строго 8 (байтовое поле со смещением 4 относительно начала маркера), а также соотношение компонентов (например, 4:2:0). |
SOF1 | 0xFFC1 | переменный размер | Начало фрейма (расширенный, ДКП, код Хаффмана) | Показывает, что изображение кодировалось в расширенном (extended) режиме с использованием ДКП и кода Хаффмана. Маркер содержит число строк и длину строки изображения, количество компонентов, число бит на компонент (8 или 12), а также соотношение компонентов (например, 4:2:0). |
SOF2 | 0xFFC2 | переменный размер | Начало фрейма (прогрессивный, ДКП, код Хаффмана) | Показывает, что изображение кодировалось в прогрессивном режиме с использованием ДКП и кода Хаффмана. Маркер содержит число строк и длину строки изображения, количество компонентов, число бит на компонент (8 или 12), а также соотношение компонентов (например, 4:2:0). |
DHT | 0xFFC4 | переменный размер | Содержит таблицы Хаффмана | Задает одну или более таблиц Хаффмана. |
DQT | 0xFFDB | переменный размер | Содержит таблицы квантования | Задает одну или более таблиц квантования. |
DRI | 0xFFDD | 4 байта | Указывает длину рестарт-интервала | Задает интервал между маркерами RSTnв макроблоках. При отсутствии DRI появление в потоке кодированных данных маркеров RSTnнедопустимо и считается ошибкой. Если при кодировании маркеры RSTnне применяются, маркер DRI либо не используется вовсе, либо интервал повторений в нём указывается равным 0. |
SOS | 0xFFDA | переменный размер | Начало сканирования | Начало первого или очередного скана изображения с направлением обхода слева направо сверху вниз. Если использовался базовый режим кодирования, используется один скан. При использовании прогрессивных режимов используется несколько сканов. Маркер SOS является разделяющим между информативной (заголовком) и закодированной (собственно сжатыми данными) частями изображения. |
RSTn | 0xFFDn | нет | Перезапуск | Маркеры перезапуска используются для сегментирования кодированных энтропийным кодером данных. В каждом сегменте данные декодируются независимо, что позволяет распараллелить процедуру декодирования. При повреждении кодированных данных в процессе передачи или хранения JPEG-файла использование маркеров перезапуска позволяет ограничить потери (макроблоки из неповреждённых сегментов будут восстановлены правильно). Вставляется в каждомr-м макроблоке, гдеr— интервал перезапуска DRI маркера. Не используется при отсутствии DRI маркера.n,младшие 3 бита маркера кода, циклы от 0 до 7. |
APPn | 0xFFEn | переменный размер | Задаётся приложением | Например, вEXIFJPEG-файла используется маркер APP1 для хранения метаданных, расположенных в структуре, основанной наTIFF. |
COM | 0xFFFE | переменный размер | Комментарий | Содержит текст комментария. |
EOI | 0xFFD9 | нет | Конец закодированной части изображения. |
Достоинства и недостатки
[править|править код]![]() | В разделене хватаетссылок на источники(см.рекомендации по поиску). |
К недостаткам сжатия по стандарту JPEG следует отнести появление на восстановленных изображениях при высоких степенях сжатия характерныхартефактов:изображение рассыпается на блоки размером 8x8 пикселей (этот эффект особенно заметен на областях изображения с плавными изменениями яркости), в областях с высокой пространственной частотой (например, на контрастных контурах и границах изображения) возникают артефакты в виде шумовых ореолов[3].Стандарт JPEG (ISO/IEC 10918-1, Annex K, п. K.8) предусматривает использование специальных фильтров для подавления блоковых артефактов, но на практике подобные фильтры, несмотря на их высокую эффективность, практически не используются.
Однако, несмотря на недостатки, JPEG получил очень широкое распространение из-за достаточно высокой (относительно существовавших во время его появления альтернатив) степени сжатия, поддержке сжатияполноцветных изображенийи относительно невысокойвычислительной сложности.
Скорость сжатия по стандарту JPEG
[править|править код]Для ускорения процесса сжатия по стандарту JPEG традиционно используетсяраспараллеливание вычислений,в частности — при вычислении ДКП. Исторически одна из первых попыток ускорить процесс сжатия с использованием такого подхода описана в опубликованной в 1993 году статье Касперовича и Бабкина[9],в которой предлагалась оригинальнаяаппроксимацияДКП, делающая возможным эффективное распараллеливание вычислений с использованием 32-разрядныхрегистров общего назначенияпроцессоровIntel 80386. Появившиеся позже более производительные вычислительные схемы использовалиSIMD-расширения набора инструкций процессоровархитектуры x86.Значительно лучших результатов позволяют добиться схемы, использующие вычислительные возможности графических ускорителей (технологииNVIDIA CUDAиAMD FireStream) для организации параллельных вычислений не только ДКП, но и других этапов сжатия JPEG (преобразование цветовых пространств, run-level, статистическое кодирование и т. п.), причём для каждого блока 8х8 кодируемого или декодируемого изображения. В статье[10]была представлена реализация распараллеливания всех стадий алгоритма JPEG по технологии CUDA, что значительно повысило скорость сжатия и декодирования по стандарту JPEG.
См. также
[править|править код]Примечания
[править|править код]- ↑Oxford Dictionary(англ.).Дата обращения: 10 мая 2024. Архивировано изоригинала11 ноября 2014 года.
- ↑Emma Woollacott.Digital ark aims to preserve dead data formats(англ.).TG Daily(21 мая 2010). Дата обращения: 10 мая 2024.Архивировано6 июня 2017 года.
- ↑123W.B. Pennebaker and J.L. Mitchell, “JPEG Still Image Data Compression Standards”, New York: Van Nostrand Reinhold. (1993).
- ↑В соответствии с ГОСТ 34.003-90 в области информационных технологий данный термин имеет мужской род
- ↑ISO/IEC 10918-1: 1993(E) p.28(англ.).Дата обращения: 10 мая 2024.Архивировано7 апреля 2023 года.
- ↑Kerr, Douglas A. «Chrominance Subsampling in Digital Images»(англ.).Дата обращения: 10 мая 2024.Архивировано24 февраля 2021 года.
- ↑новый кодек Jpegli, разработанныйGoogle–Изменен популярнейший формат JPEG. Картинки станут «легче» на треть//CNews,5 Апреля 2024
- ↑ISO/IEC 10918-1: 1993(E) p.36(англ.).Дата обращения: 10 августа 2024.Архивировано23 июня 2024 года.
- ↑Kasperovich, L.V., Babkin, V.F. «Fast discrete cosine transform approximation for JPEG image compression»(англ.).Дата обращения: 10 мая 2024.Архивировано15 июня 2018 года.
- ↑«Использование технологии CUDA для быстрого сжатия изображений по алгоритму JPEG» .Дата обращения: 10 мая 2024.Архивировано30 марта 2013 года.
Ссылки
[править|править код]- JPG committee homepage
- Спецификация JFIF 1.02(текстовый файл)