Обратите внимание на цепочки битов: ни одна цепочка не совпадает целиком с началом другой, поэтому в непрерывном потоке битов всегда можно определить, какую цепочку обрабатывать и где она заканчивается.
Розовый
цвет встречается очень часто, поэтому он кодируется единственным битом 0.
Цепочки, обозначающие все остальные цвета, начинаются с единицы, поэтому в
потоке битов всегда можно отличить розовый цвет от нерозового. Желтый и черный
цвета кодируются, как и в исходном файле, тремя битами, а редко
встречающиеся остальные цвета – четырьмя и даже пятью
битами.
Таблица 1
Сжатие графических данных по алгоритму Хаффмана
Цвет |
Частота появления |
Длина цепочки |
Цепочка битов |
Розовый |
9631 |
1 |
0 |
Желтый |
3286 |
3 |
100 |
Черный |
1957 |
3 |
101 |
Зеленый |
1785 |
4 |
1100 |
Красный |
1470 |
4 |
1101 |
Синий |
873 |
4 |
1110 |
Белый |
627 |
5 |
11110 |
Серый |
371 |
5 |
11111 |
Для того чтобы оценить объем закодированного по алгоритму Хаффмана изображения, необходимо частоту появления каждого цвета умножить на длину его цепочки битов, а затем все полученные результаты сложить.
Итак,
сжатое с помощью алгоритма Хаффмана изображение будет
занимать:
9631·1 + 3286·3 + 1957·3 + 1785·4 + 1470·4 + 873·4 +
+627·5 + 371·5 = 46 862 бит / 1024 = 5 858 байт.
Исходное
изображение занимало 7 500 байт, а сжатое – 5 858 байт, т. е.
примерно на 22 % меньше. Конечно, результат не очень впечатляющий, зато
в отличие от алгоритма при сжатии изображения по RLE алгоритму
Хаффмана неважно, стоят ли одинаковые пиксели подряд или нет, важно лишь их
общее количество на изображении. Любой дисбаланс в частоте появления цветов
позволяет сократить размер, занимаемый изображением в памяти.
Алгоритм LZW, названный по инициалам его изобретателей (Lempel, Ziv, Welch), основан на замене цепочек байтов более короткими кодами. Графические данные в режиме полутонов или индексированных цветов зачастую имеют много повторяющихся цепочек. Программа, использующая алгоритм LZW, последовательно пробегает по сжимаемому файлу, и когда она обнаруживает новую цепочку, то помещает ее в таблицу и присваивает более короткий «кодовый номер». Если такая же цепочка встретится вновь, то вместо того чтобы целиком ее повторять, программа запишет в выходной файл кодовый номер. Чем чаще цепочка повторяется в файле, тем больший эффект от использования кодового номера.
Алгоритм LZW является, пожалуй, лучшим для сжатия данных в режиме индексированных цветов, полутонов или в монохромном режиме, причем чем меньше цветов, тем больше коэффициент сжатия.
Для сжатия изображений фотореалистичного качества этот алгоритм малоэффективен.
2.3.2. Сжатиеспотерями
Графические
изображения имеют преимущество по сравнению с обычными компьютерными файлами:
они могут быть модифицированы в процессе сжатия или развертывания практически
без изменения воспринимаемого
качества.
Обычно изображения попадают в компьютер при помощи сканера. Отсканированная фотография немного отличается от оригинала, так как в процессе сканирования часть информации теряется, но для человеческого глаза различия незаметны.
В
процессе сжатия с потерями также отбрасывается та часть информации, которая
меньше всего заметна человеческому глазу. Изображение, полученное после сжатия
(развертывания), будет похожим, но не идентичным исходному. Воспринимаемое
качество изменится незначительно, тем более что исходное изображение уже было
неидеальным из-за потерь части информации при
сканировании.
Наиболее популярным алгоритмом сжатия с потерями является JPEG-сжатие, разработанное объединенной группой экспертов по фотографии (Joint Photographic Experts Group).
Сжатие
с потерями основано на некоторых особенностях восприятия информации
человеческим глазом. Во-первых, человек обращает больше внимания на крупные
детали изображения. Мелкие детали, размером в один – два пикселя, воспринимаются
не очень точно, если специально не вглядываться. При просмотре изображения на
некотором расстоянии соседние пиксели вообще сливаются друг с другом. Таким
образом, небольшое искажение цвета мелких деталей вряд ли будет заметно
человеку. Во-вторых, человек лучше воспринимает яркость, чем цвет. Можно
добиться экономии, если отбросить часть информации о цвете, но сохранить информацию
о яркости. Обычно с этой
целью пиксели группируются в блоки размером 2 × 2; информация о яркости
хранится для каждого пикселя отдельно, а цвет – в общем для всех пикселей блоке
(уже одно это позволяет уменьшить хранимый объем изображения в два раза при
незначительной потере качества).
Данные, полученные после
отбрасывания малозначимой информации,
последовательно сжимаются алгоритмом группового сжатия и алгоритмом Хаффмана,
что позволяет достигнуть еще большего коэффициента сжатия.
2.4. Форматыграфическихфайлов
Для того чтобы программа могла загрузить графический файл, ей должен быть «знаком» формат этого файла, чтобы знать, что, откуда и как из него прочесть. Если программа может работать с определенным форматом, то говорят, что она поддерживает этот формат. Например, редактор Paint поддерживает форматы BMPи JPEG.
Если
формат поддерживается большим количеством программ, то он
называется распространенным, например, формат JPEG поддерживается
большинством графических редакторов, браузеров и других программ.
Некоторые форматы являются узкоспециализированными, их поддерживает только одна программа или несколько. Нередко разработчики компьютерных игр создают новые форматы файлов специально для своей игры, поэтому открыть такие файлы с помощью какого-либо графического редактора нельзя.
Формат
PCX фирмы ZSoft – один из наиболее старых и
широко поддерживаемых форматов для персонального компьютера. Благодаря простоте
формата PCX начинающие программисты пользуются именно им. Многие
профессиональные графические пакеты также поддерживают формат PCX.
Этот формат использует самый простой вид сжатия – RLE, по этой
причине он хорошо подходит для хранения рисунков и чертежей, но не годится для
хранения
фотографий.
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.