● LZ77 и LZ78 (используется DEFLATE)
● LZW
Алгоритмы кодирования через генерирование битовых последовательностей:
● Алгоритм Хаффмана (также используется DEFLATE)
● Арифметическое кодирование
Методы сжатия без потерь.
Многоцелевые:
● Кодирование длин серий — простая схема, дающая хорошее сжатие данных, которые содержат много повторяющихся значений
● LZW — используется в gif и во многих других
● Deflate — используется в gzip, усовершенствованной версии zip и как часть процесса сжатия PNG
2) Сжатие аудио:
● Apple Lossless — ALAC (Apple Lossless Audio Codec)
● Audio Lossless Coding — также известен как MPEG-4 ALS
● Direct Stream Transfer — DST
● Dolby TrueHD
● DTS-HD Master Audio
● Free Lossless Audio Codec — FLAC
● Meridian Lossless Packing — MLP
● Monkey's Audio — Monkey’s Audio APE
● OptimFROG
● RealPlayer — RealAudio Lossless
● Shorten — SHN
● TTA — True Audio Lossless
● WavPack — WavPack lossless
● WMA Lossless — Windows Media Lossless
Сжатие графики:
● ABO — Adaptive Binary Optimization
● GIF — (без потерь, но содержащий очень небольшое число цветов)
● JBIG2 — (с потерями или без Ч/Б изображений)
● JPEG-LS — (стандарт сжатия без потерь/почти без потерь)
● JPEG 2000 — (включает сжатие без потерь; также, испытан Sunil Kumar, профессором университета штата Сан-Диего)
● PGF — Progressive Graphics File (сжатие с/без потерь)
● PNG — Portable Network Graphics
● Qbit Lossless Codec — фокусируется на intra-frame («одна картинка») сжатии без потерь
● TIFF
● WMPhoto — (включая метод сжатия без потерь)
Сжатие видео:
● Animation codec
● CamStudio Video Codec
● CorePNG
● FFV1
● H.264/MPEG-4 AVC
● Huffyuv
● Lagarith
● LCL
● MSU Lossless Video Codec
● Qbit Lossless Codec
● SheerVideo
● TSCC — TechSmith Screen Capture Codec
Примеры алгоритмов:
● Семейство алгоритмов Лемпеля-Зива
● RLE (Run-length encoding — Кодирование длин серий)
Примеры форматов и их реализаций:
● универсальные — Zip, 7-Zip, RAR, GZip, PAQ и др.
● звук — FLAC (Free Lossless Audio Codec), Monkey’s Audio (APE), TTA (True Audio), TTE, LA (LosslessAudio), RealAudio Lossless, WavPack и др.
● изображения — BMP, GIF, PNG
видео — Huffyuv.
Методы сжатия (компрессии данных).
Целью архивации файлов является экономия места на жестком или гибком магнитном диске. Существует большое число программ-архиваторов, имеются и специальные системные программные средства типа Stacker или Doublespace и т. д., решающие эту проблему.
Как мы уже рассмотрели выше, существуют методы, которые предполагают некоторые потери исходных данных, другие алгоритмы позволяют преобразовать информацию без потерь. Сжатие с потерями используется при передаче звуковой или графической информации, при этом учитывается несовершенство органов слуха и зрения, которые не замечают некоторого ухудшения качества, связанного с этими потерями. Более детально эти методы рассмотрены в разделе "Преобразование, кодировка и передача информации".
Сжатие информации без потерь осуществляется статистическим кодированием или на основе предварительно созданного словаря. Статистические алгоритмы (напр., схема кодирования Хафмана) присваивают каждому входному символу определенный код. При этом наиболее часто используемому символу присваивается наиболее короткий код, а наиболее редкому - более длинный. Таблицы кодирования создаются заранее и имеют ограниченный размер. Этот алгоритм обеспечивает наибольшее быстродействие и наименьшие задержки. Для получения высоких коэффициентов сжатия статистический метод требует больших объемов памяти.
Альтернативой статистическому алгоритму является схема сжатия, основанная на динамически изменяемом словаре (напр., алгоритмы Лембеля-Зива). Данный метод предполагает замену потока символов кодами, записанными в памяти в виде словаря (таблица перекодировки). Соотношение между символами и кодами меняется вместе с изменением данных. Таблицы кодирования периодически меняются, что делает метод более гибким. Размер небольших словарей лежит в пределах 2-32 килобайт, но более высоких коэффициентов сжатия можно достичь при заметно больших словарях до 400 килобайт.
Реализация алгоритма возможна в двух режимах: непрерывном и пакетном. Первый использует для создания и поддержки словаря непрерывный поток символов. При этом возможен многопротокольный режим (например, TCP/IP и DECnet). Словари сжатия и декомпрессии должны изменяться синхронно, а канал должен быть достаточно надежен (напр., X.25 или PPP), что гарантирует отсутствие искажения словаря при повреждении или потере пакета. При искажении одного из словарей оба ликвидируются и должны быть созданы вновь.
Пакетный режим сжатия также использует поток символов для создания и поддержания словаря, но поток здесь ограничен одним пакетом и по этой причине синхронизация словарей ограничена границами кадра. Для пакетного режима достаточно иметь словарь объемом, порядка 4 Кбайт. Непрерывный режим обеспечивает лучшие коэффициенты сжатия, но задержка получения информации (сумма времен сжатия и декомпрессии) при этом больше, чем в пакетном режиме.
При передаче пакетов иногда применяется сжатие заголовков, например, алгоритм Ван Якобсона (RFC-1144). Этот алгоритм используется при скоростях передачи менее 64 Kбит/с. При этом достижимо повышение пропускной способности на 50% для скорости передачи 4800 бит/с. Сжатие заголовков зависит от типа протокола. При передаче больших пакетов на сверх высоких скоростях по региональным сетям используются специальные канальные алгоритмы, независящие от рабочих протоколов. Канальные методы сжатия информации не могут использоваться для сетей, базирующихся на пакетной технологии, SMDS (Switched Multi-megabit Data Service), ATM, X.25 и Frame Relay. Канальные методы сжатия дают хорошие результаты при соединении по схеме точка-точка, а при использовании маршрутизаторов возникают проблемы - ведь нужно выполнять процедуры сжатия/декомпрессии в каждом маршрутизаторе, что заметно увеличивает суммарное время доставки информации. Возникает и проблема совместимости маршрутизаторов, которая может быть устранена процедурой идентификации при у становлении виртуального канала.
Иногда для сжатия информации используют аппаратные средства. Такие устройства должны располагаться как со стороны передатчика, так и со стороны приемника. Как правило, они дают хорошие коэффициенты сжатия и приемлемые задержки, но они применимы лишь при соединениях точка-точка. Такие устройства могут быть внешними или встроенными, появились и специальные интегральные схемы, решающие задачи сжатия/декомпрессии. На практике задача может решаться как аппаратно, так и программно, возможны и комбинированные решения.
Если при работе с пакетами заголовки оставлять неизмененными, а сжимать только информационные поля, ограничение на использование стандартных маршрутизаторов может быть снято. Пакеты будут доставляться конечному адресату, и только там будет выполняться процедура декомпрессии. Такая схема сжатия данных приемлема для сетей X.25, SMDS, Frame Relay и ATM. Маршрутизаторы корпорации CISCO поддерживают практически все режимы сжатия/декомпрессии информации, перечисленные выше.
Сжатие информации является актуальной задачей, как при ее хранении, так и при пересылке. Сначала рассмотрим вариант алгоритма Зива-Лемпеля.
2.1 Алгоритм Зива-Лемпеля (LZ*).
В 1977 году Абрахам Лемпель и Якоб Зив предложили алгоритм сжатия данных, названный позднее LZ77. Этот алгоритм используется в программах архивирования текстов compress, lha, pkzip и arj. Можно сказать, что алгоритмы семейства LZ* представляют собой более сложное обобщение простого и интуитивного способа сжатия данных, используемого в RLE. Для понимания данного алгоритма необходимо разобраться с двумя его составляющими: принципом скользящего окна и механизмом кодирования совпадений.
2.1.1 Принцип скользящего окна.
Метод кодирования согласно принципу скользящего окна учитывает уже ранее встречавшуюся информацию, то есть информацию, которая уже известна для кодировщика и декодировщика (второе и последующие вхождения некоторой строки символов в сообщении заменяются ссылками на ее первое вхождение).
Благодаря этому принципу алгоритмы LZ* иногда называются методами сжатия с использованием скользящего окна. Скользящее окно можно представить в виде буфера (или более сложной динамической структуры данных), который организован так, чтобы запоминать «сказанную» ранее информацию и предоставлять к ней доступ. Таким образом, сам процесс сжимающего кодирования согласно LZ77 напоминает написание программы, команды которой позволяют обращаться к элементам «скользящего окна», и вместо значений сжимаемой последовательности вставлять ссылки на эти значения в «скользящем окне». Размер скользящего окна может динамически изменяться и составлять 2 КБ, 4 КБ или 32 КБ. Следует также отметить, что размер окна кодировщика может быть менее или равен размеру окна декодировщика, но не наоборот.
Приведенное выше сравнение процесса кодирования с «программированием» может натолкнуть на преждевременный вывод о том, что алгоритм LZ77 относится к методам контекстного моделирования. Поэтому следует отметить, что алгоритм LZ77 принято классифицировать как метод словарного сжатия данных, когда вместо понятия «скользящего окна» используется термин «динамического словаря».
2.1.2 Механизм кодирования совпадений.
Перед тем, как перейти к рассмотрению механизма кодирования, уточним понятие совпадения (от англ. match). Рассмотрим последовательность из N элементов. Если все элементы последовательности уникальны, то такая последовательность не будет содержать ни одного повторяющегося элемента, или, иначе говоря, в последовательности не найдется хотя бы двух равных друг другу или совпадающих элементов.
|
Из за большого объема этот материал размещен на нескольких страницах:
1 2 3 4 5 6 7 |


