Методы и алгоритмы сжатия графической информации

МЕТОДЫ И АЛГОРИТМЫ СЖАТИЯ ГРАФИЧЕСКОЙ

ИНФОРМАЦИИ М.С. Тулякова

Научный руководитель - кандидат технических наук, доцент Б.А. Крылов

К настоящему времени разработано множество алгоритмов сжатия, ориентированных на различные типы изображений. В статье описаны основные методы и алгоритмы сжатия графической информации.

Введение

Сжатие - способ более эффективного представления информации. Эффективность сжатия изображения определяется уровнем его избыточности. В цифровых изображениях существуют различные типы избыточности. Первый тип обусловливается повторением в файле изображения пикселей одинаковых цветов, преобладанием какого-либо цвета (статистическая избыточность). Такая избыточность характерна для деловой графики (диаграммы, графики). Другой тип избыточности является результатом корреляции пикселей. Такая избыточность называется пространственной и чаще всего присутствует в фотореалистичных изображениях. Также для фотореалистичных изображений характерна психофизическая избыточность. Она связана с тем, что не все детали изображения одинаково воспринимаются зрителем. Ряд деталей, имеющих одновременно малые размеры и малый контраст, не видны на изображении, поэтому могут быть удалены без вреда для качества восприятия изображения.

Невозможно в общем виде сказать, имеет алгоритм сжатия высокую или низкую эффективность. Эффективность компрессии зависит от типа сжимаемого изображения. Можно выделить следующие типы:

• Двухуровневое (монохроматическое) изображение. Каждый пиксель изображения может принимать только одно из двух значений. Это самый простой тип изображения, где каждый пиксель изображения представлен одним битом.

• Полутоновое изображение. Значение каждого пикселя в этом случае представляет собой яркость соответствующей точки. Полутоновое изображение может иметь 2п (п = 4, 8, 12, 16, 24) градаций серого.

• Полноцветное изображение. Каждый пиксель такого изображения кодируется 24 битами, которые делятся на три 8-битовые группы. Эти группы содержат значения, которые управляют информацией о красном, зеленом и голубом цвете и их интенсивности. Типы данных истинного цвета RGB содержат 16.7 миллионов цветов.

• Изображение с непрерывным тоном. Этот тип изображения характеризуется тем, что может иметь много похожих цветов. Изображения такого типа чаще всего являются фотореалистичными.

• Изображения с небольшим количеством цветов. Примерами таких изображений могут быть объекты деловой графики - гистограммы, диаграммы, графики и т.п.

Методы сжатия можно разделить на две основные группы: с потерями и без потерь. Методы сжатия без потерь сжимают и восстанавливают изображение без искажений, т.е. исходное и восстановленное изображения идентичны. Но в связи с тем, что эти методы имеют очень маленький коэффициент сжатия, они используются только в том случае, когда искажение информации недопустимо. Эти методы сжатия устраняют статистическую избыточность.

Сжатие без потерь

RLE. Одним из самых простых алгоритмов сжатия без потерь является кодирование серий последовательностей - алгоритм RLE. На первом этапе реализации этого ал-

горитма происходит «вытягивание» двумерного файла изображения в одномерную цепочку бит. Дальнейшее кодирование осуществляется за счет наличия в этой цепочке повторяющихся блоков бит. В закодированный файл записываются пары «счетчик повторений - значение повторяющегося байта» [1].

Этот алгоритм рассчитан на изображения с большими областями постоянной яркости или цвета и маленьким количеством цветов. Примерами таких изображений может служить деловая графика - диаграммы, графики. К минусам данного алгоритма можно отнести его неэффективность применительно к фотореалистичным изображениям. В этом случае возможно даже увеличение размера заархивированного файла относительно исходного.

Групповое кодирование используется в таких форматах bitmap файлов, как BMP, PCX, TIFF.

Метод Хаффмана. Этот алгоритм практически не используется в чистом виде, а применяется как один из этапов компрессии в более сложных схемах. В его основе лежит учет частоты появления одинаковых пикселей в изображении. При этом пикселям исходного изображения, которые встречаются часто, сопоставляется код меньшей длины, а встречающимся редко - код большей длины [2]. Кодирование по Хаффману нуждается в точной статистике, касающейся того, как часто каждая величина появляется в исходном файле. Таким образом, для обеспечения правильной работы метод Хаффмана реализуется в два прохода. В первый проход собирается статистика частоты появления символов; во второй - кодируются сами символы. В этом случае в дополнение к закодированному изображению в файле необходимо хранить таблицу с соответствиями кодируемых пикселей и кодирующих цепочек битов. Существует вариант реализации этого алгоритма, при котором такая таблица строится адаптивно, в процессе архивации.

Рассмотрим пример сжатия по Хаффману (табл. 1). Пусть к, с, ч, з, ж, ф - цвета пикселей (красный, синий, черный, зеленый, желтый, фиолетовый). Входной поток: «ксссчччззжжжжжжжжжф». Сначала для каждого символа подсчитывается частота его появления в этом потоке. Далее строится двоичное дерево. Наиболее редко используемые значения в этом примере - «к» и «ф», так что они становятся первой парой; «к» присваивается 0-я ветвь, а «ф» - 1-я. Это означает, что 0 и 1 будут младшими битами кодов для «к» и «ф», соответственно. Более старшие биты будут получены из дерева по мере того, как оно будет построено. Затем частоты этих первых 2-х суммируются, что дает в итоге 2. Поскольку теперь самая низкая частота -2, эта пара объединяется с «з» (которое также имеет частоту 2). Исходной паре присваивается нулевая ветвь этого дерева, a «з» - первая ветвь. Таким образом, код для «к» заканчивается на 00; «ф» - на 01; «з» - на 1 и будет на один бит короче по сравнению с кодами для «к» и «ф».

Символ Частота Выходная последовательность

К 1 0000

Ф 1 0001

З 2 001

С 3 00

Ч 3 01

Ж 9 1

Таблица 1. Сжатие Хаффмана для входного потока пикселей

Алгоритм Хаффмана эффективен при сжатии изображений с ограниченным количеством цветов пикселей. Сжатие с фиксированной таблицей применяется в качестве последнего этапа архивации в JPEG. Этот алгоритм реализован также в формате TIFF.

LZW. Это более современный алгоритм сжатия без потерь, чем алгоритм Хафф-мана. В отличие от метода Хаффмана, в этом алгоритме не требуется предварительного создания таблицы кодов, этот алгоритм является адаптивным, и оптимальная таблица кодов создается в процессе сжатия. Сжатие происходит за счет наличия в сжимаемом файле повторяющихся цепочек пикселей.

Первый шаг этого алгоритма - создание таблицы с одним элементом кода для каждой возможной величины данных; например, 256 элементов для 8-битных данных. Далее алгоритм «просматривает» входной поток, и в эту таблицу добавляется каждое уникальное сочетание пикселей в сжимаемом изображении. Если на вход поступает уже имеющаяся комбинация пикселей, то в выходной поток записывается индекс ячейки в таблице, в которой эта комбинация содержится. Таким образом, алгоритм преобразует поток символов на входе в поток индексов ячеек таблицы на выходе. При переполнении таблицы алгоритм либо прекращает ее заполнение, либо очищает (полностью или частично) [1].

Любая ячейка таблицы, кроме самых первых, содержащих односимвольные цепочки, хранит копию некоторой другой ячейки, к которой в конец приписан один символ. Вследствие этого часто при сжатии используют «хэш-таблицу», в каждом элементе которой содержится код предыдущей подстроки, добавленный символ, код этой строки.

Алгоритм LZW эффективен при сжатии 8-битных изображений, имеющих небольшое количество цветов. Наличие шума в изображении значительно снижает эффективность сжатия. Существует огромное количество различных реализаций алгоритма сжатия LZW. Метод LZW используется для сжатия изображений при записи их в форматы TIFF и GIF.

Арифметическое сжатие. Алгоритм арифметического сжатия является наиболее оптимальным, так как достигается теоретическая граница степени сжатия. Этот метод позволяет упаковывать значения пикселей входного потока без потерь при условии, что известно распределение частот этих пикселей.

Сжимаемая последовательность значений пикселей представляется как некоторая двоичная дробь из интервала [0, 1). Для сжатия цепочки пикселей определяют частоту появления каждого символа во входном потоке. Интервал [0, 1) разбивается на подин-тервалы с длинами, пропорциональными этим частотам. Далее за основу разбиения берется подинтервал, соответствующий частоте появления первого пикселя из последовательности, и также разбивается на подинтервалы, пропорциональные вероятностям появления пикселей. Далее берется подинтервал, соответствующий частоте появления следующего пикселя из входной последовательности, и также разбивается. Процедура повторяется. В качестве выходной последовательности берется любая дробь из окончательно определенного интервала [1].

Рассмотрим пример арифметического сжатия. Пусть к, с, з - цвета пикселей (красный, синий, зеленый). Входной поток: «ксзк». Вычисляется частота появления символа, и в соответствии с ней интервал [0, 1) делится на подынтервалы. Вычисленные значения указаны в табл. 2. Первый пиксель - к, поэтому для дальнейшего разбиения выбираем интервал [0.0; 0.5). Разбиваем этот интервал на подынтервалы и выбираем тот, который соответствует с - [0.25; 0.375). Разбиваем этот интервал на подынтервалы, выбираем соответствующие пикселю з - [0.34375; 0.375). Разбиваем этот интервал на подинтервалы еще раз и выбираем подынтервал, соответствующий пикселю к -[0.34375; 0,359375). Таким образом цепочку «ксзк» можно представить любым числом из этого подынтервала, например 0,35.

Система арифметического кодирования лучше сжимает изображения, которые в большинстве своем состоят из повторенной одной и той же последовательности пикселей. Этот алгоритм может сжимать довольно короткие цепочки пикселей из-за ограничений разрядности переменных.

Символ Частота Первое деле- Второе деле-

ние на подин- ние на подин-

тервалы тервалы

К 0.5 [0.0; 0.5) [0; 0.25)

С 0.25 [0.5; 0.75) [0,25; 0.375)

З 0.25 [0.75; 1.0) [0.375; 1)

Третье деление на Четвертое деление на

подинтервалы подинтервалы

[0.25; 0.3125) [0.34375; 0,359375)

[0.3125; 0.34375) [0,359375; 0,3671875)

[0.34375; 0.375) [0,3671875;0.375)

Таблица 2. Вычисление интервалов при арифметическом сжатии

Сжатие с потерями

Методы сжатия с потерями - это методы, при которых некоторая часть исходных данных отбрасывается, поскольку считается необязательной для конечного приложения. Методы сжатия с потерями применяются в основном к фотореалистичным изображениям. Это связано с тем, что, во-первых, такие изображения плохо поддаются методам сжатия без потерь, а во-вторых, фотореалистичные изображения обладают большой пространственной и психофизической избыточностью. Эти типы избыточности как раз и устраняются методами сжатия с потерями.

JPEG. Особенностью сжатия алгоритмом JPEG является то, что он сжимает изображения, опираясь на то, что видит человеческий глаз, и удаляет информацию, которая несущественна для восприятия изображения. В результате, сжимая изображение алгоритмом JPEG, можно достигнуть высокого уровня сжатия без заметных потерь в качестве изображения.

Сжатие JPEG происходит в несколько этапов. Первый этап заключается в преобразовании цветовой схемы RG8 в YUV (Y-компонента - это яркость, а две остальные -это голубая и красная цветовые компоненты). Цветное изображение в системе RGB представляется как результат сложения трех компонент

XC = a1 XR + a2 XG + a3 XB .

В этом выражении a„ a2, a3 - калориметрические коэффициенты. Переход от цветовой RGB-палитры к компонентам YUV выполняется по формуле (1):

Y = Va, [Xr ]2 + a2 [Xg ]2 + a3 X ]2 ,

U = Xb ,

V = XR .

После такого преобразования получается исходное изображение в градациях серого плюс два канала информации о голубом и красном цветах. Хотя этот этап не является обязательным для JPEG-сжатия, большинство реализаций производят эту операцию, потому что она позволит повысить эффективность сжатия. Это связано с тем, что человеческий глаз гораздо сильнее реагирует на незначительно изменение яркости, чем на изменение цветового тона, а, разделив яркостную и цветовую компоненты, можно сжать каждую отдельно с разными потерями.

Следующим этапом алгоритма JPEG является дискретизация. Исходное изображение разбивается на блоки, размером 8x8 пикселей. На этом этапе используется то, что яркостная и цветовая составляющие изображения хранятся отдельно. Для увеличения степени сжатия дискретизация проводится для разных составляющих с разной частотой - изображение делится по компоненте Y, а для компонент U и V цветовая ин-

формация берется через строку и через столбец. Таким образом, сразу получаем степень сжатия в два раза, а на качестве изображения это сказывается не сильно [2].

Основным этапом работы алгоритма является дискретное косинусное преобразование (ДКП), позволяющее переходить от пространственного представления изображения к спектральному. Обработка каждого блока выполняется независимо и заключается в применении к каждой рабочей матрице формулы

F

7 7

^ v^ г, ч (2X +1) u n (2x +1) v n L L f (X У) cos-72-cos-77-

x=0y=0 16 16

где

' 1

С ( z) ='"

, если z = 0 V2 •

1, если z Ф 0

В получившейся матрице коэффициентов низкочастотные компоненты расположены ближе к левому верхнему углу, а высокочастотные - справа и внизу. Для восстановления сжатого изображения гораздо более важны значения низких частот, чем значения высоких, потому что медленные изменения цвета в изображении более замены, чем быстрые.

На этом основывается следующий этап сжатия методом JPEG - квантование. Именно на этом этапе происходит самая значительная потеря информации. Квантование представляет собой деление каждого полученного после ДКП блока коэффициентов на матрицу квантования поэлементно. Для каждой компоненты матрица квантования своя. Значение коэффициентов этой матрицы определяет степень сжатия изображения. Поскольку для U и V компонентов квантование может быть более грубым, чем для Y компонента, на последнем этапе процесса сжатие U и V компонентов происходит в большей степени. После квантования большинство значений в блоке становятся нулями, сохранятся только небольшое количество наиболее значимых коэффициентов, к тому же эти значения относительно невелики. Квантование также обеспечивает возможность последующего эффективного сжатия данных при помощи любого способа сжатия без потерь. Для этого блок 8x8 обходим при помощи зигзаг-сканирования, все коэффициенты вытягиваются в цепочку. В начале этой цепочки находятся коэффициенты, соответствующие низким частотам, а в конце - высоким. Далее к получившейся цепочке коэффициентов применяется RLE-кодирование, получившиеся в результате пары сжимаются по методу Хаффмана [5] .

JPEG - один из самых популярных алгоритмов сжатия. Он обеспечивает высокую эффективность сжатия при приемлемом уровне потерь. JPEG применяется, в основном, к фотореалистичным изображениям. Основной плюс этого алгоритма - это высокие коэффициенты сжатия изображений. К минусам можно отнести высокую вычислительную сложность и специфические искажения - эффект Гиббса. Этот эффект проявляется в том, что линии JPEG изображений с четкими контурами начинают заметно «дрожать». Так, например, если изображение содержит какие-либо подписи, то подобный эффект может возникнуть вокруг символов.

Фрактальное сжатие. Различные методы сжатия изображений основываются на устранении тех или иных форм избыточности, в частности, фрактальные методы рассматривают самоподобие как источник избыточности. Считается, что самоподобие является свойством почти всех природных объектов и их изображений, и, следовательно, устранение этой формы избыточности может значительно уменьшить объем данных, необходимых для описания природного объекта или его изображения.

Фрактал - это структура, выделенная при анализе изображения и обладающая схожей формой независимо от ее размеров. Например, в изображении кроны дерева фрактал - изображение листа. Фрактальное сжатие изображений основано на гипотезе,

согласно которой в любом изображении можно обнаружить локальное самоподобие различных его частей.

При фрактальном сжатии изображение представляется в более компактной форме - с помощью коэффициентов системы итерируемых функций (IFS). IFS представляет собой набор трехмерных аффинных преобразований, переводящих одно изображение в другое. Преобразованию подвергаются точки в трехмерном пространстве (х-координата, ^-координата, яркость). Фактически фрактальная компрессия - это поиск самоподобных областей в изображении и определение для них параметров аффинных преобразований.

Функция аффинного преобразования описывается следующим образом:

a b х l

+

с d y f

f ( х) = ах + by +1, f (y) = сх + dy + f .

Здесь (х, y) - координата пикселя исходного изображения. Первая матрица определяет масштабирование и трансформацию исходного изображения (a, b, с и d - аффинные коэффициенты вращения, деформации, расширения и сжатия). Вторая матрица определяет величину параллельного переноса (l и f - коэффициенты перемещения).

Кодируемое изображение разбивается на множество неперекрывающихся блоков (ранговых областей), для каждого из которых, в пределах этого же изображения, ищется блок большего размера (домен), пиксели которого путем некоторого преобразования, задаваемого несколькими коэффициентами, переводились бы в пиксели ранговой области. Из преобразований, переводящих домены в ранговые области, формируется отображение, переводящее изображение в изображение. Если для какого-либо домена не находится подобного среди ранговых областей, то этот домен разбивают на части и ищут подобные ранговые области уже для этих частей. Кодом изображения будут являться местоположение и размеры ранговых областей, а также коэффициенты преобразований, описывающих самоподобие внутри изображения [5]. Количество бит, необходимых для описания кода, будет существенно меньше количества бит, необходимых для описания исходного изображения. Параметры аффинного преобразования кодируются по методу Хаффмана и сохраняются. Файл со сжатым изображением содержит две части: заголовок, содержащий информацию о расположении доменов и ранговых областей, и упакованную таблицу аффинных коэффициентов для каждого домена.

Алгоритм фрактального сжатия несимметричен по времени - на сжатие изображения требуется примерно в 1000-10000 раз больше времени, чем на распаковку. Это объясняется большими затратами времени на поиск в изображении подобных областей.

Алгоритм ориентирован на полноцветные изображения и изображения в градациях серого цвета, без резких переходов цветов. Фрактальное сжатие реализовано в формате FIF. К плюсам этого метода сжатия можно отнести высокие коэффициенты сжатия и возможность свободно масштабировать изображение при разжатии, увеличивая его в 2-4 раза. К минусам можно отнести зависимость результатов работы алгоритма от принципов отбора базовых элементов и доменов и то, что коэффициент сжатия зависит от повторяемости базовых элементов.

JPEG2000. Несмотря на большую популярность алгоритма JPEG, по прошествии нескольких лет был разработан новый алгоритм JPEG2000. Это связано с тем, что были разработаны новые, более эффективные, методы сжатия изображений, в частности wavеlet-преобразование.

Базовая схема JPEG2000 похожа на схему JPEG, но есть ряд отличий. Основным является то, что вместо дискретного косинусного преобразования (ДКП) используется дискретное wavеlet-преобразование. Применение wavеlet-преобразования имеет ряд преиму-

ществ по сравнению с ДКП, таких как увеличение коэффициента сжатия и избавление от блочной структуры изображения, возникающей в сильно сжатых JPEG файлах.

Первым этапом сжатия в алгоритме JPEG2000, также как и в JPEG, является преобразование цветовой схемы из RGВ в YUV. После этого к каждой компоненте исходного изображения применяется wavеlet-преобразование. Вначале исходное изображение подвергается фильтрации посредством четырех цифровых фильтров, которые делят спектр исходного изображения на четыре равные неперекрывающиеся области. Низкочастотный фильтр пропускает информацию, передаваемую на низких частотах (т.е. малое количество деталей), блокируя информацию, передаваемую на высоких частотах (т. е. содержащую большое количество деталей), а высокочастотный фильтр - наоборот. В итоге получается четыре области: первая представляет собой «размытую» версию исходного изображения (низкочастотный фильтр), три оставшихся - высокочастотные компоненты изображения, которые имеют вид горизонтальных, вертикальных и диагональных границ. Все четыре изображения подвергаются прореживанию путем устранения каждой второй строки и каждого второго отсчета в строке, а затем размещаются на той же площади, что и исходное изображение. Далее в пределах первой области, которая была отфильтрована низкочастотным фильтром, повторяют эту операцию. Количество повторений соответствует количеству уровней вейвлет-декомпозиции.

Следующим шагом wavеlet-преобразования, так же как и JPEG-сжатия, является квантование. Низкочастотные компоненты квантуются на меньшее число уровней, высокочастотные - на большее. Процесс квантования осуществляется путем деления матрицы отсчетов на матрицу квантования [4]. При квантовании отсчетов компонент, полученных в результате wavеlet-преобразования, на пониженное число уровней в них вносится шум квантования, но если сжатие не слишком велико, то шумы в восстановленном изображении будут не очень заметны.

Далее для сжатия получившегося массива данных используется арифметическое сжатие. Кодируется не все изображение и даже не отдельные субполосы, а более мелкие объекты - кодируемые блоки (КБ). Размер кодируемого блока может быть не более 4096 пикселей, высота не менее 4 пикселей. Такое разбиение, хотя и снижает несколько коэффициент сжатия, но повышает устойчивость сжатого потока к ошибкам канала связи: ошибка испортит лишь небольшой блок. Кодирование блоков ведется в три этапа, битовыми плоскостями [3].

Алгоритм сжатия JPEG2000 ориентирован на полоноцветные 24-битные изображения без резких переходов цветов. Стандарт JPEG2000 превосходит по эффективности стандарт JPEG примерно в 2 раза при сжатии с потерями и на 5-20% при сжатии без потерь. Представление изображения, полученное в результате wavеlet-преобразования, очень удобно тем, что оно обеспечивает возможность получения приблизительных копий изображения без осуществления полного обратного преобразования, это имеет большое значение при размещении изображения в Интернете.

Заключение

В статье описаны основные применяемые сегодня методы сжатия изображений. Выбор того или иного метода зависит от области, где будут применяться сжатые изображения, и от характеристик этих изображений. Каждый из методов имеет множество вариаций, но в статье приведены только основные принципы работы алгоритмов.

Литература

1. Ватолин Д., Ратушняк А., Смирнов М., Юкин В. Методы сжатия данных. М.: ДИАЛОГ-МИФИ, 2003. 384 с.