Опрос

Какой архиватор наиболее эффективный?:

Новички

Виктор Васильев
Юрий Антонов
Сергей Андреевич
Генадий
Avanasy

Основы метода JPEG-LS

Мы уже отмечали в § 3.7.6, что мода без потерь данных метода JPEG весьма неэффективна, и часто ее даже не включают в конкретные приложения, использующие JPEG. В результате ISO в кооперации с IEC разработали новый стандарт для сжатия без потерь (и почти без потерь) непрерывно-тоновых изображений. Этот метод официально известен как рекомендация ISO/IEC CD 14495, но его принято называть JPEG-LS. Здесь рассматриваются основные принципы этого метода, который не является расширением или модификацией метода JPEG. Это совершенно новый метод, простой и быстрый. Он не использует ни DCT, ни арифметическое кодирование. Применяется слабое квантование и только в моде почти без потерь. JPEG-LS основан на идеях, развитых в [Weinberger и др. 96] для метода компрессии LOCO-I. JPEG-LS (1) изучает несколько предыдущих соседей текущего пиксела, (2) рассматривает их как контекст этого пиксела, (3) использует контекст для прогнозирования пиксела и для выбора распределения вероятностей из нескольких имеющихся, и (4) применяет это распределение для кодирования ошибки прогноза с помощью специального кода Голомба. Имеется также серийная мода, когда длина серии одинаковых пикселов кодируется подходящим образом.

Пикселы контекста а, 6, с, d, используемые для прогнозирования текущего пиксела х, показаны на рис. 3.61. Кодер изучает пикселы контекста и устанавливает, в какой моде кодировать данный пиксел х, в серийной или в регулярной. Если контекст указывает, что пикселы у и г, следующие за х, скорее всего будут совпадать, то выбирается серийная мода. В противном случае, используется регулярная мода. Если включена опция «почти без потерь», то выбор моды делается несколько иначе. Если контекст предполагает, что следующие пикселы будут почти совпадать (в соответствии с параметром допустимого отклонения NEAR), то декодер выбирает серийную моду. Если нет, то берется регулярная мода. Дальнейшее кодирование зависит от выбранной моды.

В регулярной моде кодер использует величины пикселов a, b и с для вычисления прогноза пиксела х. Этот прогноз вычитается из х, в результате чего получается ошибка прогноза, которая обозначается через Errval. Затем ошибка прогноза корректируется некоторым членом, зависящим от контекста (корректировка делается с целью компенсирования систематического отклонения прогноза), и потом она кодируется с помощью кодов Голомба. Код Голомба зависит от всех четырех пикселов контекста, а также от ошибок прогноза этих же самых пикселов (эта информация хранится в массивах А и N, которые будут использоваться в § 3.8.3). При компрессии почти без потерь ошибка прогноза еще дополнительно квантуется перед кодированием.

В серийной моде кодер начинает с пиксела х и находит в этой строке наибольшую длину серии пикселов, совпадающих с контекстным пикселом а. Кодер не расширяет эту серию за пределы текущей строки. Поскольку все символы серии совпадают с а (а этот пиксел известен декодеру), то достаточно закодировать длину серии, что делается с помощью массива J из 32 элементов (см. § 3.8.3). (При сжатии почти без потерь, кодер выбирает серию пикселов, близких к а с помощью параметра NEAR.)

Декодер мало отличается от кодера, поэтому JPEG-LS можно считать почти симметричным методом сжатия. Сжатый файл состоит из сегментов данных (содержащих коды Голомба и длины серий), сегментов маркеров (с информацией, необходимой декодеру) и просто маркеров (в качестве которых используются некоторые зарезервированные маркеры JPEG). Маркером является байт из одних единиц, за которым следует специальный код, сигнализирующий о начале нового сегмента. Если за маркером следует байт, у которого старший бит равен 1, то этот байт является началом сегмента маркеров. В противном случае, начинается сегмент данных.