Введение
Дополнение к стандарту JPEG
Lossless JPEG is a 1993 addition to JPEG standard by the Joint Photographic Experts Group to enable lossless compression. However, the term may also be used to refer to all lossless compression schemes developed by the group, including JPEG 2000, JPEG LS and JPEG XL. Lossless JPEG was developed as a late addition to JPEG in 1993, using a completely different technique from the lossy JPEG standard. It uses a predictive scheme based on the three nearest (causal) neighbors (upper, left, and upper left), and entropy coding is used on the prediction error. The standard Independent JPEG Group libraries cannot encode or decode it, but Ken Murchison of Oceana Matrix Ltd. wrote a patch that extends the IJG library to handle lossless JPEG. Lossless JPEG has some popularity in medical imaging, and is used in DNG and some digital cameras to compress raw images, but otherwise was never widely adopted. Adobe's DNG SDK provides a software library for encoding and decoding lossless JPEG with up to 16 bits per sample. ISO/IEC Joint Photography Experts Group maintains a reference software implementation which can encode both base JPEG (ISO/IEC 10918 1 and 18477 1) and JPEG XT extensions (ISO/IEC 18477 Parts 2 and 6 9), as well as JPEG LS (ISO/IEC 14495).
Lossless JPEG — это дополнение к стандарту JPEG, разработанное в 1993 году Объединенной группой экспертов по фотографии (Joint Photographic Experts Group) для обеспечения сжатия без потерь. Однако этот термин также может использоваться для обозначения всех схем сжатия без потерь, разработанных этой группой, включая JPEG 2000, JPEG LS и JPEG XL. Lossless JPEG был разработан как позднее дополнение к JPEG в 1993 году, с использованием принципиально иной технологии по сравнению со стандартом JPEG с потерями. Он использует метод прогнозирования, основанный на трех ближайших (каузальных) соседних пикселях (верхнем, левом и верхнем левом), а для ошибки прогнозирования применяется энтропийное кодирование. Стандартные библиотеки Independent JPEG Group не поддерживают кодирование или декодирование Lossless JPEG, однако Кен Мурчисон из Oceana Matrix Ltd. разработал патч, расширяющий функциональность библиотеки IJG для работы с Lossless JPEG. Lossless JPEG получил некоторую популярность в медицинской визуализации и используется в формате DNG и некоторых цифровых камерах для сжатия необработанных изображений, но в целом не получил широкого распространения. SDK DNG от Adobe предоставляет программную библиотеку для кодирования и декодирования Lossless JPEG с глубиной до 16 бит на канал. ISO/IEC Joint Photography Experts Group поддерживает эталонную программную реализацию, способную кодировать как базовый JPEG (ISO/IEC 10918-1 и 18477-1), так и расширения JPEG XT (ISO/IEC 18477 Части 2 и 6) и JPEG LS (ISO/IEC 14495).
Lossless JPEG is a 1993 addition to JPEG standard by the Joint Photographic Experts Group to enable lossless compression. However, the term may also be used to refer to all lossless compression schemes developed by the group, including JPEG 2000, JPEG LS and JPEG XL. Lossless JPEG was developed as a late addition to JPEG in 1993, using a completely different technique from the lossy JPEG standard. It uses a predictive scheme based on the three nearest (causal) neighbors (upper, left, and upper left), and entropy coding is used on the prediction error. The standard Independent JPEG Group libraries cannot encode or decode it, but Ken Murchison of Oceana Matrix Ltd. wrote a patch that extends the IJG library to handle lossless JPEG. Lossless JPEG has some popularity in medical imaging, and is used in DNG and some digital cameras to compress raw images, but otherwise was never widely adopted. Adobe's DNG SDK provides a software library for encoding and decoding lossless JPEG with up to 16 bits per sample. ISO/IEC Joint Photography Experts Group maintains a reference software implementation which can encode both base JPEG (ISO/IEC 10918 1 and 18477 1) and JPEG XT extensions (ISO/IEC 18477 Parts 2 and 6 9), as well as JPEG LS (ISO/IEC 14495).
Общее описание
JPEG LS — это стандарт сжатия без потерь/почти без потерь для изображений с непрерывной тональностью. Его официальное обозначение — ISO 14495 1/ITU T.87. Это простой и эффективный базовый алгоритм, состоящий из двух независимых и различных этапов, называемых моделированием и кодированием. JPEG LS был разработан с целью создания стандарта сжатия изображений без потерь и почти без потерь, отличающегося низкой вычислительной сложностью и обеспечивающего более высокую эффективность сжатия по сравнению с JPEG без потерь. Он был разработан, поскольку в то время стандарт JPEG без потерь, основанный на кодировании Хаффмана, и другие стандарты имели ограниченную производительность сжатия. Полная декорреляция не может быть достигнута за счет энтропии первого порядка остатков предсказания, используемой в этих менее эффективных стандартах. JPEG LS, напротив, способен достичь хорошей декорреляции. Первая часть этого стандарта была завершена в 1999 году. Вторая часть, выпущенная в 2003 году, представила расширения, такие как арифметическое кодирование. В основе JPEG LS лежит алгоритм LOCO I, который использует предсказание, остаточное моделирование и контекстное кодирование остатков. Большая часть низкой вычислительной сложности этого метода обусловлена предположением, что остатки предсказания подчиняются двустороннему геометрическому распределению (также известному как дискретное распределение Лапласа) и использованием кодов, подобных кодам Голомба, которые, как известно, приблизительно оптимальны для геометрических распределений. Помимо сжатия без потерь, JPEG LS также предоставляет режим с потерями ("почти без потерь"), в котором кодировщик может контролировать максимальную абсолютную ошибку.
Выступление
Сжатие JPEG LS обычно значительно быстрее, чем JPEG 2000, и намного превосходит оригинальный без потерь стандарт JPEG. Сжатие JPEG LS обычно немного уступает JPEG 2000, но это сильно зависит от содержимого изображения. Декомпрессия JPEG LS обычно значительно быстрее, чем JPEG 2000, однако это зависит от конкретных программных реализаций декодеров. Это справедливо для реализаций с открытым исходным кодом.
Алгоритм LOCO-I
Перед кодированием на этапе моделирования необходимо выполнить два важных шага: декорреляция (предсказание) и моделирование ошибок.
Декорреляция/предсказание
В алгоритме LOCO I примитивное обнаружение горизонтальных или вертикальных краев достигается путем анализа соседних пикселей текущего пикселя X, как показано на рис. 3. Пиксель, обозначенный B, используется в случае вертикального края, а пиксель, расположенный в A, – в случае горизонтального края. Этот простой предиктор называется предиктором обнаружения медианного края (MED) или предиктором LOCO I. Пиксель X предсказывается предиктором LOCO I на основе следующих оценок:
Три простых предиктора выбираются в соответствии со следующими условиями: (1) он склонен выбирать B в случаях, когда слева от X существует вертикальный край, (2) A в случаях, когда над X существует горизонтальный край, или (3) A + B – C, если край не обнаружен.
Контекстная моделирование
Алгоритм JPEG LS оценивает условные математические ожидания ошибок прогнозирования, используя соответствующие выборочные средние в каждом контексте Ctx. Цель контекстного моделирования заключается в том, чтобы использовать структуры более высокого порядка, такие как текстурные узоры и локальная активность изображения, посредством контекстного моделирования ошибки прогнозирования. Контексты определяются путем вычисления разностей между соседними значениями, которые представляют собой локальный градиент: локальный градиент отражает уровень активности, такой как гладкость и наличие резких переходов в соседних значениях. Следует отметить, что эти разности тесно связаны со статистическим поведением ошибок прогнозирования. Каждая из разностей, найденных в вышеуказанном уравнении, затем квантуется в приблизительно равновероятные и смежные области. Для JPEG LS разности g1, g2 и g3 квантуются в 9 областей, индексированных от -4 до 4. Цель квантования – максимизировать взаимную информацию между текущим значением выборки и его контекстом, чтобы можно было зафиксировать зависимости высокого порядка. Контексты можно получить, основываясь на предположении, что после объединения контекстов с положительными и отрицательными знаками, общее количество контекстов равно контекстам. Оценка смещения может быть получена путем деления кумулятивных ошибок прогнозирования в каждом контексте на количество появлений контекста. В алгоритме LOCO I эта процедура модифицирована и улучшена таким образом, чтобы уменьшить количество вычитаний и сложений. Процедура вычисления смещения без деления продемонстрирована в. Уточнение прогноза может быть выполнено путем применения этих оценок в механизме обратной связи, который устраняет смещение прогноза в различных контекстах.
The local gradient reflects the level of activities such as smoothness and edginess of the neighboring samples. Notice that these differences are closely related to the statistical behavior of prediction errors. Each one of the differences found in the above equation is then quantized into roughly equiprobable and connected regions. For JPEG LS, the differences g1, g2, and g3 are quantized into 9 regions and the region are indexed from −4 to 4. The purpose of the quantization is to maximize the mutual information between the current sample value and its context such that the high order dependencies can be captured. One can obtain the contexts based on the assumption that
After merging contexts of both positive and negative signs, the total number of contexts is contexts. A bias estimation could be obtained by dividing cumulative prediction errors within each context by a count of context occurrences. In LOCO I algorithm, this procedure is modified and improved such that the number of subtractions and additions are reduced. The division free bias computation procedure is demonstrated in Prediction refinement can then be done by applying these estimates in a feedback mechanism which eliminates prediction biases in different contexts.
Кодирование корректированных остатков прогноза
В обычном режиме JPEG LS стандарт использует коды Голомба-Райса, представляющие собой способ кодирования неотрицательных длин серий. Особый случай с оптимальным значением кодирования 2k обеспечивает более простые процедуры кодирования.
Кодирование длины пробега в однородных районах
Поскольку коды Голомба–Райса довольно неэффективны для кодирования распределений с низкой энтропией, так как скорость кодирования составляет не менее одного бита на символ, может возникать значительная избыточность, поскольку гладкие области изображения могут быть закодированы с использованием менее одного бита на символ. Чтобы избежать превышения длины кода над энтропией, можно использовать расширение алфавита, которое кодирует блоки символов вместо отдельных символов. Это распределяет избыточную длину кодирования по множеству символов. Это режим "последовательности" в JPEG LS, который выполняется при обнаружении плоской или гладкой области контекста, характеризующейся нулевыми градиентами. Ожидается последовательность символов "a", и конец последовательности наступает при появлении нового символа или достижении конца строки. Длина всей последовательности кодируется, после чего кодировщик возвращается в "обычный" режим.
JPEG 2000
JPEG 2000 включает в себя режим без потерь, основанный на специальном целочисленном вейвлет-фильтре (биортогональном 3/5). Режим без потерь в JPEG 2000 работает медленнее и часто демонстрирует худшие коэффициенты сжатия, чем JPEG LS на синтетических и составных изображениях, но показывает лучшие результаты по сравнению с реализацией JPEG LS от UBC на фотографиях, сделанных цифровыми камерами. JPEG 2000 также обладает масштабируемостью, прогрессивностью и более широкой поддержкой.
JPEG XT
JPEG XT включает режим безпотерьного целочисленного дискретного косинусного преобразования (DCT), основанный на волновом сжатии из JPEG 2000.
JPEG XL
JPEG XL включает в себя безпотерянный, почти безпотерянный и адаптивный режим под названием Modular, который опционально использует модифицированный преобразование Хаара (называемое "squeeze") и также применяется для кодирования DC-компоненты изображения (в масштабе 1:8) в режиме VarDCT, а также различных вспомогательных изображений, таких как поля адаптивной квантизации или дополнительные каналы, например альфа-канал.