Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

1 / Salmon_sjatie_dannyh_izobrajeniy_i_zvuka[torrents.ru]

.pdf
Скачиваний:
24
Добавлен:
05.06.2015
Размер:
7.92 Mб
Скачать

Введение

будет лучше всего работать именно со своими данными. В этой области не суш;ествует универсальных методов и решений.

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

Компрессор или кодер ~ программа, которая сжимает «сырой» исходный файл и создает на выходе файл со сжатыми данны­ ми, в которых мало избыточности. Декомпрессор или декодер работает в обратном направлении. Отметим, что понятие ко­ дера является весьма обидим и имеет много значений, но по­ скольку мы обсуждаем сжатие данных, то у нас слово кодер будет означать компрессор. Термин кодек иногда использует­ ся для объединения кодера и декодера.

Метод неадаптивного сжатия подразумевает неспособность алгоритма менять свои операции, параметры и настройки в зависимости от сжимаемых данных. Такой метод лучше всего сжимает однотипные данные. К ним относятся методы груп­ пы 3 и группы 4 сжатия факсимильных сообщений (см. § 1.6). Они специально разработаны для сжатия в факс-машинах и будут весьма слабо работать на других типах данных. На­ против, адаптивные методы сначала тестируют «сырые» ис­ ходные данные, а затем подстраивают свои параметры и/или операции в соответствии с результатом проверки. Примером такого алгоритма может служить кодирование Хаффмана из § 1.5. Некоторые методы компрессии используют двухпроходные алгоритмы, когда на первом проходе по файлу собира­ ется некоторая статистика сжимаемых данных, а на втором проходе происходит непосредственно сжатие с использовани­ ем параметров, вычисленных на первой стадии. Такие методы можно назвать полуадаптивными. Методы компрессии могут быть также локально адаптивными, что означает способность алгоритма настраивать свои параметры исходя из локальных особенностей файла и менять их, перемещаясь от области к области входных данных. Пример такого алгоритма приведен в [Salomon 2000].

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

Введение

является графика, звук или видео. Если потери невелики, то бывает невозможно обнаружить разницу. А текстовые данные, например, текст компьютерной программы, могут стать со­ вершенно непригодными, если потеряется или изменится хоть один бит информации. Такие файлы можно сжимать только методами без потери информации. (Здесь стоит отметить два момента относительно текстовых файлов. (1) Если текстовый файл содержит исходный код компьютерной программы, то из него можно безболезненно удалить большинство пробелов, так как компилятор, обычно, их не рассматривает. (2) Когда программа текстового процессора сохраняет набранный текст в файле, она также сохраняет в нем информацию об использу­ емых шрифтах. Такая информация также может быть отбро­ шена, если автор желает сохранить лишь текст своего произ­ ведения) .

Симметричное сжлтие - это когда и кодер, и декодер ис­ пользуют один и тот же базовый алгоритм, но используют его в противоположных направлениях. Такой метод имеет смысл, если постоянно сжимается и разжимается одно и то же число файлов. При асимметричном методе или компрессор или де­ компрессор должны проделать существенно большую работу. Таким методам тоже находится место под солнцем, они совсем не плохи. Метод, когда компрессия делается долго и тш;ательно с помощью сложнейшего алгоритма, а декомпрессия дела­ ется быстро и просто, вполне оправдан при работе с архивами, когда приходится часто извлекать данные. То же происходит и при создании и прослушивании аудиофайлов формата трЗ . Обратный случай, это когда внешние файлы часто меняются и сохраняются в виде резервных копий. Поскольку вероятность извлечения резервных данных невелика, то декодер может ра­ ботать существенно медленнее своего кодера.

Производительность

сэюатия: несколько величин используют­

ся для вычисления эффективности алгоритмов сжатия.

1) Коэффициент

сэюатия определяется по формуле

_ _

 

размер выходного файла

Коэффициент сжатия =

з — •

 

 

размер входного файла

Коэффициент 0.6 означает, что сжатые данные занима­ ют 60% от исходного размера. Значения большие 1 гово-

, 22 Введение

рят о том, что выходной файл больше входного (отри­ цательное сжатие). Коэффициент сжатия принято изме­ рять в bpb (bit per bit, бит на бит), так как он показы­ вает, сколько в среднем понадобится бит сжатого файла для представления одного бита файла на входе. При сжа­ тии графических изображений аналогично определяется величина Ьрр (bit per pixel, бит на пиксел). В современ­ ных эффективных алгоритмах сжатия текстовой инфор­ мации имеет смысл говорить о похожей величине Ьрс (bit per character, бит на символ), то есть, сколько в среднем потребуется бит для хранения одной буквы текста.

Здесь следует упомянуть еще два понятия, связанные с коэффициентом сжатия. Термин битовая скорость (bitrate) является более общим, чем bpb и Ьрс. Целью ком­ прессии информации является представление данных с наименьшей битовой скоростью. Битовый бюджет (bit budget) означает некоторый довесок к каждому биту в сжатом файле. Представьте себе сжатый файл, в кото­ ром 90% размера занимают коды переменной длины, со­ ответствующие конкретным символам исходного файла, а оставшиеся 10% используются для хранения некоторых таблиц, которые будут использоваться декодером при де­ компрессии. В этом случае битовый бюджет равен 10%.

2)Величина, обратная коэффициенту сжатия, называется

фактором союатил:

размер входного файла

Фактор сжатия =

размер выходного файла

В этом случае значения большие 1 означают сжатие, а меньшие 1 - расширение. Этот множитель представляет­ ся большинству людей более естественным показателем: чем больше фактор, тем лучше компрессия. Эта величина отдаленно соотносится с коэффициентом разреженности, который будет обсуждаться в § 4.1.2.

3)Выражение 100 х (1 — А;), где к - коэффициент сжатия, тоже отражает качество сжатия. Его значение равное 60 означает, что в результате сжатия занимает на 60% мень­ ше меньше, чем исходный файл.

4)Для оценивания эффективности алгоритмов сжатия обра­ зов используется величина Ьрр. Она показывает, сколько

Введение

необходимо в среднем использовать битов для хранения одного пиксела. Это число удобно сравнивать с его зна­ чением до компрессии.

Вероятностная модель. Это понятие очень важно при раз­ работке статистических методов сжатия данных. Зачастую, алгоритм компрессии состоит из двух частей, вероятностной модели и непосредственно компрессора. Перед тем как при­ ступить к сжатию очередного объекта (бита, байта, пиксела и т.п.), активируется вероятностная модель и вычисляется веро­ ятность этого объекта. Эта вероятность и сам объект сообща­ ются компрессору, который использует полученную информа­ цию при сжатии. Чем выше вероятность, тем лучше сжатие.

Приведем пример простой модели для черно-белого изобра­ жения. Каждый пиксел такого изображения - это один един­ ственный бит. Предположим, что алгоритм уже прочитал и сжал 1000 пикселов и читает 1001-ый пиксел. Какова вероят­ ность того, что пиксел будет черным? Модель может просто сосчитать число черных пикселов в уже прочитанном массиве данных. Если черных пикселов было 350, то модель приписыва­ ет 1001-ому пикселу вероятность 350/1000=0.35 быть черным. Эта вероятность вместе с пикселом (черным или белым) пе­ редаются компрессору. Главным моментом является то, что декодер может также легко вычислить вероятность 1001-ого пиксела.

Слово алфавит означает множество символов в сжимаемых данных. Алфавит может состоять из двух символов, О и 1, из 128 символов ASCII, из 256 байтов по 8 бит в каждом или из любых других символов.

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

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

Введение

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

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

Уилсон Мизнер

ГЛАВА I

СТАТИСТИЧЕСКИЕ

МЕТОДЫ

Статистические методы компрессии используют статистические свой­ ства сжимаемых данных и присваивают всем символам коды с пере­ менной длиной. Под «статистическими свойствами» обычно понима­ ется вероятность (или, что то же самое, частота появления) каждо­ го символа в потоке данных, однако этот термин может иметь иное, более сложное значение. Пару последовательных символов будем на­ зывать биграммои. Долгие наблюдения показали, что в типичном английском тексте некоторые биграммы, например, «ta», «he», «са», встречаются очень часто, а другие, например, «xa»,«hz», «qe», - ред­ ко. Поэтому разумный статистический метод может присваивать коды переменной длины многим биграммам (и даже триграммам), а не только индивидуальным символам.

1.1. Энтропия

Основы теории информации были заложены Клодом Шеноном в 1948 году в лаборатории Белла. Эта теория оказалась настоящим сюр­ призом, поскольку все привыкли воспринимать информацию лишь качественно. Для наших целей сжатия данных нам необходимо осво­ ить только одно теоретико-информационное понятие, а именно, эн­ тропию. Под энтропией символа а, имеюп];его вероятность Р, под­ разумевается количество информации, содержащейся в а, которая равна —Plog2P. Например, если вероятность Ра символа а равна 0.5, то его энтропия —Ра log2 Ра = 0.5.

Если символы некоторого алфавита с символами от ai до а^ име­ ют вероятности от Pi до P„, то энтропия всего алфавита равна сум­ ме 5^^ —Pi log2 Pi. Если задана строка символов этого алфавита, то для нее энтропия определяется аналогично.

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

Глава 1. Статистические методы

Продемонстрируем это на простом примере. Для последовательно­

сти символов ((ABCDE» с вероятностями 0.5, 0.2,

0.1, 0.1 и 0.1,

соответственно, вероятность строки «AAAAABBCDE»

равна Р =

= 0.5^ X 0.2^ X 0.1^ = 1.25 X 10~^. Логарифм по основанию 2 этого

числа log2 Р — —19.6096. Тогда наименьшее в среднем число требуемых бит ^\ля кодирования этой строки равно — riog2 Р~\ , то есть, 20. Ко­

дер, достигающий этого сжатия называется энтропийным

кодером.

Пример: Проанализируем энтропию алфавита, состоящего все­

го из двух символов ai и «2

с вероятностями

Pi и Р2Посколь­

ку Pi -h Р2 = 1? то энтропия

этого алфавита

выражается

числом

—Pi log2 Pi — (1 — Pi) log2(l — Pi)- В табл. 1.1 приведены различные значения величин Pi и Р^ вместе с соответствующей энтропией. Ко­ гда Pi = Р2, необходим по крайней мере один бит для кодирования каждого символа. Это означает, что энтропия достигла своего мак­ симума, избыточность равна нулю, и данные невозможно сжать. Од­ нако, если вероятности символов сильно отличаются, то минималь­ ное число требуемых бит на символ снижается. Мы, скорее всего, не сможем непосредственно предъявить метод сжатия, который ис­ пользует 0.08 бит на символ, но мы точно знаем, что при Pi = 0.99 такой алгоритм теоретически возможен.

Pi

Р2

Энтропия

0.99

0.01

0.08

0.90

0.10

0.47

0.80

0.20

0.72

0.70

0.30

0.88

О.бО

0.40

0.97

0.50

0.50

1.00

Та б л . 1.1. Вероятности и энтропии двух символов.

1.2.Коды переменной длины

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

Рассмотрим четыре символа ai, а2, аз и 04Если они появля­ ются в последовательности данных с равной вероятностью (=0.25

1.2. Коды переменной длины

каждая), то мы им просто присвоим четыре двухбитовых кода 00, 01, 10 и 11. Все вероятности равны, и поэтому коды переменной дли­ ны не сожмут эти данные. Для каждого символа с коротким кодом найдется символ с длинным кодом и среднее число битов на символ будет не меньше 2. Избыточность данных с равновероятными сим­ волами равна нулю, и строку таких символов невозможно сжать с помощью кодов переменной длины (или любым иным методом).

Предположим теперь, что эти четыре символа появляются с раз­ ными вероятностями, указанными в табл. 1.2, то есть а] появляется в строке данных в среднем почти в половине случаев, а2 и «з имеют равные вероятности, а «4 возникает крайне редко. В этом случае имеется избыточность, которую можно удалить с помощью пере­ менных кодов и сжать данные так, что потребуется меньше 2 бит на символ. На самом деле^ теория информации говорит нам о том, что наименьшее число требуемых бит на символ в среднем равно 1.57, то есть, энтропии этого множества символов.

Символ

Вероятность

Codel

Code2

ai

0.49

1

1

02

0.25

01

01

аз

0.25

010

000

04

0.01

001

001

Табл. 1.2. Коды переменной длины.

В табл. 1.2 предложен код Codel, который присваивает самому часто встречающемуся символу самый короткий код. Если закоди­ ровать данный с помощью Codel, то среднее число бит на символ будет равно 1 х 0.49 + 2 х 0.25 + 3 х 0.25 + 3 х 0.01 =: 1.77. Это число весьма близко к теоретическому минимуму. Рассмотрим последова­ тельность из 20 символов

<^1«3^20^1ЙЗ^З<^4<^2<^1<^1^2<^2<^1<^1^3^1<^1<^2^3<^1?

в которой четыре символа появляются, примерно, с указанными ча­ стотами. Этой строке будет соответствовать кодовая строка кода Codel длины 37 бит

1|010|01|1|010|010|001|01|1|1|01|01|1|1|010|1|1|01|010|1,

которая для удобства разделена черточками. Нам понадобилось 37 битов, чтобы закодировать 20 символов, то есть, в среднем 1.85

Глава 1. Статистические методы

бит/символ, что не слишком далеко от вычисленной выше средней величины. (Читатель должен иметь в виду, что эта строка весьма коротка, и для того чтобы получить результат, близкий к теорети­ ческому, необходимо взять входной файл размером несколько тысяч символов).

Однако, если мы теперь попробуем декодировать эту двоичную последовательность, то немедленно обнаружим, что Code! совер­ шенно не годен. Первый бит последовательности равен 1, поэтому первым символом может быть только ai, так как никакой другой код в таблице для Code! не начинается с 1. Следующий бит равен О, но коды для а2, аз и а4 все начинаются с О, поэтому декодер дол­ жен читать следуюш,ий бит. Он равен 1, однако коды для а2 и а.з оба имеют в начале 01. Декодер не знает, как ему поступить. То ли декодировать строку как 1|010|01..., то есть, а\а^а2 • • •, то ли как 1|01|001..., то есть а] «2^4 • • • Причем заметим, что дальнейшие би­ ты последовательности уже не помогут исправить положение. Код Codel является двусмысленным. В отличие от него, код Code2 из табл. 1.2 дает при декодировании всегда однозначный результат.

Code2 имеет одно важное свойство, которое делает его лучше, чем Codel^ которое называется свойством префикса. Это свойство можно сформулировать так: если некоторая последовательность би­ тов выбрана в качестве кода какого-то символа, то ни один код дру­ гого символа не должен иметь в начале эту последовательность (не может быть префиксом^ то есть, приставкой). Раз строка «1» уже выбрана в качестве целого кода для а], то ни один другой код не может начинаться с 1 (то есть, они все должны начинаться на 0). Раз строка «01» является кодом для а2, то другие коды не должны начинаться с 01. Вот почему коды для аз и а4 должны начинаться с 00. Естественно, они будут «000» и «001».

Значит, выбирая множество кодов переменной длины, необходи­ мо соблюдать два принципа: (1) следует назначать более короткие коды чаще встречающимся символам, и (2) коды должны удовлетво­ рять свойству префикса. Следуя эти принципам, можно построить короткие, однозначно декодируемые коды, но не обязательно наи­ лучшие (то есть, самые короткие) коды. В дополнение к этим прин­ ципам необходим алгоритм, который всегда порождает множество самых коротких кодов (которые в среднем имеют наименьшую дли­ ну). Исходными данными этого алгоритма должны быть частоты (или вероятности) символов алфавита. К счастью, такой простой алгоритм существует. Он был придуман Давидом Хаффманом и на­ зывается его именем. Этот алгоритм будет описан в § 1.4.

1.3. Декодирование

Следует отметить, что не только статистические методы ком­ прессии используют коды переменной длины при кодировании ин­ дивидуальных символов. Замечательным примером служат арифме­ тические коды, о которых будет рассказано в § 1.7.

1.3. Декодирование

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

1. Множество префиксных кодов один раз выбрано и исполь­ зуется всеми кодерами и декодерами. Такой метод используется в факсимильной связи (см. § 1.6). Создатели стандарта сжатия АДЯ факс-машин выбрали восемь «эталонных» документов, проанализи­ ровали их статистические свойства и взяли их за основу при отборе подходящего префиксного кода, представленного в табл. 1.20. Гово­ ря техническом языком, эталонные документы были выбраны для обучения и тренировки алгоритма. Обучение алгоритма является простейшим подходом к статистическому сжатию, и его качество сильно зависит от того, насколько реальные сжимаемые файлы по­ ходят на выбранные ^ля тренировки и обучения образцы.

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

3. Адаптивное сжатие применяется как кодером, так и декоде­ ром. Кодер начинает работать, не зная статистических свойств объ­ екта сжатия. Поэтому первая часть данных сжимается не оптималь-

Соседние файлы в папке 1