Алгоритмы сжатия изображений
Алгоритм JPEG 2000
Алгоритм JPEG-2000 разработан той же группой экспертов в области фотографии, что и JPEG. Формирование JPEG как международного стандарта было закончено в 1992 году. В 1997 стало ясно, что необходим новый, более гибкий и мощный стандарт, который и был доработан к зиме 2000 года. Основные отличия алгоритма в JPEG 2000 от алгоритма в JPEG заключаются в следующем:
- Лучшее качество изображения при сильной степени сжатия. Или, что то же самое, большая степень сжатия при том же качестве для высоких степеней сжатия. Фактически это означает заметное уменьшение размеров графики "Web-качества", используемой большинством сайтов.
- Поддержка кодирования отдельных областей с лучшим качеством. Известно, что отдельные области изображения критичны для восприятия человеком (например, глаза на фотографии), в то время как качеством других можно пожертвовать (например, задний план). При "ручной" оптимизации увеличение степени сжатия проводится до тех пор, пока не будет потеряно качество в какой-то важной части изображения. Сейчас появляется возможность задать качество в критичных областях, сжав остальные области сильнее, т.е. мы получаем еще большую окончательную степень сжатия при субъективно равном качестве изображения.
- Основной алгоритм сжатия заменен на wavelet. Помимо указанного повышения степени сжатия это позволило избавиться от 8-пиксельной блочности, возникающей при повышении степени сжатия. Кроме того, плавное проявление изображения теперь изначально заложено в стандарт (Progressive JPEG, активно применяемый в Интернет, появился много позднее JPEG).
- Для повышения степени сжатия в алгоритме используется арифметическое сжатие. Изначально в стандарте JPEG также было заложено арифметическое сжатие, однако позднее оно было заменено менее эффективным сжатием по Хаффману, поскольку арифметическое сжатие было защищено патентами. Сейчас срок действия основного патента истек, и появилась возможность улучшить алгоритм.
- Поддержка сжатия без потерь. Помимо привычного сжатия с потерями новый JPEG теперь будет поддерживать и сжатие без потерь. Таким образом, становится возможным использование JPEG для сжатия медицинских изображений, в полиграфии, при сохранении текста под распознавание OCR системами и т.д.
- Поддержка сжатия однобитных (2-цветных) изображений. Для сохранения однобитных изображений (рисунки тушью, отсканированный текст и т.п.) ранее повсеместно рекомендовался формат GIF, поскольку сжатие с использованием ДКП весьма неэффективно к изображениям с резкими переходами цветов. В JPEG при сжатии 1-битная картинка приводилась к 8-битной, т.е. увеличивалась в 8 раз, после чего делалась попытка сжимать, нередко менее чем в 8 раз. Сейчас можно рекомендовать JPEG 2000 как универсальный алгоритм.
- На уровне формата поддерживается прозрачность. Плавно накладывать фон при создании WWW страниц теперь можно будет не только в GIF, но и в JPEG 2000. Кроме того, поддерживается не только 1 бит прозрачности (пиксел прозрачен/непрозрачен), а отдельный канал, что позволит задавать плавный переход от непрозрачного изображения к прозрачному фону.
Кроме того, на уровне формата поддерживаются включение в изображение информации о копирайте, поддержка устойчивости к битовым ошибкам при передаче и широковещании, можно запрашивать для декомпрессии или обработки внешние средства (plug-ins), можно включать в изображение его описание, информацию для поиска и т.д.
Идея алгоритма
Базовая схема JPEG-2000 (рис. 7.3) очень похожа на базовую схему JPEG. Отличия заключаются в следующем:
- Вместо дискретного косинусного преобразования ( DCT ) используется дискретное вэйвлет-преобразование ( DWT ).
- Вместо кодирования по Хаффману используется арифметическое сжатие.
- В алгоритм изначально заложено управление качеством областей изображения.
- Не используется явно дискретизация компонент U и V после преобразования цветовых пространств, поскольку при DWT можно достичь того же результата, но более аккуратно.
Рассмотрим алгоритм по шагам.
Шаг 1.
В JPEG-2000 предусмотрен сдвиг яркости ( DC level shift ) каждой компоненты ( RGB ) изображения перед преобразованием в YUV. Это делается для выравнивания динамического диапазона (приближения к 0 гистограммы частот), что приводит к увеличению степени сжатия. Формулу преобразования можно записать как:
Значение степени ST для как каждой компоненты R, G и В свое (определяется при сжатии компрессором). При восстановлении изображения выполняется обратное преобразование:
Шаг 2.
Переводим изображение из цветового пространства RGB, с компонентами, отвечающими за красную ( Red ), зеленую ( Green ) и синюю ( Blue ) составляющие цвета точки, в цветовое пространство YUV. Этот шаг аналогичен JPEG (см. матрицы преобразования в описании JPEG), за тем исключением, что кроме преобразования с потерями предусмотрено также и преобразование без потерь. Его матрица выглядит так:
Обратное преобразование осуществляется с помощью обратной матрицы:
Шаг 3.
Дискретное wavelet преобразование ( DWT ) также может быть двух видов - для случая сжатия с потерями и для сжатия без потерь. Его коэффициенты задаются таблицами, приведенными ниже. Для сжатия с потерями коэффициенты представлены в табл. 7.1 и табл. 7.2
Коэффициенты при упаковке | ||
---|---|---|
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 | Низкочастотные коэффициенты | Высокочастотные коэффициенты |
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 |