Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Kompyuternaya_grafika.doc
Скачиваний:
150
Добавлен:
23.04.2019
Размер:
5.45 Mб
Скачать

69.Методы кодирования строк бит переменной длины. Алгоритм Хаффмена и арифметическое кодирование.

Кодирование Хаффмена

Данный алгоритм принадлежит к группе алгоритмов кодирования битовых строк с переменной длиной. Исходный вариант алгоритма был предложен Дэвидом Хаффменом1 (David Huffman) в 1952 г. В основе лежит вероятностная оценка появления байтов (символов) во входном потоке кодированных знаков. При этом наиболее часто встречающемуся символу сопоставляется наиболее короткие коды, а редко встречаю-

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

данных формата TIFF, JPEG. Рассмотрим работу алгоритма на примере. Пусть алфавит входного потока состоит из 6-ти символов: A, B, C, D, E, __ (пробел). Вероят-

ность появления этих символов приведена в табл.9.2.

Пусть входной поток содержит 1000 символов, что составляет в стандартном варианте (ASCII-код) 8000 бит (по байту на символ).Работа алгоритма начинается с построения бинарного дерева Хаффмена. Листья дерева – это символы, узлы – суммарные вероятности событий.

При построении дерева вверху располагается часто встречающиеся, внизу – редко встречаемые символы (рис.9.1).Произведем разметку дерева. Пусть каждая из левых дуг, выходящая из любой вершины дерева, соответствует коду «0», а правая коду «1» (рис.9.2).

В результате построения дерева Хаффмена символы будут иметь коды, представленные в табл.9.3.

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

1000 ×(0,3×2 + 0,2×2 + 0,13 + 0,1×4 + 0,05×4 + 0,25×2) = 2400 (бит)

Показатель сжатия составит величину:

(1 – 2400/8000) × 100%=20%

Рассмотрим пример декодирования, используя предыдущее бинарное дерево Хаффмена (рис.9.2).

Пусть задана строка бит:

10000000100010100011110

Очевидно, что для декодирования потока необходимо сохранять

полученное при кодировке дерево Хаффмена, либо знать вероятность

появления символа во входном потоке, что позволит восстановить дерево кодирования.

Декодирование осуществляется путём «пропускания» потока битов по бинарному дереву Хаффмена, при помощи которого осуществлялось кодирование информации. Передвижение по дереву происходит от корня до одного из листьев. После этого происходит возврат к корню дерева. Рассматриваемый поток бит приведет к следующему результату:

10 0000 001 0001 01 0001 11 10

А С В D __ D Е А

Алгоритм Хаффмана принят в качестве стандарта международным

консультативным комитетом по телеграфии и телефонии (CCITT2). Для

кодирования в телекоммуникационных сетях существуют два варианта

стандарта: CCITT T.4 (или Group3), CCITT T.6 (или Group4). Существует

третий вариант - IBM MMR – фирменная реализация алгоритма Хаффмена IBM.

CCITT T.4 (Group3). Предназначен для кодирования текстовой

информации и черно-белых изображений в телекоммуникациях. Во всех

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

Алгоритмы данной группы позволяют сжимать текст в 5-8 раз, изображения – в 2-3 раза.

G31D. Перед реализацией алгоритма осуществляется статисти-

ческий анализ групп. Длина группы описывается двумя типами кодо-

вых слов:

- образующие (для длинных слов);

- терминальные (для коротких слов).

Закодированная группа пикселей состоит из терминальных кодо-

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

добавляются управляющие символы конца строки EOL (12 бит) и сим-

волы синхронизации RTC, которые используются для контроля.

G32D. Алгоритм ориентирован на описание плоских изображений. В нём описываются базовые строки (полностью) и строки разницы, содержащие только отличия между строками. Для показания сжатия используется k-фактор, указывающий количество строк, через которое осуществляется полное кодирование (бывает либо k=2, либо

k=4).

CCITT T.6 (Group4). Алгоритм ориентирован на более современные и надежные вычислительные сети и поэтому не использует поддержку коррекции ошибок. Алгоритм позволяет достигать 10-15 кратного уплотнения информации. Данный стандарт содержит единственный двумерный алгоритм G42D, который отличается от G32D следующими 2-мя характеристиками:

1) в выходном потоке отсутствуют сигналы синхронизации;

2) не используется k-фактор, поэтому в идеале полное кодирова-

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

Алгоритм требует больших временных затрат, но при его аппа-

ратной реализации этот недостаток является не существенным.

Арифметическое кодирование

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

наибольшее распространение получило последнее.Арифметическое кодирование (arithmetic encoding) является одной из разновидностей кодирования Хаффмена, которая позволяет достигать предела сжатия для данной группы методов (предел по тео-

ретическим расчетам составляет 100:1). Однако данный алгоритм запатентован IBM и AT&T, и для его исполнения необходимо лицензированное соглашение.

При арифметическом кодировании происходит отображение каждой уникальной последовательности бит (пикселей) в числовой диапазон [0, 1]. Этот диапазон, соответствующий подстроке бит, представляется затем в виде дробного числа из этого интервала.На практике получается так, что наиболее часто встречается последовательности, которым соответствуют большие интервалы, можно

сопоставить более короткую двоичную дробь. Реже встречающиеся последовательности соответствуют меньшим интервалам и более длинной двоичной дроби.

Рассмотрим работу алгоритма на примере.

Пусть входной поток состоит из шести символов, вероятность появления которых задана в табл.9.4.

Последовательность пикселей, например, ab будет иметь вероятность:

p(ab) = p(ap(b) =

=0.05×0.15 = 0.0075.

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

Вероятность появления какой-либо величины можно интерпретировать как интервал на отрезке [0,1] и сложить в некоторой последовательности (рис. 9.3). При этом каждый из входных элементов будет соответствовать интервалу из [0,1].

В случае появления элементов потока, имеющих равные вероятностные показатели, в схеме арифметического кодирования им будут соответствовать различные интервалы. В данном примере p(b) = p(c),однако p(b) соответствует интервал [0.05;0.2], а p(c) – [0.2;0.35].

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

ной длины являются:

1) простота алгоритмов;

2) высокая скорость сжатия.

Недостатки алгоритмов данной группы:

1) применяются для сжатия только черно-белых изображений;

при использовании их для сжатия цветных изображений эффективность резко падает.

2) наиболее эффективные алгоритмы запатентованы.

Конец 69 вопроса.

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