Рис. 1.19. Процесс распаковки сообщения αβααβρβ (5, 4, α):
а – отсчет 5-ти символов назад; б – определение сегмента из 4-х символов,
который должен быть добавлен в конец строки; в – копирование сегмента
из 4-х символов в конец сообщения; г – добавление в конец
сообщения символа, указанного в триплете
В данном случае необходимо отсчитать в обратном направлении 5 символов, и мы попадем на второй слева символ α уже
распакованной строки. Второе число в триплете задает количество последовательных символов справа от начального, кото-
рые составляют добавляемый сегмент. В нашем примере это число 4, и это означает, что добавляемым сегментом будет
ααβρ. Копируем его в конец строки и получаем новое значение распакованной части сообщения:
αβααβρβααβρ
Наконец, последний элемент (в нашем случае это символ α) должен быть помещен в конец расширенной строки, в ре-
зультате чего получаем полностью распакованное сообщение:
αβααβρβααβρα
Теперь предположим, что сжатая версия текста имеет такой вид:
αβααβρβ (5,4, α)(0,0,δ)(8,6, β)
Вначале распакуем первый триплет, в результате чего получим сообщение следующего вида:
αβααβρβααβρα (0,0,δ) (8,6, β)
Теперь распакуем второй триплет и получим следующий результат:
αβααβρβααβραδ (8,6, β)
Обратите внимание, что второй триплет (0,0, δ) использовался только потому, что символ δ еще не встречался в этом
тексте. И наконец, распакуем третий триплет и получим полностью распакованное сообщение:
αβααβρβααβραδρβααβρβ
Чтобы запаковать сообщение с использованием системы LZ77, сначала необходимо записать начальный сегмент текста,
а затем искать в нем наиболее длинный сегмент, соответствующий очередному фрагменту оставшейся части сообщения. Это
будет комбинация, описываемая первым триплетом. Все последующие триплеты строятся по тому же методу.
Может показаться, что приведенные примеры не демонстрируют значительного сжатия, поскольку все триплеты опи-
сывают лишь небольшие сегменты сообщения. Однако при работе с длинными битовыми комбинациями есть основания по-
лагать, что достаточно длинные сегменты данных будут представлены единственными триплетами, что приведет к значи-
тельному сжатию данных.
Сжатие изображений. В разделе 1.5 было показано, что растровый формат, используемый в современных цифровых
преобразователях изображений, предусматривает кодирование изображения в формате по три байта на пиксель, что приво-
дит к созданию громоздких, неудобных в работе растровых файлов. Специально для этого формата было разработано мно-
жество схем сжатия, предназначенных для уменьшения места, занимаемого подобными файлами на диске. Одной из таких
схем является формат GIF (Graphic Interchange Format), разработанный компанией CompuServe. Используемый в ней метод
заключается в уменьшении количества цветовых оттенков пикселя до 256, в результате чего цвет каждого пикселя может
быть представлен одним байтом вместо трех. С помощью таблицы, называемой цветовой палитрой, каждый из допустимых
цветовых оттенков пикселя ассоциируется с некоторой комбинацией цветов "красный-зеленый-синий". Изменяя используе-
мую палитру, можно изменять цвета, появляющиеся в изображении.
Обычно один из цветов палитры в формате GIF воспринимается как обозначение "прозрачности". Это означает, что в
закрашенных этим цветом участках изображения отображается цвет того фона, на котором оно находится. Благодаря этому и
относительной простоте использования изображений формат GIF получал широкое распространение в тех компьютерных
играх, где множество различных картинок перемещается по экрану.
Другим примером системы сжатия изображений является формат JPEG. Это стандарт, разработанный ассоциацией Joint
Photographic Experts Group (отсюда и название этого стандарта) в рамках организации ISO. Формат JPEG показал себя как
эффективный метод представления цветных фотографий. Именно по этой причине данный стандарт используется произво-
дителями современных цифровых фотокамер. Следует ожидать, что он окажет немалое влияние на область цифрового пред-
ставления изображений и в будущем.
В действительности стандарт JPEG включает несколько способов представления изображения, каждый из которых име-
ет собственное назначение. Например, когда требуется максимальная точность представления изображения, формат JPEG
предлагает режим "без потерь", название которого прямо указывает, что процедура кодирования изображения будет выпол-
нена без каких-либо потерь информации. В этом режиме экономия места достигается посредством запоминания различий
между последовательными пикселями, а не яркости каждого пикселя в отдельности. Согласно теории, в большинстве случа-
ев степень различия между соседними пикселями может быть закодирована более короткими битовыми комбинациями, чем
собственно значения яркости отдельных пикселей. Существующие различия кодируются с помощью кода переменной дли-
ны, который применяется в целях дополнительного сокращения используемой памяти.
К сожалению, при использовании режима "без потерь" создаваемые файлы растровых изображений настолько велики,
что они с трудом обрабатываются методами современной технологии, а потому и применяются на практике крайне редко.
Большинство существующих приложений использует другой стандартный метод формата JPEG – режим "базовых строк". В
этом режиме каждый из пикселей также представляется тремя составляющими, но в данном случае это уже один компонент
яркости и два компонента цвета. Грубо говоря, если создать изображение только из компонентов яркости, то мы увидим
черно-белый вариант изображения, так как эти компоненты отражают только уровень освещенности пикселя.
Смысл подобного разделения между цветом и яркостью объясняется тем, что человеческий глаз более чувствителен к
изменениям яркости, чем цвета. Рассмотрим, например, два равномерно окрашенных синих прямоугольника, которые абсо-
лютно идентичны, за исключением того, что на один из них нанесена маленькая яркая точка, тогда как на другой – малень-
кая зеленая точка той же яркости, что и синий фон. Глазу проще будет обнаружить яркую точку, а не зеленую. Режим "базо-