JPEG без потерь — это дополнение к стандарту JPEG , разработанное Объединенной группой экспертов по фотографии в 1993 году и обеспечивающее сжатие без потерь . Однако этот термин также может использоваться для обозначения всех схем сжатия без потерь, разработанных группой, включая JPEG 2000 , JPEG-LS и JPEG XL .
JPEG без потерь был разработан как позднее дополнение к JPEG в 1993 году с использованием совершенно другой технологии, чем стандарт JPEG с потерями. Он использует схему прогнозирования, основанную на трех ближайших (причинных) соседях (верхнем, левом и верхнем левом), а для ошибки прогнозирования используется энтропийное кодирование . Стандартные библиотеки Independent JPEG Group не могут его кодировать или декодировать, но Кен Мерчисон из Oceana Matrix Ltd. написал патч, который расширяет библиотеку IJG для обработки JPEG без потерь. [1] JPEG без потерь имеет некоторую популярность в медицинской визуализации и используется в DNG и некоторых цифровых камерах для сжатия необработанных изображений, но в остальном он никогда не получил широкого распространения. Adobe DNG SDK предоставляет программную библиотеку для кодирования и декодирования JPEG без потерь с длиной до 16 бит на образец.
Объединенная группа экспертов по фотографии ISO/IEC поддерживает эталонную реализацию программного обеспечения, которая может кодировать как базовый JPEG (ISO/IEC 10918-1 и 18477-1), так и расширения JPEG XT (ISO/IEC 18477, части 2 и 6-9), а также JPEG-LS (ИСО/МЭК 14495). [2]
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, используется в случае горизонтального края. Этот простой предиктор называется предиктором Median Edge Detection (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 стандарт использует коды Голомба – Райса , которые позволяют кодировать неотрицательные длины серий. Его особый случай с оптимальным значением кодирования 2 k позволяет упростить процедуры кодирования.
Поскольку коды Голомба-Райса совершенно неэффективны для кодирования распределений с низкой энтропией, поскольку скорость кодирования составляет не менее одного бита на символ, может возникнуть значительная избыточность, поскольку гладкие области изображения могут быть закодированы со скоростью менее 1 бита на символ. Чтобы избежать превышения длины кода над энтропией, можно использовать расширение алфавита, которое кодирует блоки символов вместо кодирования отдельных символов. Это распределяет избыточную длину кодирования на множество символов. Это «рабочий» режим JPEG-LS, и он выполняется, как только обнаруживается плоская или гладкая контекстная область, характеризующаяся нулевыми градиентами. Ожидается движение западного символа «а», и конец пробега происходит, когда появляется новый символ или достигается конец строки. Вся длина закодируется, и кодер вернется в «обычный» режим.
JPEG 2000 включает режим без потерь, основанный на специальном целочисленном вейвлет- фильтре (биортогональный 3/5). Режим без потерь JPEG 2000 работает медленнее и часто имеет худшую степень сжатия, чем JPEG-LS для искусственных и составных изображений [12] [13], но работает лучше, чем реализация JPEG-LS UBC на изображениях цифровой камеры. [14] JPEG 2000 также масштабируем, прогрессивен и более широко применяется. [ нужна цитата ]
JPEG XT включает режим преобразования целого числа в целое число без потерь, основанный на вейвлет-сжатии из JPEG 2000 .
JPEG XL включает в себя режим без потерь/почти без потерь/отзывчивый режим, называемый Modular , который дополнительно использует модифицированное преобразование Хаара (так называемое «сжатие») и который также используется для кодирования изображения постоянного тока (масштаб 1:8) в режиме VarDCT, а также различных вспомогательные изображения, такие как поля адаптивного квантования или дополнительные каналы, такие как альфа . [15]
Несколько человек заинтересовались моим патчем, который добавляет поддержку 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)