
- •Сжатие данных
- •Терминология
- •Физическое и логическое сжатие
- •Симметричное и асимметричное сжатие
- •Адаптивное, полуадаптивное и неадаптивное кодирование
- •Сжатие с потерями и минимизация потерь
- •Варианты группового кодирования
- •Пакеты вертикального повторения
- •Удаление шума и дифференцирование
- •Варианты алгоритма lzw
- •Юридические вопросы использования lzw
- •Историческая справка
- •Одномерное кодирование Group 3 (g31d)
- •Сжатие tiff Type 2
- •Двухмерное кодирование Group 3 (g32d)
- •Двухмерное кодирование Group 4 (g42d)
- •Советы по разработке кодировщиков и декодеров ccitt
- •Jpeg в перспективе
- •Основы jpeg
- •Преобразование изображения
- •Субдискретизация компонентов цветности
- •Применение дискретного косинус-преобразования
- •Квантование каждого блока
- •Арифметическое кодирование
- •Сжатие jpeg без потерь
- •Селективное улучшение
- •Фрагментация изображения
- •Принцип работы jbig
- •Принципы работы art
- •Основы фрактальной графики
- •Мультимедиа
- •Анимация
- •Цифровая видеоинформация
- •Цифровая аудиоинформация
- •Стандарт midi
Симметричное и асимметричное сжатие
Алгоритмы сжатия можно разделить на две категории: симметричные и асимметричные. Метод симметричного сжатия основан примерно на тех же алгоритмах и позволяет выполнять почти такой же объем работы, что и распаковка. В программах обмена данными, использующих сжатие и распаковку, обычно для большей эффективности применяется именно симметричный алгоритм.
При асимметричном сжатии в одном направлении выполняется значительно больший объем работы, чем в другом. Обычно на сжатие затрачивается намного больше времени и системных ресурсов, чем на распаковку. Это имеет смысл, например, если мы создаем базу данных изображений. При этом изображения сжимаются для хранения всего однажды, зато распаковываться с целью отображения они могут неоднократно. Вероятно, в этом случае мы согласимся затратить больше времени на сжатие, чем на распаковку. Асимметричный алгоритм, затрачивающий много процессорного времени на сжатие, но быстро осуществляющий распаковку, можно считать эффективным.
Алгоритмы, асимметричные "в обратном направлении" (т.е. когда на сжатие затрачивается меньше времени, чем на распаковку), применяются значительно реже. В частности, создавая программу резервированного копирования файлов, мы понимаем, что большинство скопированных файлов никогда не будет прочитано. В этом случае уместен алгоритм, выполняющий сжатие значительно быстрее, чем распаковку.
Адаптивное, полуадаптивное и неадаптивное кодирование
Некоторые базирующиеся на словарях кодировщики, например алгоритмы сжатия CCITT (см. ниже раздел "Кодирование CCITT (Хаффмена)"), были спроектированы специально для обработки данных только определенных типов. Такие неадаптивные кодировщики содержат статический словарь предопределенных подстрок, о которых известно, что они появляются в кодируемых данных достаточно часто. Неадаптивный кодировщик, разработанный специально для сжатия английских текстов, будет содержать словарь с предопределенными подстроками "and", "but", "of и "the", поскольку в английском тексте такие подстроки появляются очень часто.
Адаптивный кодировщик, не содержит предопределенных эвристических правил для сжимаемых данных. Адаптивные компрессоры, такие как LZW, не зависят от типа обрабатываемых данных, поскольку строят свои словари полностью из поступивших (рабочих) данных. Они не имеют предопределенного списка статических подстрок, а, наоборот, строят фразы динамически, в процессе кодирования.
Адаптивные компрессоры настраиваются на любой тип вводимых данных, добиваясь в результате максимально возможной степени сжатия, в отличие от неадаптивных компрессоров, которые позволяют эффективно закодировать только входные данные строго определенного типа, для которого они были разработаны.
Метод полуадаптивного кодирования основан на применении обоих словарных методов кодирования. Полуадаптивный кодировщик работает в два прохода. При первом проходе он просматривает все данные и строит свой словарь, при втором — выполняет кодирование. Этот метод позволяет построить оптимальный словарь, прежде чем приступить к кодированию.