Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
all of DiskretMat.rtf
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
60.29 Mб
Скачать

4.4.6. Сравнение алгоритмов сжатия на базе bwt с другими методами.

Безусловно, следует сравнить архиваторы как по силе сжатия, так и по скорости работы и по расходам памяти.

Сравнение будет производиться с архиваторами, использующими LZ77 и метод Хаффман (сокращенно LZHuf). Эти архиваторы получили наибольшее применение еще со времен, когда компьютеры не имели мощности и объема памяти, достаточных для того, чтобы пользователям компьютеров были привлекательны более изощренные методы. В качестве представителей можно назвать PKZIP, WinZIP, 7ZIP, RAR, АСЕ, CABARC, ARJ, JAR.

Также стоит сравнить с архиваторами, использующими метод РРМ (Prediction by Partial Matching) – частичные совпадения. Среди них - НА, RK (а также RKUC, RKIVE), BOA, PPMD.

Скорость сжатия - на уровне архиваторов, применяющих LZHuf Хаффмана, а на больших словарях (от 1Mb) - и быстрее. У сжимателя, использующего преобразование Шиндлера, SZIP, скорость сжатия для малых порядков еще выше.

Скорость разжатия у архиваторов, использующих BWT, в 3-4 раза быстрее сжатия. В целом, классические LZHuf разжимают, конечно, быстрее.

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

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

Расходы памяти при сжатии довольно близки у всех рассматриваемых методов и могут колебаться в больших пределах. Если не рассматривать специфические экономные реализации - LZHuf с маленьким словарем, РРМ с малым числом контекстов и BWT с кластерной сортировкой, то основные различия в требованиях к памяти наблюдаются при декодировании. Наиболее скромными в этом отношении являются архиваторы, и чльзующие LZHuf. РРМ'ы памяти требуют столько же, сколько же и при сжатии. Промежуточное положение занимают BWT-компрессоры.

Глава 5. Теория сжатия графической информации. Введение.

Еще одна очень важная трактовка набора из нулей и единиц – это кодирование геометрического изображения. Двухцветная картинка (будем по традиции говорить о черно-белой картинке – черный рисунок на белом фоне) может трактоваться как растр – совокупность отдельных точек, расставленных на прямоугольной решетке. Сопоставляя черным точкам единицы, а белым – нули, мы и кодируем таблицу в виде нулей и единиц. Затем таблицу можно “вытянуть” в одну линию, соединяя ее строки и столбцы.

Пример5: Рассмотрим решетку 16x16 и картинку на ней, изображенные на рис. 10. Кодируя столбцы числами в диапазоне 0:216-1, получаем вектор, который удобнее представить в шестнадцатеричной системе:

0000, 0000, 1800, 2С00, 2604, 7208, 4208, 4605, 2В83, 3С7С, 0C08, 0030, 0020, 0010, 0000, 0000.

Возможность точечного рисования картинок широко используется в вычислительной технике и в обработке изображений. Например, экран дисплея рассматривается как растр, в котором (условно, для какой-то конкретной модели) 960 строк по 1280 точек в каждой, т.е. в общем сложности 1 228 800 точек. Для сохранения такого набора нужно (по 8 точек в одном байте) 150 Кбайтов.

Рис. 10.

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

Рассмотрим два основных понятия.

  1. Сжатие без потерь: пусть изображение I задано как множество атрибутов пикселей, пусть после применения к I алгоритма A мы получили набор данных I1, тогда существует алгоритм A‑1 . Т.е. можно реконструировать I. (Сжатие без потерь применяется в PCX, PING, GIF, …)

  2. Сжатие с потерями, т.е. , где . При этом возникает вопрос, насколько велико визуальное отличие I2 от I, и как его оценивать. (JPEG)

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

Одна из серьезных проблем машинной графики заключается в том, что до сих пор не найден адекватный критерий оценки потерь качества изображения. А теряется оно постоянно — при оцифровке, при переводе в ограниченную палитру цветов, при переводе в другую систему цветопредставления для печати, и, что для нас особенно важно, при архивации с потерями. Можно привести пример простого критерия: среднеквадратичное отклонение значений пикселов (L2 мера, или root mean square — RMS):

По нему изображение будет сильно испорчено при понижении яркости всего на 5% (глаз этого не заметит — у разных мониторов настройка яркости варьируется гораздо сильнее). В то же время изображения со “снегом” — резким изменением цвета отдельных точек, слабыми полосами или “муаром” будут признаны “почти не изменившимися”. Свои неприятные стороны есть и у других критериев.

Рассмотрим, например, максимальное отклонение:

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

Мера, которую сейчас используют на практике, называется мерой отношения сигнала к шуму (peak-to-peak signal-to-noise ratio — PSNR).

Данная мера, по сути, аналогична среднеквадратичному отклонению, однако пользоваться ей несколько удобнее за счет логарифмического масштаба шкалы. Ей присущи те же недостатки, что и среднеквадратичному отклонению.

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

5.1. RLE-метод.

5.1.1. RLE — битовый уровень

Рассмотрим черно-белое изображение, на входе — последовательность битов, где 0 и 1 чередуются (все изображение разбивается на строки, которые выстраиваются друг за другом). Подряд обычно идет несколько 0 или 1, и можно помнить лишь количество идущих подряд одинаковых цифр. Т.е. последовательности

0000 11111 000 11111111111

соответствует набор чисел 4 5 3 11. Возникает следующий нюанс: числа, соответствующие входной последовательности, также надо кодировать битами. Можно считать, что каждое число изменяется от 0 до 7, тогда последовательности 11111111111 можно сопоставить, например, числа 7 0 4, т.е. 7 единиц, 0 нулей, 4 единицы.

Идея этого метода используется при передаче факсов.

5.1.2.RLE — байтовый уровень

Предположим, что на вход подается полутоновое изображение, где на цвет пикселя отводится 1 байт. Ясно, что по сравнению с черно-белым растром ожидание длинной цепочки одинаковых битов существенно снижается.

Будем разбивать входной поток на байты (буквы) и кодировать повторяющиеся буквы парой (счетчик, буква).

Т.е. AABBBCDAA кодируем (2A) (3B) (1C) (1D) (2A). Однако могут быть длинные отрезки данных, где ничего не повторяется, а мы кодируем каждую букву парой цифра-буква.

Пусть у нас есть фиксированное число M (от 0 до 255). Тогда одиночную букву можно закодировать ею самою — выход = S, одиночную букву от M до 255 — парой (1S), причем, если надо сказать, что подряд несколько букв S, то выход = CS, где , а — количество идущих подряд букв S. Тогда алгоритм декодирования будет выглядеть так:

Алгоритм декодирования

C = считать следующий символ.

если (C > M) то

C-M — счетчик,

следующий в последовательности — символ,

который надо повторить C-M раз

иначе

C — символ, надо вывести C

конец алгоритма

Встает вопрос, как выбрать M.

В PCX считается, если первые два бита — 11, то остальное — счетчик.

Кроме как в PCX, этот алгоритм используется также в JPG.

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

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]