Сжатие изображений: JPEG и JPEG2000. Изобретаем JPEG

JPEG-сжатие цифрового изображения

Одним из наиболее полных и популярных стандартов сжатия изображений является стандарт JPEG.

Сам процесс сжатия состоит из трех последовательных шагов:

а) Вычисление дискретного косинусного преобразования (ДКП) для матриц 8*8-блоков, полученных после стандартного разбиения матрицы ЦИ;

б) квантование коэффициентов ДКП;

в) кодирование неравномерным кодом.

Сначала ЦИ разбивается на отдельные блоки размером 8*8 элементов, которые обрабатываются последовательно слева направо и сверху вниз. Обработка каждого блока начинается со сдвига по яркости значений всех его 64 элементов, что достигается вычитанием величины , где - максимальное число уровней яркости. Затем вычисляется двумерное ДКП элементов блока. Полученные значения коэффициентов квантуются в соответствии с формулой:

,

где - результат квантования значения коэффициента ДКП , а - соответствующий элемент матрицы коэффициентов квантования:

.

(Необходимо отметить, что перед тем, как квантованные коэффициенты ДКП могут быть подвергнуты обратному ДКП для восстановления блока изображения, они должны быть умножены на :

. (2.5)

Очевидно, что обратное преобразование полученных значений даст в результате приближение восстановливаемого блока изображения.)

Отквантованные значения коэффициентов переупорядочиваются зигзаг-преобразованием согласно:

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

Одномерный массив, полученный после зигзаг-преобразования, упорядочивается по возрастанию пространственной частоты, при этом, как правило, возникают длинные последовательности нулей, что эффективно используется процедурой JPEG-кодирования. Рекомендованная JPEG матрица квантования имеет следующий вид:

Пример . Последовательное кодирование и декодирование JPEG . Рассмотрим сжатие и восстановление следующего блока 8*8 элементов согласно стандарту последовательного кодирования JPEG:

Исходные пиксели могут иметь 256 или 2 8 уровней яркости, так что процесс кодирования начинается со сдвига диапазона значений – вычитания из значений пикселей величины 2 7 или 128. В результате получается массив:

который после прямого ДКП будет иметь вид:

Если для квантования полученных данных используется приведенная выше матрица квантования, то после квантования коэффициенты примут вид:

Процедура квантования дает значительное число нулевых элементов. После того, как коэффициенты переупорядочены в соответствии с зигзаг преобразованием, получится следующий массив:

(-26 -31 -3 -2 -6 2 -4 1 -4 1 1 5 0 2 0 0 -1 2 0 0 0 0 0 -1 -1 КБ)

Кодовое слово КБ означает конец блока, указывает на то, что все оставшиеся коэффициенты в переупорядоченной последовательности равны 0. Для кодирования полученного массива используются стандартные коды Хаффмана, преобразующие массив в непрерывный поток битов.

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

Полностью восстановленный блок получается после выполнения обратного ДКП полученного массива:

и обратного сдвига диапазона значений на +2 7 =+128. В результате получаем:

Все отличия значений элементов исходного и восстановленного блоков возникают вследствие самой природы сжатия с потерями, являющегося сутью JPEG процедур сжатия и восстановления. В данном примере ошибки восстановления находятся в диапазоне от -14 до 11 и распределены следующим образом:

Характерные особенности сингулярных чисел блоков матрицы цифрового изображения при JPEG-сжатии. Пусть исходное ЦИ в градациях серого, хранящееся в некотором формате без потерь, например, в формате TIF, матрица которого имеет размеры , разбивается стандартным образом на блоки . Если для каждого блока ЦИ определить множество всех СНЧ (сингулярный спектр), то оказывается, что в среднем лишь 2.40% от общего числа блоков (ОЧБ) имеют нулевые СНЧ.

Данный факт не случаен. Ранг любой матрицы определяется количеством ее ненулевых СНЧ, а значит наличие нулей в сингулярном спектре будет говорить о том, что число ее линейно независимых строк (столбцов) меньше размера. Однако, для произвольного реального ЦИ, даже с учетом коррелированности значений яркости пикселей, вероятность того, что строки (столбцы) очередного блока окажутся линейно зависимыми, невелика.

Квантование коэффициентов DCT, которое происходит в процессе сохранения ЦИ в формате JPEG (с потерями), является необратимой процедурой и приводит к некоторым особенностям возмущений СНЧ блоков.

Пусть исходное ЦИ подверглось JPEG-сжатию. Проведем для него операцию частичного восстановления (ЧВ), которая включает в себя: 1) энтропийное декодирование; 2) умножение полученных коэффициентов на соответствующие элементы массива нормализации (матрицы квантования); 3) применение обратного DCT, но без последующего округления.

У полученной матрицы практически все блоки содержат нулевые СНЧ, причем таких значений в блоках будет достаточно много (табл.2.1). Такая ситуация закономерна. После квантования и округления коэффициентов DCT блоков многие из них, отвечающие высоким и средним частотам, обнулятся, оставаясь нулями после ЧВ, что, учитывая соответствие между коэффициентами дискретного преобразования Фурье и сингулярными тройками матрицы изображения, где - СНЧ и отвечающие ему левый и правый СНВ соответственно, приведет к обнулению наименьших (а возможно и средних по величине) СНЧ матриц блоков.

Табл.2.1. Результаты сингулярного разложения блоков частично восстановленных изображений

ОЧБ Кол-во блоков, у кот-х нулевых СНЧ больше 2-х, по отношению к ОЧБ (в %)
m=8 m=7 m=6 m=5 m=4 m=3 m=2 m=1 m=0
POUT
CAMERAMAN
TIRE
MOON 99.8
CELL

Заметим, что, чем меньше нулевых СНЧ в рассматриваемом блоке, тем больше линий контура он содержит. Действительно, наличие контуров в блоке говорит о значительной высокочастотной составляющей в сигнале, отвечающем этому блоку. Тогда коэффициенты DCT, соответствующие высоким и средним частотам, будут сравнительно большими и могут остаться ненулевыми после квантования и ЧВ, а значит внесут свой вклад не только в максимальные СНЧ.

Для наглядного представления справедливости вышесказанного рассмотрим изображение СELL.TIF (рис.2.5(а)). На рис.2.5(б) представлена матрица нулевых СНЧ блоков (МНСЧБ) размерности ЧВ-изображения, каждый элемент которой равен количеству нулевых СНЧ в соответствующем блоке. На рисунке выделены элементы, имеющие наименьшие значения, что позволяет наглядно увидеть соответствие между контурами исходного ЦИ и блоками, содержащими наименьшее количество нулевых СНЧ.

Пусть исходное изображение, подвергшееся JPEG-сжатию, восстанавливается полностью. Это означает, что после ЧВ все значения яркости пикселей округляются до целых и вводятся в диапазон . Это действие возмутит матрицу изображения, полученную после ЧВ, определенным образом изменится количество нулевых СНЧ в блоках (табл.2.2). Там, где после ЧВ не было элементов, значительно меньших 0 или больших 255, возмущение матрицы будет небольшим. В соответствии с соотношением

, (2.6)

имеющим место для произвольной матрицы, где - СНЧ исходной и возмущенной матриц соответственно, - матрица возмущений блока, - спектральная матричная норма, СНЧ являются нечувствительными к возмущающим воздействиям. Если некоторые из нулевых СНЧ блоков матрицы ЧВ-изображения станут ненулями после полного восстановления (ПВ), то их значения будут сравнимы с погрешностью округления, что не характерно для блоков исходного ЦИ.

Рис.2.5. Исходное изображение СELL.TIF (а); МНСЧБ после ЧВ (б); МНСЧБ после полного восстановления (в)

Наиболее заметным различие между совокупным исходным изображением и полностью восстановленным после JPEG-сжатия будет при сравнении их МНСЧБ. Типичная картина представлена на рис.2.5(в), при этом МНСЧБ для CELL.TIF имела только нулевые значения.

Таблица 2.2. Результаты сингулярного разложения блоков полностью восстановленных изображений

Изображение в формате без потерь (TIF) ОЧБ Количества блоков, имеющих нулевых СНЧ Кол-во блоков, у которых нулевых СЧ больше двух, по отношению к ОЧБ (%)
m=8 m=7 m=6 m=5 m=4 m=3 m=2 m=1 m=0
POUT
CAMERAMAN
TIRE
MOON
CELL

Вопросы

  1. Что означает сжатие даннях? Что такое избыточность даннях?
  2. Основные виды избыточности данных.
  3. Как реализуется сжатие посредством квантования?
  4. Что такое малоранговая оппроксимация изображения? Как реализуется сжатие посредством использования малоранговых аппроксимаций изображения?
  5. Что такое сингулярное разложение матрицы?
  6. Что такое спектральное разложение матрицы?
  7. Соответствие между параметрами цифрового изображения в пространственной и частотной областях.
  8. Основные шаги JPEG-сжатие цифрового изображения. Матрицы квантования.
  9. Характерные особенности сингулярных чисел блоков матрицы цифрового изображения при JPEG-сжатии.
  10. Частичное и полное восстановление цифрового изображения после сжатия.

Литература

  1. Кобозева А.А. Анализ информационной безопасности / А.А.Кобозева, В.А.Хорошко. – К.: Изд. ГУИКТ, 2009. – 251 с.
  2. Деммель Дж. Вычислительная линейная алгебра / Дж.Деммель; пер.с англ. Х.Д.Икрамова. - М.: Мир, 2001. - 430 с.
  3. Бахвалов Н.С. Численные методы / Н.С.Бахвалов, Н.П.Жидков, Г.М.Кобельков. - М.: БИНОМ. Лаборатория знаний, 2006. - 636 с.
  4. Гонсалес Р. Цифровая обработка изображений / Р.Гонсалес, Р.Вудс; пер. с англ. под ред. П.А.Чочиа. - М.: Техносфера, 2005. - 1072 с.
  5. Каханер Д. Численные методы и программное обеспечение / Д.Каханер, К.Моулер, С.Нэш; пер. с англ. Х.Д.Икрамова. - М.: Мир, 2001. - 575 с.
  6. Гантмахер Ф.Р. Теория матриц / Ф.Р.Гантмахер. - М.: Наука, 1988. - 552 с.
  7. Воеводин В.В. Вычислительные основы линейной алгебры / В.В.Воеводин. - М.: Наука. Гл.ред.физ.-мат.лит., 1977. - 304 с.

(произносится «джейпег» Joint Photographic Experts Group, по названию организации-разработчика) - один из популярных графических форматов, применяемый для хранения фотоизображений и подобных им изображений. Файлы, содержащие данные JPEG, обычно имеют расширения.jpeg, .jfif, .jpg, .JPG, или.JPE. Однако из них.jpg самое популярное расширение на всех платформах.

1. Объединенная группа экспертов в области фотографии;

2. Разработанный данной группой метод сжатия изображений и соответствующий графический формат, часто используемый в WWW. Характерен компактностью файлов и, соответственно, быстрой передачей, а также «потерей» качества изображения. Используется преимущественно для фотографий, поскольку для них потеря качества менее критична. Сохраняет параметры цвета в цветовой модели RGB.

JPEG (произносится «джейпег », англ. Joint Photographic Experts Group , по названию организации-разработчика) - один из популярных графических форматов, применяемый для хранения фотоизображений и подобных им изображений. Файлы, содержащие данные JPEG, обычно имеют расширения .jpeg , .jfif , .jpg , .JPG , или .JPE . Однако из них .jpg самое популярное расширение на всех платформах. MIME-типом является image/jpeg.

Алгоритм JPEG является алгоритмом сжатия данных с потерями.

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

Алгоритм JPEG в наибольшей степени пригоден для сжатия фотографий и картин, содержащих реалистичные сцены с плавными переходами яркости и цвета. Наибольшее распространение JPEG получил в цифровой фотографии и для хранения и передачи изображений с использованием сети Интернет.

С другой стороны, JPEG малопригоден для сжатия чертежей, текстовой и знаковой графики, где резкий контраст между соседними пикселами приводит к появлению заметных артефактов. Такие изображения целесообразно сохранять в форматах без потерь, таких как TIFF, GIF, PNG или RAW.

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

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

Сжатие

При сжатии изображение преобразуется из цветового пространства RGB в YCbCr (YUV). Следует отметить, что стандарт JPEG (ISO/IEC 10918-1) никак не регламентирует выбор именно YCbCr, допуская и другие виды преобразования (например, с числом компонентов, отличным от трёх), и сжатие без преобразования (непосредственно в RGB), однако спецификация JFIF (JPEG File Interchange Format, предложенная в 1991 году специалистами компании C-Cube Microsystems, и ставшая в настоящее время стандартом де-факто) предполагает использование преобразования RGB->YCbCr.

После преобразования RGB->YCbCr для каналов изображения Cb и Cr, отвечающих за цвет, может выполняться «прореживание» (subsampling), которое заключается в том, что каждому блоку из 4 пикселов (2х2) яркостного канала Y ставятся в соответствие усреднённые значения Cb и Cr (схема прореживания «4:2:0»). При этом для каждого блока 2х2 вместо 12 значений (4 Y, 4 Cb и 4 Cr) используется всего 6 (4 Y и по одному усреднённому Cb и Cr). Если к качеству восстановленного после сжатия изображения предъявляются повышенные требования, прореживание может выполняться лишь в каком-то одном направлении - по вертикали (схема «4:4:0») или по горизонтали («4:2:2»), или не выполняться вовсе («4:4:4»).

Стандарт допускает также прореживание с усреднением Cb и Cr не для блока 2х2, а для четырёх расположенных последовательно (по вертикали или по горизонтали) пикселов, то есть для блоков 1х4, 4х1 (схема «4:1:1»), а также 2х4 и 4х2. Допускается также использование различных типов прореживания для Cb и Cr, но на практике такие схемы применяются исключительно редко.

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

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

При сохранении изображения в JPEG-файле указывается параметр качества, задаваемый в некоторых условных единицах, например, от 1 до 100 или от 1 до 10. Большее число обычно соответствует лучшему качеству (и большему размеру сжатого файла). Однако, даже при использовании наивысшего качества (соответствующего матрице квантования, состоящей из одних только единиц) восстановленное изображение не будет в точности совпадать с исходным, что связано как с конечной точностью выполнения ДКП, так и с необходимостью округления значений Y, Cb, Cr и коэффициентов ДКП до ближайшего целого. Режим сжатия Lossless JPEG, не использующий ДКП, обеспечивает точное совпадение восстановленного и исходного изображений, однако, его малая эффективность (коэффициент сжатия редко превышает 2) и отсутствие поддержки со стороны разработчиков программного обеспечения не способствовали популярности Lossless JPEG.

Разновидности схем сжатия JPEG

Стандарт JPEG предусматривает два основных способа представления кодируемых данных.

Наиболее распространённым, поддерживаемым большинством доступных кодеков, является последовательное (sequential JPEG) представление данных, предполагающее последовательный обход кодируемого изображения поблочно слева направо, сверху вниз. Над каждым кодируемым блоком изображения осуществляются описанные выше операции, а результаты кодирования помещаются в выходной поток в виде единственного «скана», т.е. массива кодированных данных, соответствующего последовательно пройденному («просканированному») изображению. Основной или «базовый» (baseline) режим кодирования допускает только такое представление. Расширенный (extended) режим наряду с последовательным допускает также прогрессивное (progressive JPEG) представление данных.

В случае 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

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

Основные маркеры JPEG
Маркер Байты Длина Назначение

Сжатие методом JPEG является самым распространенным и эффективным способом сжатия. В 1992 году стал международным стандартом в области ГИ. JPEG – аббревиатура группы экспертов создавших стандарт (Joint Photographic Experts Group).

В основе метода лежит поиск разницы между соседними пикселями. Кодирование осуществляется в несколько этапов.

1. Конвертирование цветовой модели изображения (обычно RGB) в цветовую модель YUV, некоторый аналог модели Lab, где яркостная составляющая отделена от цветовой. В модели RGB изменение любого компонента цвета приводит к изменению яркости пикселя. В модели YUV компонента Y – компонента яркости, а компоненты U, V – хранят информацию о цвете.

Y = 0,299 x R + 0,587 x G + 0,114 x B

U = (B – Y) / 0,433 +128

V = (R – Y) / 0,355 + 128

2. Подвыборка – соседние пиксели группируются попарно в каналах U и V. Разделение яркости и цвета позволяет уделять больше внимание яркости, чем данным о цвете. Этот процесс осуществляется для компонент с различной частотой.

Используется два метода подвыборки 4:1:1 и 4:2:2. Так как каждый цвет кодируется 3 байтами, для передачи цвета 4 пикселей (12 байт в RGB) требуется 6 байт и 8 байт соответственно. Т.е. YUV411 сокращает объем данных в два раза, а YUV422 в 1,5 раз. С точки зрения математики происходит значительная потеря информации, но человеческий глаз ее не воспринимает, ввиду избыточности информации в самом изображении.

3. Группировка пикселей в блоки, обычно размером 8х8. В каждой выборке определяется запись изменений частот (как часто меняются яркость и цвет пикселей), так называемое дискретное косинусное преобразование (DCT). Таким образом, яркость заменяется на частоту появления той или иной яркости. На этом этапе размер файла может увеличиться, но следующие этапы это устраняют.

4. Квантование – удаление малозначительной для глаза информации. Все составляющие делятся на коэффициенты относительной важности и округляются до целого.

Именно на этой стадии происходят основные потери. Высокочастотные составляющие квантуются грубо, низкочастотные – точнее, т.к. наиболее заметны. Для уменьшения потерь в канале яркости используются меньшие коэффициенты, чем в каналах цветности. Величина квантования может изменяться, что позволяет управлять размером сжатия, а соответственно и качества изображения.

5. Этап Zig-Zag . Этап назван так вследствие того, что пиксели собираются в последовательность по размерам (сначала располагаются пиксели, отвечающие за более крупные объекты). Кодировщик движется как бы зигзагом.

6. Сжатие методом RLE.

7. Сжатие методом JPEG.

JPEG лучше сжимает изображения с полутоновыми переходами, с высоким разрешением. Важное замечание – формат следует использовать только как конечный результат, т.к. при каждом открытии файла, и его последующим сжатием сжимается уже исходное изображение. Таким образом, если сжать неоднократно изображение, то через несколько этапов сжатия, его можно не узнать.

Вопросы для самопроверки.

1. Для чего необходимы алгоритмы сжатия данных?

2. Что такое сжатие "без потерь" и сжатие "с потерями"?

3. Опишите основные алгоритмы сжатия графической информации "без потерь".

4. Опишите алгоритм сжатия методом JPEG.

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

Алгоритм JPEG в наибольшей степени пригоден для сжатия фотографий и картин, содержащих реалистичные сцены с плавными переходами яркости и цвета. Наибольшее распространение JPEG получил в цифровой фотографии и для хранения и передачи изображений с использованием сети Интернет .

С другой стороны, JPEG малопригоден для сжатия чертежей, текстовой и знаковой графики, где резкий контраст между соседними пикселами приводит к появлению заметных артефактов . Такие изображения целесообразно сохранять в форматах без потерь, таких как TIFF , GIF или PNG .

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

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

Сжатие

При сжатии изображение преобразуется из цветового пространства RGB в YCbCr (YUV). Следует отметить, что стандарт JPEG (ISO/IEC 10918-1) никак не регламентирует выбор именно YCbCr, допуская и другие виды преобразования (например, с числом компонентов , отличным от трёх), и сжатие без преобразования (непосредственно в RGB), однако спецификация JFIF (JPEG File Interchange Format, предложенная в 1991 году специалистами компании C-Cube Microsystems, и ставшая в настоящее время стандартом де-факто) предполагает использование преобразования RGB->YCbCr.

После преобразования RGB->YCbCr для каналов изображения Cb и Cr, отвечающих за цвет, может выполняться «прореживание» (subsampling ), которое заключается в том, что каждому блоку из 4 пикселов (2х2) яркостного канала Y ставятся в соответствие усреднённые значения Cb и Cr (схема прореживания «4:2:0» ). При этом для каждого блока 2х2 вместо 12 значений (4 Y, 4 Cb и 4 Cr) используется всего 6 (4 Y и по одному усреднённому Cb и Cr). Если к качеству восстановленного после сжатия изображения предъявляются повышенные требования, прореживание может выполняться лишь в каком-то одном направлении - по вертикали (схема «4:4:0») или по горизонтали («4:2:2»), или не выполняться вовсе («4:4:4»).

Стандарт допускает также прореживание с усреднением 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 последних версий включена поддержка арифметического кодирования, но с просмотром сжатых с использованием этого метода изображений могут возникнуть проблемы, поскольку многие программы просмотра не поддерживают их декодирование.

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

При сохранении изображения в JPEG-файле указывается параметр качества, задаваемый в некоторых условных единицах, например, от 1 до 100 или от 1 до 10. Большее число обычно соответствует лучшему качеству (и большему размеру сжатого файла). Однако даже при использовании наивысшего качества (соответствующего матрице квантования, состоящей из одних только единиц) восстановленное изображение не будет в точности совпадать с исходным, что связано как с конечной точностью выполнения ДКП, так и с необходимостью округления значений Y, Cb, Cr и коэффициентов ДКП до ближайшего целого. Режим сжатия Lossless JPEG, не использующий ДКП, обеспечивает точное совпадение восстановленного и исходного изображений, однако его малая эффективность (коэффициент сжатия редко превышает 2) и отсутствие поддержки со стороны разработчиков программного обеспечения не способствовали популярности Lossless JPEG.

Разновидности схем сжатия JPEG

Стандарт JPEG предусматривает два основных способа представления кодируемых данных.

Наиболее распространённым, поддерживаемым большинством доступных кодеков , является последовательное (sequential JPEG) представление данных, предполагающее последовательный обход кодируемого изображения поблочно слева направо, сверху вниз. Над каждым кодируемым блоком изображения осуществляются описанные выше операции, а результаты кодирования помещаются в выходной поток в виде единственного «скана», то есть массива кодированных данных, соответствующего последовательно пройденному («просканированному») изображению. Основной или «базовый» (baseline) режим кодирования допускает только такое представление. Расширенный (extended) режим наряду с последовательным допускает также прогрессивное (progressive JPEG) представление данных.

В случае 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 и идентификатора) и собственно данных. Такая структура файла позволяет быстро отыскать маркер с необходимыми данными (например, с длиной строки, числом строк и числом цветовых компонентов сжатого изображения).

Основные маркеры JPEG
Маркер Байты Длина Назначение Комментарии
SOI 0xFFD8 нет Начало изображения
SOF0 0xFFC0 переменный размер Начало фрейма (базовый, ДКП) Показывает что изображение кодировалось в базовом режиме с использованием ДКП и кода Хаффмана. Маркер содержит число строк и длину строки изображения (двухбайтовые поля со смещением соответственно 5 и 7 относительно начала маркера), количество компонентов (байтовое поле со смещением 8 относительно начала маркера), число бит на компонент (байтовое поле со смещением 4 относительно начала маркера), а также соотношение компонентов (например, 4:2:0).
SOF1 0xFFC1 переменный размер Начало фрейма (расширенный, ДКП, код Хаффмана) Показывает что изображение кодировалось в расширенном (extended) режиме с использованием ДКП и кода Хаффмана. Маркер содержит число строк и длину строки изображения, количество компонентов, число бит на компонент, а также соотношение компонентов (например, 4:2:0).
SOF2 0xFFC2 переменный размер Начало фрейма (прогрессивный, ДКП, код Хаффмана) Показывает что изображение кодировалось в прогрессивном режиме с использованием ДКП и кода Хаффмана. Маркер содержит число строк и длину строки изображения, количество компонентов, число бит на компонент, а также соотношение компонентов (например, 4:2:0).
DHT 0xFFC4 переменный размер Содержит таблицы Хаффмана Задает одну или более таблиц Хаффмана.
DQT 0xFFDB переменный размер Содержит таблицы квантования Задает одну или более таблиц квантования.
DRI 0xFFDD 4 байта Указывает интервал повторений Задает интервал между маркерами RST n в макроблоках.
SOS 0xFFDA переменный размер Начало сканирования Начало первого или очередного скана изображения с направлением обхода слева направо сверху вниз. Если использовался базовый режим кодирования, используется один скан. При использовании прогрессивных режимов используется несколько сканов. Маркер SOS является разделяющим между информативной (заголовком) и закодированной (собственно сжатыми данными) частями изображения.
RSTn 0xFFDn нет Перезапуск Вставляется в каждом r макроблоке, где r - интервал перезапуска DRI маркера. Не используется при отсутствии DRI маркера. n , младшие 3 бита маркера кода, циклы от 0 до 7.
APPn 0xFFEn переменный размер Задаётся приложением Например, в EXIF JPEG-файла используется маркер APP1 для хранения метаданных, расположеных в структуре, основанной на TIFF .
COM 0xFFFE переменный размер Комментарий Содержит текст комментария.
EOI 0xFFD9 нет Конец закодированной части изображения.

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

К недостаткам сжатия по стандарту JPEG следует отнести появление на восстановленных изображениях при высоких степенях сжатия характерных артефактов : изображение рассыпается на блоки размером 8x8 пикселов (этот эффект особенно заметен на областях изображения с плавными изменениями яркости), в областях с высокой пространственной частотой (например, на контрастных контурах и границах изображения) возникают артефакты в виде шумовых ореолов. Следует отметить, что стандарт JPEG (ISO/IEC 10918-1, Annex K, п. K.8) предусматривает использование специальных фильтров для подавления блоковых артефактов, но на практике подобные фильтры, несмотря на их высокую эффективность, практически не используются. Однако, несмотря на недостатки, JPEG получил очень широкое распространение из-за достаточно высокой (относительно существовавших во время его появления альтернатив) степени сжатия, поддержке сжатия полноцветных изображений и относительно невысокой вычислительной сложности .

Производительность сжатия по стандарту JPEG

Для ускорения процесса сжатия по стандарту JPEG традиционно используется распараллеливание вычислений, в частности - при вычислении ДКП. Исторически одна из первых попыток ускорить процесс сжатия с использованием такого подхода описана в опубликованной в 1993 г. статье Касперовича и Бабкина , в которой предлагалась оригинальная аппроксимация ДКП, делающая возможным эффективное распараллеливание вычислений с использованием 32-разрядных регистров общего назначения процессоров Intel 80386. Появившиеся позже более производительные вычислительные схемы использовали SIMD -расширения набора инструкций процессоров архитектуры x86. Значительно лучших результатов позволяют добиться схемы, использующие вычислительные возможности графических ускорителей (технологии NVIDIA CUDA и AMD FireStream) для организации параллельных вычислений не только ДКП, но и других этапов сжатия JPEG (преобразование цветовых пространств, run-level, статистическое кодирование и т.п.), причём для каждого блока 8х8 кодируемого или декодируемого изображения. В статье была впервые [источник? ] представлена реализация распараллеливания всех стадий алгоритма JPEG по технологии CUDA, что значительно ускорило производительность сжатия и декодирования по стандарту JPEG.

В 2010 году ученые из проекта PLANETS поместили инструкции по чтению формата JPEG в специальную капсулу, которую поместили в специальный бункер в швейцарских Альпах. Сделано это было с целью сохранения для потомков информации о популярных в начале XXI века цифровых форматах.

См. также

Примечания

Ссылки

  • Спецификация JFIF 1.02 (текстовый файл)
  • Оптимизация JPEG. Часть 1 , Часть 2 , Часть 3 .