Lossless JPEG — это дополнение к стандарту JPEG, добавленное в 1993 году Объединенной группой экспертов по фотографии для обеспечения сжатия без потерь . Однако этот термин может также использоваться для обозначения всех схем сжатия без потерь, разработанных этой группой, включая JPEG 2000 , JPEG-LS и JPEG XL .
Lossless JPEG был разработан как позднее дополнение к JPEG в 1993 году, используя совершенно иную технику, чем стандартный JPEG с потерями. Он использует предиктивную схему, основанную на трех ближайших (причинных) соседях (верхний, левый и верхний левый), а энтропийное кодирование используется для ошибки прогнозирования. Стандартные библиотеки Independent JPEG Group не могут кодировать или декодировать его, но Кен Мерчисон из Oceana Matrix Ltd. написал патч, который расширяет библиотеку IJG для обработки lossless JPEG. [1] Lossless JPEG имеет некоторую популярность в медицинской визуализации и используется в DNG и некоторых цифровых камерах для сжатия необработанных изображений, но в остальном никогда не был широко принят. DNG SDK от Adobe предоставляет программную библиотеку для кодирования и декодирования lossless JPEG с разрешением до 16 бит на выборку.
Объединенная группа экспертов по фотографии ISO/IEC поддерживает реализацию эталонного программного обеспечения, которое может кодировать как базовый JPEG (ISO/IEC 10918-1 и 18477-1), так и расширения JPEG XT (ISO/IEC 18477 части 2 и 6-9), а также JPEG-LS (ISO/IEC 14495). [2]
Lossless JPEG [3] на самом деле является режимом работы JPEG. Этот режим существует, поскольку форма на основе дискретного косинусного преобразования (DCT) не может гарантировать, что вход кодера будет точно соответствовать выходу декодера. В отличие от режима с потерями, который основан на DCT, процесс кодирования без потерь использует простую модель предиктивного кодирования, называемую дифференциальной импульсно-кодовой модуляцией (DPCM). Это модель, в которой предсказания значений выборок оцениваются из соседних выборок, которые уже закодированы в изображении. Большинство предикторов берут среднее значение выборок непосредственно выше и левее целевого образца. DPCM кодирует различия между предсказанными выборками вместо того, чтобы кодировать каждую выборку независимо. Различия между одной выборкой и следующей обычно близки к нулю. Типичный кодер DPCM показан на рис. 1. Блок на рисунке действует как хранилище текущей выборки, которая позже станет предыдущей выборкой.
Основные этапы режима работы без потерь изображены на рис. 2. В этом процессе предиктор объединяет до трех соседних образцов в A, B и C, показанных на рис. 3, чтобы создать прогноз значения образца в позиции, обозначенной X. Три соседних образца должны быть уже закодированными образцами. Любой из предикторов, показанных в таблице ниже, может быть использован для оценки образца, расположенного в точке X. [4] Может быть использован любой из восьми предикторов, перечисленных в таблице. Обратите внимание, что выборки 1, 2 и 3 являются одномерными предикторами, а выборки 4, 5, 6 и 7 являются двумерными предикторами. Первое значение выбора в таблице, ноль, используется только для дифференциального кодирования в иерархическом режиме работы. После того, как все образцы предсказаны, различия между образцами могут быть получены и закодированы энтропией без потерь с использованием кодирования Хаффмана или арифметического кодирования .
Обычно сжатие с использованием режима работы без потерь позволяет достичь коэффициента сжатия около 2:1 для цветных изображений. [5] Этот режим довольно популярен в области медицинской визуализации и определен как опция в стандарте DNG, но в остальном он не очень широко используется из-за сложности выполнения арифметических операций со значениями 10, 12 или 14 бит/пиксель на типичном встроенном 32-битном процессоре и небольшого полученного выигрыша в пространстве. [ необходима ссылка ]
JPEG-LS — это стандарт сжатия без потерь или почти без потерь для изображений с непрерывным тоном. [6] Его официальное обозначение — ISO-14495-1/ITU-T.87. [7] Это простой и эффективный базовый алгоритм, который состоит из двух независимых и отдельных этапов, называемых моделированием и кодированием. JPEG-LS был разработан с целью предоставления стандарта сжатия изображений без потерь и почти без потерь с низкой сложностью, который мог бы обеспечить лучшую эффективность сжатия, чем JPEG без потерь. Он был разработан, потому что в то время стандарт сжатия без потерь JPEG на основе кодирования Хаффмана и другие стандарты были ограничены в своих характеристиках сжатия. Полная декорреляция не может быть достигнута с помощью энтропии первого порядка остатков предсказания, используемых этими низшими стандартами. JPEG-LS, с другой стороны, может получить хорошую декорреляцию. [8] [9] Часть 1 этого стандарта была завершена в 1999 году. Часть 2, выпущенная в 2003 году, представила такие расширения, как арифметическое кодирование . Ядро JPEG-LS основано на алгоритме LOCO-I [10] , который опирается на прогнозирование, моделирование остатков и контекстное кодирование остатков. Большая часть низкой сложности этой техники исходит из предположения, что остатки прогнозирования следуют двухстороннему геометрическому распределению (также называемому дискретным распределением Лапласа ), и из использования кодов типа Голомба , которые, как известно, приблизительно оптимальны для геометрических распределений. Помимо сжатия без потерь, JPEG-LS также обеспечивает режим с потерями («почти без потерь»), где максимальная абсолютная ошибка может контролироваться кодером.
Перед кодированием необходимо выполнить два основных шага на этапе моделирования: декорреляцию (прогнозирование) и моделирование ошибок.
В алгоритме LOCO-I примитивное обнаружение горизонтальных или вертикальных краев достигается путем изучения соседних пикселей текущего пикселя X, как показано на рис. 3. Пиксель, помеченный как B, используется в случае вертикального края, а пиксель, расположенный в точке A, используется в случае горизонтального края. Этот простой предиктор называется предиктором обнаружения медианного края (MED) [11] или предиктором 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 эта процедура модифицирована и улучшена таким образом, что количество вычитаний и добавлений сокращается. Процедура вычисления смещения без деления продемонстрирована в [2]. Затем можно выполнить уточнение предсказания, применяя эти оценки в механизме обратной связи, который устраняет смещения предсказания в различных контекстах.
В обычном режиме JPEG-LS стандарт использует коды Голомба–Райса , которые являются способом кодирования неотрицательных длин серий. Его особый случай с оптимальным значением кодирования 2k позволяет упростить процедуры кодирования.
Поскольку коды Голомба-Райса довольно неэффективны для кодирования распределений с низкой энтропией, поскольку скорость кодирования составляет не менее одного бита на символ, может быть получена значительная избыточность, поскольку гладкие области изображения могут быть закодированы менее чем с 1 битом на символ. Чтобы избежать избыточной длины кода по сравнению с энтропией, можно использовать расширение алфавита, которое кодирует блоки символов вместо кодирования отдельных символов. Это распределяет избыточную длину кодирования по многим символам. Это режим «run» JPEG-LS, и он выполняется после обнаружения плоской или гладкой области контекста, характеризующейся нулевыми градиентами. Ожидается прогон западного символа «a», и конец прогона происходит, когда встречается новый символ или достигается конец строки. Кодируется общий прогон длины, и кодер возвращается в «обычный» режим.
JPEG 2000 включает режим без потерь, основанный на специальном целочисленном вейвлет- фильтре (биортогональном 3/5). Режим без потерь JPEG 2000 работает медленнее и часто имеет худшие коэффициенты сжатия , чем JPEG-LS на искусственных и составных изображениях [12] [13], но работает лучше, чем реализация JPEG-LS в UBC на снимках с цифровой камеры. [14] JPEG 2000 также масштабируемый, прогрессивный и более широко применяемый. [ необходима ссылка ]
JPEG XT включает режим преобразования DCT без потерь «целое число в целое», основанный на вейвлет-сжатии из JPEG 2000. [ необходима ссылка ]
JPEG XL включает в себя режим без потерь/почти без потерь/адаптивный режим, называемый Modular , который опционально использует модифицированное преобразование Хаара (называемое «сжатием») и который также используется для кодирования изображения DC (масштаб 1:8) в режиме VarDCT, а также различных вспомогательных изображений, таких как адаптивные поля квантования или дополнительные каналы, такие как альфа . [15]
заинтересовал мой патч, который добавляет поддержку lossless JPEG (согласно оригинальной спецификации — не JPEG-LS) в libjpeg v6b. Я решил сделать этот патч доступным через мой ftp-сайт (ftp://ftp.oceana.com/pub/ljpeg-6b.tar.gz).
{{cite newsgroup}}
: Внешняя ссылка в |quote=
( помощь ){{cite web}}
: CS1 maint: archived copy as title (link){{cite web}}
: CS1 maint: archived copy as title (link)