Обзор алгоритмов сжатия с потерями
Алгоритм JPEG2000
Алгоритм JPEG-2000 разработан той же группой экспертов в области фотографии, что и JPEG. Формирование JPEG как международного стандарта было закончено в 1992 году. В 1997 стало ясно, что необходим новый, более гибкий и мощный стандарт, который и был доработан к зиме 2000 года. Основные отличия алгоритма в JPEG 2000 от алгоритма в JPEG заключаются в следующем:
- Лучшее качество изображения при сильной степени сжатия. Или, что то же самое, большая степень сжатия при том же качестве для высоких степеней сжатия.
- Поддержка кодирования отдельных областей с лучшим качеством. Известно, что отдельные области изображения критичны для восприятия человеком (например, глаза на фотографии), в то время как качеством других можно пожертвовать (например, задний план). При "ручной" оптимизации увеличение степени сжатия проводится до тех пор, пока не будет потеряно качество в какой-то важной части изображения. Сейчас появляется возможность задать качество в критичных областях, сжав остальные области сильнее, т.е. мы получаем еще большую окончательную степень сжатия при субъективно равном качестве изображения.
- Основной алгоритм сжатия заменен на wavelet. Помимо указанного повышения степени сжатия это позволило избавиться от 8-пиксельной блочности, возникающей при повышении степени сжатия. Кроме того, плавное проявление изображения теперь изначально заложено в стандарт.
- Для повышения степени сжатия в алгоритме используется арифметическое сжатие. Изначально в стандарте JPEG также было заложено арифметическое сжатие, однако позднее оно было заменено менее эффективным сжатием по Хаффману, поскольку арифметическое сжатие было защищено патентами. Сейчас срок действия основного патента истек, и появилась возможность улучшить алгоритм.
- Поддержка сжатия без потерь. Помимо привычного сжатия с потерями новый JPEG теперь поддерживает и сжатие без потерь. Таким образом, становится возможным использование JPEG для сжатия медицинских изображений, в полиграфии, при сохранении текста под распознавание OCR системами и т.д.
- Поддержка сжатия однобитных (2-цветных) изображений. Для сохранения однобитных изображений (рисунки тушью, отсканированный текст и т.п.) ранее повсеместно рекомендовался формат GIF, поскольку сжатие с использованием ДКП весьма неэффективно к изображениям с резкими переходами цветов. В JPEG при сжатии 1-битная картинка приводилась к 8-битной, т.е. увеличивалась в 8 раз, после чего делалась попытка сжимать, нередко менее чем в 8 раз. Сейчас можно рекомендовать JPEG 2000 как универсальный алгоритм.
- На уровне формата поддерживается прозрачность. Плавно накладывать фон при создании WWW-страниц теперь можно не только в GIF, но и в JPEG 2000. Кроме того, поддерживается не только 1 бит прозрачности (пиксель прозрачен/непрозрачен), а отдельный канал, что позволит задавать плавный переход от непрозрачного изображения к прозрачному фону.
Кроме того, на уровне формата поддерживаются включение в изображение информации о копирайте, поддержка устойчивости к битовым ошибкам при передаче и широковещании, можно запрашивать для декомпрессии или обработки внешние средства (plug-ins), можно включать в изображение его описание, информацию для поиска и т.д.
Идея алгоритма
Базовая схема JPEG-2000 очень похожа на базовую схему JPEG. Отличия заключаются в следующем:
- Вместо дискретного косинусного преобразования (DCT) используется дискретное вэйвлет-преобразование (DWT).
- Вместо кодирования по Хаффману используется арифметическое сжатие.
- В алгоритм изначально заложено управление качеством областей изображения.
- Не используется явно дискретизация компонент U и V после преобразования цветовых пространств, поскольку при DWT можно достичь того же результата, но более аккуратно.
Конвейер операций, используемый в алгоритме JPEG-2000.
Рассмотрим алгоритм по шагам.
Шаг 1.
В JPEG-2000 предусмотрен сдвиг яркости (DC level shift) каждой компоненты (RGB) изображения перед преобразованием в YUV. Это делается для выравнивания динамического диапазона (приближения к 0 гистограммы частот), что приводит к увеличению степени сжатия. Формулу преобразования можно записать как:
I'(x,y) = I(x,y) - 2ST-1
Значение степени ST для как каждой компоненты R, G и B свое (определяется при сжатии компрессором). При восстановлении изображения выполняется обратное преобразование:
I'(x,y) = I(x,y) + 2ST-1
Шаг 2.
Переводим изображение из цветового пространства RGB, с компонентами, отвечающими за красную (Red), зеленую (Green) и синюю (Blue) составляющие цвета точки, в цветовое пространство YUV. Этот шаг аналогичен JPEG (см. матрицы преобразования в описании JPEG), за тем исключением, что кроме преобразования с потерями предусмотрено также и преобразование без потерь. Его матрица выглядит так:
Обратное преобразование осуществляется с помощью обратной матрицы:
Шаг 3.
Дискретное wavelet-преобразование (DWT) также может быть двух видов – для случая сжатия с потерями и для сжатия без потерь. Его коэффициенты задаются таблицами, приведенными ниже. Для сжатия с потерями коэффициенты выглядят как:
Коэффициенты при упаковкеi | Низкочастотные коэффициенты hL(i) | Высокочастотные коэффициенты hH(i) |
0 | 1.115087052456994 | 0.6029490182363579 |
+/- 1 | 0.5912717631142470 | -0.2668641184428723 |
+/- 2 | -0.05754352622849957 | -0.07822326652898785 |
+/- 3 | -0.09127176311424948 | 0.01686411844287495 |
+/- 4 | 0 | 0.02674875741080976 |
Другие i | 0 | 0 |
Коэффициенты при распаковкеi | Низкочастотные коэффициенты gL(i) | Высокочастотные коэффициенты gH(i) |
0 | 0.6029490182363579 | 1.115087052456994 |
+/- 1 | -0.2668641184428723 | 0.5912717631142470 |
+/- 2 | -0.07822326652898785 | -0.05754352622849957 |
+/- 3 | 0.01686411844287495 | -0.09127176311424948 |
+/- 4 | 0.02674875741080976 | 0 |
Другие i | 0 | 0 |
Для сжатия без потерь коэффициенты задаются как:
Коэффициенты при упаковкеi | Низкочастотные коэффициенты hL(i) | Высокочастотные коэффициенты hH(i) |
0 | 6/8 | 1 |
+/- 1 | -2/8 | -1/2 |
+/- 2 | -1/8 | 0 |
Коэффициенты при распаковкеi | Низкочастотные коэффициенты gL(i) | Высокочастотные коэффициенты gH(i) |
0 | 1 | 6/8 |
+/- 1 | 1/2 | -2/8 |
+/- 2 | 0 | -1/8 |
Само преобразование в одномерном случае представляет собой скалярное произведение коэффициентов фильтра на строку преобразуемых значений (в нашем случае – на строку изображения). При этом четные выходящие значения формируются с помощью низкочастотного преобразования, а нечетные – с помощью высокочастотного:
Поскольку большинство hL(i), кроме окрестности i=0, равны 0, то можно переписать приведенные формулы с меньшим количеством операций. Для простоты рассмотрим случай сжатия без потерь.
Легко показать, что данную запись можно эквивалентно переписать, уменьшив еще втрое количество операций умножения и деления (однако теперь необходимо будет подсчитать сначала все нечетные у). Добавим также операции округления до ближайшего целого, не превышающего заданное число а, обозначаемые как [a]:
Шаг 4.
Так же, как и в алгоритме JPEG, после DWT применяется квантование. Коэффициенты квадрантов делятся на заранее заданное число. При увеличении этого числа снижается динамический диапазон коэффициентов, они становятся ближе к 0, и мы получаем большую степень сжатия. Варьируя эти числа для разных уровней преобразования, для разных цветовых компо¬нент и для разных квадрантов, мы очень гибко управляем степенью потерь в изображении. Рассчитанные в компрессоре оптимальные коэффициенты квантования передаются в декомпрессор для однозначной распаковки.
Шаг 5.
Для сжатия получающихся массивов данных в JPEG 2000 используется вариант арифметического сжатия, называемый MQ-кодер, прообраз которого рассматривался еще в стандарте JPEG, но реально не использовался из-за патентных ограничений.
Области повышенного качества
Основная задача – повышение степени сжатия изображений. Когда практически достигнут предел сжатия изображения в целом и различные методы дают очень небольшой выигрыш, можно существенно (в разы) увеличить степень сжатия за счет изменения качества разных участков изображения.
Проблемой этого подхода является то, что необходимо каким-то образом получать расположение наиболее важных для человека участков изображения. Например, таким участком на фотографии человека является лицо, а на лице — глаза. Если при сжатии портрета с большими потерями будут размыты предметы, находящиеся на заднем плане – это будет несущественно. Однако, если будет размыто лицо или глаза – экспертная оценка степени потерь будет хуже.
Работы по автоматическому выделению таких областей активно ведутся. В частности, созданы алгоритмы автоматического выделения лиц на изображениях. Продолжаются исследования методов выделения наиболее значимых (при анализе изображения мозгом человека) контуров и т.д. Однако очевидно, что универсальный алгоритм в ближайшее время создан не будет, поскольку для этого требуется построить полную схему восприятия изображений мозгом человека.
На сегодня вполне реально применение полуавтоматических систем, в которых качество областей изображения будет задаваться интерактивно. Данный подход уменьшает количество возможных областей применения модифицированного алгоритма, но позволяет достичь большей степени сжатия.
Такой подход логично применять, если:
- Для приложения должна быть критична (максимальна) степень сжатия, причем настолько, что возможен индивидуальный подход к каждому изображению.
- Изображение сжимается один раз, а разжимается множество раз.
В качестве примеров приложений, удовлетворяющим этим ограничениям, можно привести практически все мультимедийные продукты на CD-ROM. И для CD-ROM энциклопедий, и для игр важно записать на диск как можно больше информации, а графика, как правило, занимает до 70% всего объема диска. При этом технология производства дисков позволяет сжимать каждое изображение индивидуально, максимально повышая степень сжатия.
Интересным примером являются WWW-сервера. Для них тоже, как правило, выполняются оба изложенных выше условия. При этом совершенно не обязательно индивидуально подходить к каждому изображению, поскольку по статистике 10% изображений будут запрашиваться 90% раз. Т.е. для крупных спра¬вочных или игровых серверов появляется возможность уменьшать время загрузки изображений и степень загруженности каналов связи адаптивно.
В JPEG-2000 используется однобитное изображение-маска, задающее повышение качества в данной области изображения. Поскольку за качество областей у нас отвечают коэффициенты DWT преобразования во 2, 3 и 4 квадрантах, то маска преобразуется таким образом, чтобы указывать на все коэффициенты, соответствующие областям повышения качества.
Характеристики алгоритма JPEG-2000:
Степень сжатия: 2-200 (Задается пользователем). Возможно сжатие без потерь.
Класс изображений: Полноцветные 24-битные изображения. Изображения в градациях серого без резких переходов цветов (фотографии). 1-битные изображения.
Симметричность: 1-1,5
Характерные особенности: Позволяет удалять визуально неприятные эффекты, повышая качество в отельных областях. При сильном сжатии появляется блочность и большие волны в вертикальном и горизонтальном направлениях.