
- •Министерство образования и науки Российской Федерации
- •Инструкция по мерам безопасности и правилам поведения в компьютерном классе Общее положения:
- •Методические указания по выполнению лабораторных работ
- •Лабораторная работа № 1 Основы работы с персональным компьютером Цель
- •Задание для самостоятельной подготовки
- •Основы теории
- •Задание
- •Порядок выполнения работы
- •Требования к отчету
- •Задание к работе
- •Порядок выполнения работы
- •Требования к отчету
- •Задание к работе
- •Порядок выполнения работы
- •Требования к отчету
- •100.101
- •111.000
- •Задание
- •Порядок выполнения работы
- •Контрольные вопросы
- •Задание
- •Порядок выполнения работы
- •Требования к отчету
- •Контрольные вопросы
- •Лабораторная работа № 6.
- •Задание
- •Порядок выполнения работы
- •Задание
- •Порядок выполнения работы
- •Требования к отчету
- •Задания
- •Порядок выполнения работы
- •Требования к отчету
- •Контрольные вопросы
- •Лабораторная работа № 9.
- •Задание
- •Задание
- •Порядоквыполненияработы
- •Требования к отчету
- •Задание
- •Порядок выполнения работы
- •Отчет о работе
- •Задание
- •Задание
- •Порядок выполнения работы (на примере)
- •Требования к отчету
- •Задание к работе
- •Порядок выполнения работы
- •Отчет о работе
- •Задание
- •Примеры выполнения работы
- •Требования к отчету
- •Контрольные вопросы
- •Лабораторная работа № 15
- •Задание
- •Порядок выполнения работы
- •Требования к отчету
- •Контрольные вопросы
- •Лабораторная работа № 16
- •Задание
- •Порядок выполнения работы
- •Задания
- •Требования к отчету
- •Задание
- •Порядок выполнения работы
- •Отчет о работе
- •Задание
- •Порядок выполнения работы
- •Отчет о работе
- •Задание
- •Порядок выполнения работы
- •Отчет о работе
- •Реализация последовательных списков с использованием массивов
- •Задания
- •Требования к отчету
- •Контрольные вопросы
- •Лабораторная работа № 22.
- •Задание
- •Порядок выполнения работы
- •Контрольные вопросы
- •Задание
- •Порядок выполнения работы
- •Контрольные вопросы
- •Требования к отчету
- •1.5 Алгоритм добавления звена к очереди.
- •Задание
- •Порядок выполнения работы
- •Контрольные вопросы
- •Требования к отчету
- •Задание
- •Порядок выполнения работы
- •Контрольные вопросы
- •Требования к отчету
- •Использование fread() и fwrite()
- •Задание
- •Порядок выполнения работы
- •Контрольные вопросы
- •Задание
- •Порядок выполнения работы
- •Требования к отчету
- •Контрольные вопросы
- •Лабораторная работа № 28.
- •Задание
- •Требования к отчету
- •Порядок выполнения работы
- •Контрольные вопросы
- •Задание
- •Порядок выполнения работы
- •Требования к отчету
- •Задания к работе
- •Порядок выполнения работы
- •Задание
- •Пример выполнения задания
- •Контрольные вопросы
- •Требования к отчету
- •Задание
- •Порядок выполнения работы
- •Требования к отчету
- •Контрольные вопросы
- •Лабораторная работа №33.
- •Задание
- •Порядок выполнения работы
- •Контрольные вопросы
- •Шифрование при помощи задачи о ранце
- •Популярные системы шифрования
- •Задание
- •Порядок выполнения работы
- •Контрольные вопросы
- •Требования к отчету
- •Литература
- •Internet-ресурсы
Лабораторная работа № 6.
Сжатие данных
Цель
Рассмотреть общие методы сжатие данных, а также познакомиться с технологиями сжатия изображения.
Задание для самостоятельной подготовки
Изучить основные методы сжатия данных[1], стр. 83-87, [2], стр.384.
Изучить содержание и порядок выполнения лабораторной работы.
Основы теории
В настоящий момент разработано огромное количество методов сжатия данных, каждый из которых имеет свои достоинства и недостатки. Метод, который называется кодированием длины серии, дает наилучший эффект при сжатии данных, состоящих из длинных последовательностей одинаковых элементов. Действительно, при кодировании длины серии такая последовательность заменяется кодом, обозначающим повторяющийся элемент, и числом его повторений. Например, для того чтобы обозначить, что набор битов состоит из 253 единиц, за которыми следуют 118 нулей и 87 единиц, потребуется меньше места, чем для перечисления всех 458 битов.
В некоторых случаях информация состоит из блоков данных, которые незначительно отличаются друг от друга. Например, кадры фильма, следующие друг за другом. В таких случаях используется метод относительного кодирования (relativeencoding). При таком подходе записываются различия между блоками, следующими друг за другом, а не сами блоки, то есть каждый блок кодируется на основе его отношений с предыдущим блоком.
Другим методом сокращения размера данных является частотно-зависимое кодирование (frequency-dependentencoding), в котором длина кода элемента информации обратно пропорциональна частоте использования этого элемента. Эти коды являются примерами кодов переменной длины (variable-lengthcodes), что означает, что элементы информации представлены последовательностями разной длины, в отличие от таких кодов, как Unicode, в котором все символы представлены 16-битовыми последовательностями. В английском языке буквы е, t, a и i используются чаще, чем буквы z, q и х. Поэтому при кодировании текста на английском языке можно сохранить место в памяти, если использовать короткие наборы битов для первых букв и более длинные для вторых. В результате мы получим код, в котором текст будет иметь более короткое представление, чем имел бы в коде с фиксированной длиной, таком как ASCII или Unicode. Давид Хаффман известен как открыватель алгоритма, который широко используется для создания частотно-зависимых кодов. Поэтому почти все частотно-зависимые коды, используемые сегодня, — это коды Хаффмана (Huffmancodes).
Хотя мы и назвали кодирование длины серии, относительное кодирование и частотно-зависимое кодирование общими методами кодирования данных, каждое из них все-таки имеет свою область применения. В отличие от них система сжатия Лемпеля-Зива (Lempel-Zivencoding), названная в честь ее создателей Абрахама Лемпеля и Якоба Зива, является более универсальной системой. На самом деле пользователи Сети, возможно, видели или использовали обслуживающее программное обеспечение, в котором для создания сжатых файлов, называемых zip-файлами, применяется метод Лемпеля-Зива. Система кодирования Лемпеля-Зива является примером кодирования с адаптивным словарем (adaptivedictionaryencoding). Словарем в этой системе является набор стандартных блоков, из которых построено сообщение, которое нужно сжать. Если бы мы хотели сжать текст на английском языке, то такими стандартными блоками были бы буквы алфавита. Если бы мы хотели сжать уже закодированные данные, то стандартными блоками были бы цифры 0 и 1. При адаптивном кодировании словарь может изменяться в процессе кодирования. Например, в случае с английским текстом, закодировав часть сообщения, мы можем решить добавить в словарь ing и the. Теперь каждый раз, когда в тексте встретится ing или the, они могут быть закодированы при помощи обращения к словарю один раз, а не три. Метод Лемпеля-Зива позволяет разумно и эффективно адаптировать словарь в процессе кодирования (или сжатия) данных.
В растровой графике, которая производится современными цифровыми преобразователями, изображение, как правило, представляется в формате три байта на один пиксел, что приводит к большим и трудно обрабатываемым файлам растровой графики. Для того чтобы уменьшить требования к памяти, было разработано много схем сжатия. Одна их них, разработанная компанией CompuServe, называется GIF (сокращенно от GraphicInterchangeFormat — формат графического обмена). Этот стандарт сжатия решает проблему путем сокращения количества цветов, которые могут быть приписаны пикселу, до 256. Это означает, что значение каждого пиксела можно представить с помощью одного байта, а не трех. Каждому из 256 значений пиксела при помощи таблицы, которая называется палитрой, ставится в соответствие определенное сочетание красного, зеленого и синего цветов. Изменяя палитру изображения, мы можем изменять цвета изображения.
Одному из цветов изображения в формате GIF обычно присваивается значение «прозрачный», то есть через любой участок изображения, которому присвоен этот цвет, виден фон. Вследствие этой возможности и относительной простоты формата GIF, он используется в компьютерных играх, где многочисленные изображения перемещаются по экрану.
Другой стандарт сжатия изображений называется JPEG. Он был разработан JointPhotographicExpertsGroup (Объединенная группа экспертов в области фотографии), входящей в состав организации ISO. ФорматJPEG оказался эффективным для представления цветных фотографий. На самом деле, именно этот стандарт принят производителями современных цифровых камер, и он обещает еще долгое время иметь влияние в сфере цифровых изображений.
В действительности стандарт JPEG включает в себя несколько способов представления изображений, у каждого из которых своя задача. Например, в ситуациях, когда требуется предельная точность, формат JPEG предоставляет метод «без потерь», при котором не происходит потери информации во время кодирования изображения. В соответствии с этим алгоритмом хранится различие между соседними пикселами, а не интенсивности пикселов. Такой подход основывается на предположении, что в большинстве случаев различие между соседними пикселами можно представить более коротким двоичным кодом, чем их значение (это пример относительного кодирования). Различия записываются при помощи кода переменной длины.
К сожалению, применение этого метода не дает изображений, размер которых можно легко менять, и поэтому используется редко. Вместо него используется базисный стандарт JPEG, который сокращает размер кода изображения, используя для определения состояния пикселов два параметра: яркость и цвет.
Причина такого разделения состоит в том, что человеческий глаз более чувствителен к изменениям яркости, чем к изменениям цвета. Рассмотрим, например, два синих фона, различающихся только тем, что один из них содержит небольшую яркую точку, а второй небольшую зеленую точку, яркость которой такая же, как и яркость фона. Человеческий глаз быстрее обнаружит яркую точку, чем зеленую. Базисный формат использует это свойство человеческого глаза и кодирует каждую компоненту яркости, но при этом изображение разделяется на блоки размером четыре пиксела, и записывается только средний цвет каждого блока. Следовательно, в окончательном представлении сохраняются все быстрые изменения яркости, но при этом стираются быстрые изменения цвета. Преимущество же этого метода заключается в том, что каждый блок из четырех пикселов задается только шестью значениями (4 для яркости и 2 для цвета), а не двенадцатью, как если один пиксел задается тремя значениями.
Дополнительное пространство экономится при записи изменений яркости и цвета, а не их фактических значений. Причина этого, как и в методе «без потерь», заключается в том, что по мере сканирования изображения степень различия соседних пикселов можно представить более коротким двоичным кодом, чем тот, который потребовался бы для записи фактических значений цвета. В действительности, эти различия записываются при помощи математического метода, который называется дискретным косинусным преобразованием. Мы не будем рассматривать его в этой книге. Окончательный двоичный код затем сжимается при помощи метода с кодом переменной длины.
При помощи базисного стандарта JPEG можно кодировать высококачественные цветные изображения, используя двоичный код, который занимает примерно в двадцать раз меньше памяти, чем код формата «три байта на пиксел», используемый во многих сканерах. Поэтому стандарт JPEG завоевывает все большую популярность. Однако в некоторых прикладных системах используются другие форматы. Например, формат GIF больше, чем JPEG, подходит для изображений, состоящих из блоков одного цвета с четкой границей, таких как цветные мультфильмы.
BMP - bitmap - битовое отображение. Понятие "отображение" взято из математики. В математике отображение стоит очень близко к понятию функции. Для простоты считайте, что слово bitmap - это картинка (хотя это и не так).
Изображение состоит из пикселей. Формат пикселей задаётся глубиной цвета. 32-ухбитный цвет обычно состоит из четырёх каналов: альфа (прозрачность), красный, зелёный, синий: ARGB (Alpha, Red, Green, Blue). Иногда альфа-канал не используется, в этом случае изображение всё равно может занимать 32 бита, просто при вычислениях не обращают внимания на значения одного канала. В этом случае названия каналов записываются так: XRGB.
Каждый канал занимает 8 бит (1 байт) и может принимать 256 значений: от нуля до 255.
При 32-ухбитной глубине цвета каналы в bmp записываются так: BGRA. Именно в таком порядке: синий, зелёный, красный, альфа.
Размер строки данных в изображении bmp должнен быть кратен четырём (в байтах). Если это не так, то строка дополняется нулями. Это происходит если используется 1,2,4,8,16,24 бита на канал. Например, у нас есть изображение шириной в 3 пикселя и мы используем 16-битный цвет. Ширина строки: 16*3 = 48 (6 байт). Но длина строки должна быть кратной четырём, поэтому добавляются ещё два байта и длина строки в данном примере будет равна восьми байтам. Хотя в последних двух байтах каждой строки и не будет хранится полезной информации. Нужно учитывать условие кратности размера строки четырём при работе с не 32-ухбитными изображениями.
Portable Document Format (PDF) — кроссплатформенный формат электронных документов, созданный фирмой Adobe Systems с использованием ряда возможностей языка PostScript. В первую очередь предназначен для представления в электронном виде полиграфической продукции, — значительное количество современного профессионального печатного оборудования может обрабатывать PDF непосредственно. Для просмотра можно использовать официальную бесплатную программу Adobe Reader, а также программы сторонних разработчиков. Традиционным способом создания PDF-документов является виртуальный принтер, то есть документ как таковой готовится в своей специализированной программе — графической программе или текстовом редакторе
Формат PDF позволяет внедрять необходимые шрифты (построчный текст), векторные и растровые изображения, формы и мультимедиа-вставки. Поддерживает RGB, CMYK, Grayscale, Lab, Duotone, Bitmap, несколько типов сжатия растровой информации. Имеет собственные технические форматы для полиграфии: PDF/X-1, PDF/X-3. Включает механизм электронных подписей для защиты и проверки подлинности документов. В этом формате распространяется большое количество сопутствующей документации.
TIFF (TaggedImageFileFormat) — формат хранения растровых графических изображений. Изначально был разработан компанией Aldus в сотрудничестве с Microsoft для использования с PostScript. TIFF стал популярным форматом для хранения изображений с большой глубиной цвета. Он используется при сканировании, отправке факсов, распознавании текста, в полиграфии, широко поддерживается графическими приложениями. TIFF был выбран в качестве основного графического формата операционной системы NeXTStep и из неё поддержка этого формата перешла в MacOSX.
Структура формата гибкая и позволяет сохранять изображения в режиме цветов с палитрой, а также в различных цветовых пространствах:
Бинарном (двуцветном, иногда неправильно называемом чёрно-белым)
Полутоновом
С индексированной палитрой
RGB
CMYK
YCbCr
CIE Lab
Поддерживаются режимы 8, 16, 32 и 64 бит на канал при целочисленном, а также 32 и 64 бит на канал при представлении значения пиксела числами с плавающей запятой.
Сжатие. Имеется возможность сохранять изображение в файле формата TIFF со сжатием и без сжатия. Степени сжатия зависят от особенностей самого сохраняемого изображения, а также от используемого алгоритма. Формат TIFF позволяет использовать следующие алгоритмы сжатия:
PackBits (RLE)
Lempel-Ziv-Welch (LZW)
LZ77
ZIP
JBIG
JPEG
CCITT Group 3, CCITT Group 4
При этом JPEG является просто инкапсуляцией формата JPEG в формат TIFF. Формат TIFF позволяет хранить изображения, сжатые по стандарту JPEG, без потерь данных (JPEG-LS).
Алгоритмы CCITT Group 3 и 4 предназначены для кодирования бинарных растровых изображений. Первоначально они были разработаны для сетей факсимильной связи (поэтому иногда их называют Fax 3, Fax 4). В настоящий момент они также используются в полиграфии, системах цифровой картографии и географических информационных системах. Алгоритм Group 3 напоминает RLE, так как кодирует линейные последовательности пикселов, а Group 4 — двумерные поля пикселов.
Формат EPS (Encapsulated PostScript) Формат Encapsulated PostScript можно назвать самым надежным и универсальным способом сохранения данных. Он использует упрощенную версию PostScript: не может содержать в одном файле более одной страницы, не сохраняет ряд установок для принтера. Как и в файлы печати PostScript, в EPS записывают конечный вариант работы, хотя такие программы, как Adobe Illustrator и Adobe Photoshop могут использовать его как рабочий. EPS предназначен для передачи векторов и растра в издательские системы, создается почти всеми программами, работающими с графикой. Использовать его имеет смысл только тогда, когда вывод осуществляется на PostScript-устройстве. EPS поддерживает все необходимые для печати цветовые модели, среди них такая, как Duotone, может записывать, так же, данные в RGB, обтравочный контур, информацию и треппинге и растрах, внедренные шрифты. В формате EPS сохраняют данные в буфере обмена (Clipboard) программы Adobe для обмена между собой.
Вместе с файлом можно сохранить эскиз (image header, preview). Это копия низкого разрешения в формате PICT, TIFF, JPEG или WMF, которая сохраняется вместе с файлом EPS и позволяет увидеть, что внутри, поскольку открыть файл на редакцию могут только Photoshop и Illustrator. Все остальные импортируют эскиз, подменяя его при печати на PostScript-принтере оригинальной информацией. На принтере, не поддерживающем PostScript, выводится на печать сам эскиз. Если вы работаете на Photoshop для Макинтош, сохраняйте эскизы в формате JPEG, остальные маковские программы сохраняют эскизы в формате PICT. Эти и JPEG-эскизы не могут использовать Windows-приложения. Если вы работаете на PC или не знаете, где будет использоваться файл, сохраняйте эскиз в формате TIFF (когда предоставляется выбор). CorelDRAW так же предлагает для эскиза векторный формат WMF, стоит очень осторожно пользоваться этим детищем Microsoft - до добра не доведет.
Изначально EPS разрабатывался как векторный формат, позднее появилась его растровая разновидность - Photoshop EPS. Кроме типа эскиза (TIFF, PICT, JPEG) Photoshop дает возможность выбрать способ кодирования данных. ASCII, Binery и JPEG.
В заключение следует заметить, что исследования в области сжатия данных представляют собой широкое поле деятельности. Мы обсудили несколько методов сжатия изображений из множества существующих. Кроме того, существуют различные техники сжатия звуковых и видеоданных. Например, группой MotionPictureExpertsGroup (MPEG — Экспертная группа по вопросам движущегося изображения), входящей в состав организации ISO, были разработаны методы, подобные тем, которые используются в стандарте JPEG, для того чтобы ввести стандарты кодирования (сжатия) движущихся изображений. Согласно этому алгоритму сначала кодируется первое изображение последовательности, подобно тому, как это делается в базисном стандарте JPEG, а затем при помощи методов относительного кодирования записываются оставшиеся изображения.