Глава 6 (953480), страница 12
Текст из файла (страница 12)
В формате трехмерного файла хранятся описание формы и цвета объемных моделей воображаемых и реальных объектов. Объемные модели обычно конструируются на основе векторного представления из многоугольников и гладких поверхностей, объединенных с описаниями соответствующих элементов цвета, текстуры, отражений и т.д. Программы визуализации, которые пользуются трехмерными данными - это, как правило, программы моделирования и анимации (например, Lightwave фирмы NewNek и 3D Studio фирмы Autodesk).
6.5.1. Структура графического файла
Графический файл состоит из двух основных частей: заголовка и собственно данных. В начале заголовка стоят несколько числовых значений, которые указывают спецификацию файла (TIF, BMP и т.д.). В англоязычной литературе их называют «магическими числами ».
Все программы обработки изображений различают форматы файлов не по расширениям, а по «магическим числам». Поэтому, в принципе, например, TIF-файлу можно дать любое название, что никак не отразится на возможности его считывания. Исключением из этого правила являются фото-CD файлы, которые не имеют ни магических чисел, ни обычного заголовка.
З а «магическим числом» следует основное содержание заголовка, содержащее общие сведения о файле, в том числе, высоту и ширину изображения, его тип (цветное палитровое/«в искусственных цветах» или монохромное полутоновое/«двухградационное»), с какого места начинаются в файле видеоданные, использовалось ли сжатие данных и т.д. Если файл содержит палитровое изображение, то после заголовка в большинстве случаев (но не всегда!) следует таблица цветов, в соответствии с которой элементам изображения присваиваются значения RGB-троек.
Далее записываются видеоданные. Способ их хранения зависит от типа изображения и формата файла. Поэтому, создание универсальных программ считывания и записи основных графических форматов является нетривиальной задачей. Данные (структура данных), называемые файловыми элементами, подразделяются на три категории: поля, теги и потоки. Полем называется структура данных в графическом файле, имеющая фиксированный размер. Фиксированное поле может иметь не только фиксированный размер, но и фиксированную позицию в файле. Тег представляет собой структуру данных, размер и позиция которой изменяются от файла к файлу. Поля и теги спроектированы таким образом, чтобы помочь программе обработки изображений получить быстрый доступ к нужным данным. Если позиция в файле известна, то программа получает доступ к ней непосредственно, без предварительного чтения промежуточных данных. Файл, в котором данные организованы в виде потока, не дает таких возможностей и должен читаться последовательно. Поток позволяет поддерживать блоки данных переменной длины. Теоретически могут существовать «чистые» файлы фиксированных полей (содержащие только фиксированные поля), «чистые» теговые и «чистые» потоковые файлы. Однако реально такие файлы большая редкость. Чаще применяются комбинации двух и более элементов данных. Так, известные форматы TIFF и TGA используют и теги, и фиксированные поля, а файлы формата GIF - фиксированные поля и потоки.
П ростейшим способом организации пиксельных значений в растровом файле является использование строк развертки. В таком случае, пиксельные данные в файле будут представлять собой последовательности наборов значений, где каждый набор будет соответствовать строке изображения (рис. 6.37). Несколько строк представляются несколькими наборами, записанными в файле от начала до конца. Этот метод является общим при сохранении данных изображений организованных в строки.
Несмотря на то, что векторные файлы значительно отличаются друг от друга, большинство из них также имеет стандартную базовую структуру (рис. 6.38). Непосредственно векторные данные записываются очень компактно. Так, например, в формате ASCII, три элемента изображения (окружность синего цвета, черная прямая и красный прямоугольник), могут быть записаны следующим образом: «CIRCLE, 40, 100, 100, BLUE»; «50, 136, 227, BLACK»; «RECT, 80, 65, 25, 78, RED». Здесь цифрами обозначены координаты характерных точек (например, центра тяжести) и размеры характерных линий (например, радиуса). Замкнутые линии векторных изображений могут быть заполнены цветом, который, в общем случае, не зависит от цвета контура элемента. Таким образом, каждый элемент изображения связан с двумя или более цветами, один из них задан для контура элемента, а остальные - для заполнения. Цвета заполнения, в частности, могут быть прозрачными. Если не принимать в расчет палитру и информацию об атрибутах, можно сказать, что размер векторного файла прямо пропорционален количеству содержащихся в нем объектов. Это специфическая особенность векторных файлов, поскольку размер растрового файла не зависит от сложности описанного в нем изображения (на него может повлиять только способ сжатия данных).
В завершении приведем краткий обзор основных графических форматов, использующихся в СТЗ. Наиболее простым форматом уже много лет является PCX-формат. Его основное достоинство, связанное с наглядностью представления видеоданных в структуре файла, привело к появлению многочисленных программ обработки изображений именно из PCX-формата. Самым распространенным, пожалуй, является TIF-формат, называемый также теговым форматом. В нем можно хранить все типы изображений и каждая программа обработки должна включать процедуры чтения и записи TIF-файлов. Недостатком TIF-формата является его сложность, что приводит к возникновению проблем со сжатием изображений и совместимостью файлов. Известный формат BMP, разработанный для системы Windows, широко используется в настоящее время в графических системах, хотя и имеет ряд недостатков, связанных с организацией заголовков файлов. Формат TGA (Targa) обеспечивает очень надежное кодирование видеоданных и практически исключает несовместимость между программами. Недостаток этого формата связан с тем, что разрешение изображения в файле не запоминается. Наибольшее число библиотек изображений создано в GIF-формате, разработанном фирмой Compuserve. Его задачей являлось обеспечение максимального сжатия видеоданных при их записи в память. Он эффективен при сохранении палитровых изображений, содержащих максимум 256 цветов в максимально компактной форме.
Видеофайлы часто имеют очень большой объем, и поэтому во всех перечисленных форматах они подвергаются сжатию либо автоматически, либо путем выбора соответствующей функции. Однако, применяемые при этом методы не очень эффективны, особенно если речь идет о записи изображений в естественных цветах. В этом случае весьма полезен формат JPEG, в котором сжатие данных производится методом дискретного косинусного преобразования (ДКП).
Обзор некоторых распространенных форматов хранения изображений в СТЗ представлен в табл. 6.15
Таблица 6.15. Сравнительный анализ некоторых графических форматов
Название, фирма | Тип изображения | Назначение | Платформа | Общая оценка |
РСХ (Zsoft Corporation) | Растровое (Bitmap) | Графические редакторы на IBM РС | IBM PC | Хорошо работает при обмене данными в РС-средах, хранит простые изображения, использует схему RLE сжатия данных, но аппаратно зависим |
BMP/DIB (Microsoft) | Растровое | Хранение и обработка изображений в среде Windows | То же | Стандартный формат для Windows. Аппаратно независим, использует алгоритм RLE сжатия |
TIFF (Aldus Corporation) | Растровое | Обмен данными в настольных издательских системах | IBM PC, Macintosh, рабочие станции UNIX | Используется для обмена между несвязанными приложениями или платформами, предполагает высокое качество изображения |
EPS (Adobe Systems и Aldus) | Растровый, Векторный | Обмен данными и их перенос с помощью языка PostScript | То же | Предназначен для создания технологий, позволяющих приложениям работать с PostScript-изображениями |
JPEG | Сжатый растровый | Хранение и отображение фотографических изображений | То же + аппаратная реализация | Является основным форматом для хранения цифровых фотографий. Качество регулируется Q-фактором (1 -соответствует максимальному сжатию, 100 - минимальному) |
GIF (CompuServe Incorporated) | Растровое | Передача графических данных в режиме on-line по сети CompuServe | IBM PC, рабочие станции UNIX | Отличный формат для обмена между платформами, хорош для хранения, прост в реализации, использует LZW сжатие. |
MPEG (ISO) | Движущийся растровый | Компрессия/декомпрессия видео со звуком для multimedia/hypermedia | Независим от платформ, реализуется аппаратно | Использует сложную процедуру покадрового и внутрикадрового сжатия видео и аудио информации в реальном времени, но требует существенной вычислительной мощности |
DXF | Векторный | Для САПР | Поддерживается всеми САПР-программами, включая AutoCAD |
Примечания.
-
Обозначения:
TIFF - от англ. Tag Image File Format - формат изображения с признаками, EPS - от англ. Encapsulated PоstScript - включающий PоstScript, JPEG - от англ. Joint Photographic Experts Group - объединенная группа экспертов по фотографии, GIF - от англ. Graphics Interchange Format - формат взаимообмена с графикой, MPEG - от англ. Moving Picture Expert Group - группа экспертов по движущимся изображениям, DXF - от англ. Drawing eXchange Format - формат графического обмена.
-
Формат GIF по размеру изображения и глубине цветов подобен PCX, по структуре - TIFF.
-
PostScript - универсальный, не зависящий от платформы язык описания страницы разработан фирмой Adobe Systems.
6.5.2. Сжатие изображений
Одной из важнейших процедур обработки изображений является сжатие. Ее целью является уменьшение физического размера массива данных. В СТЗ применяется сжатие как статических, так и динамических изображений. В первом случае говорят о графических файлах, во втором - о видеоизображениях.
6.5.2.1. Сжатие графических файлов
Сначала рассмотрим наиболее известные принципы сжатия статических изображений. Процедуры сжатия могут встраиваться в спецификацию графического формата или выполняться отдельно. Существует два основных подхода к сжатию изображений: сжатие без потери информации (примерами являются методы Хаффмена, LZW, группового кодирования - RLE и др.) и сжатие с потерей информации (например, дискретное косинусное преобразование - ДКП, JPEG и MPEG). В большинстве спецификаций графических форматов включены процедуры сжатия. Анализ этих процедур показывает, что чаще всего они являются модификациями нескольких базовых методов сжатия, к которым относятся: метод группового кодирования (RLE); метод Лемпела-Зива-Велча (LZW); метод CCITT (один из вариантов этого сжатия является сжатие по алгоритму ДКП, применяемого в формате JPEG), метод фрактального сжатия и ряд других.
Заметим, что сжатие растровых, векторных и метафайловых данных осуществляется по-разному. В растровых файлах сжимаются только данные изображения, заголовок и все остальные данные (таблица цветов, концовка и т.п.) всегда остаются несжатыми. При этом несжатые данные занимают очень незначительную часть растрового файла. Векторные файлы обычно не имеют «родной» формы сжатия данных, т.к. в них хранятся математические описания изображения, а не сами данные изображения. Учитывая, что представление данных в компактной форме заложено в основу любого векторного формата, их сжатие дает очень незначительный эффект.
Методы сжатия изображений разделяются на две категории: симметричные и асимметричные.
Симметричные методы используют при сжатии и распаковке примерно одинаковые алгоритмы. Поэтому длительность процедур сжатия и распаковки примерно одинаковы. Такие алгоритмы применяются в программах обмена данными (например, протоколы V42).
При асимметричном сжатии в одном направлении выполняется значительно больший объем работы, чем в другом. Обычно на сжатие затрачивается намного больше времени и системных ресурсов, чем на распаковку. Это имеет смысл, например, если создается база данных изображений - изображения сжимаются для хранения всего однажды, зато распаковываться с целью отображения они могут неоднократно.
Алгоритмы сжатия изображений базируются на модификациях стандартных кодировщиков. Таких программ существует довольно много и они, как правило, специализированные, т.е. созданы специально для обработки данных только определенных типов. Их особенностью является применение процедуры подстановки данных из словаря. Примером подобного алгоритма, получившего название неадаптивного кодировщика, является алгоритм сжатия CCITT. Он содержит статический словарь предопределенных подстрок, о которых известно, что они появляются в кодируемых данных достаточно часто. В отличие от него адаптивный кодировщик не содержит априорных эвристических правил для сжимаемых данных. Адаптивные компрессоры, такие как LZW, не зависят от типа обрабатываемых данных, поскольку строят свои словари полностью из поступивших (рабочих) данных. Они не имеют предопределенного списка статических подстрок, а, наоборот, строят фразы динамически, в процессе кодирования. Наконец, метод полуадаптивного кодирования основан на применении обоих принципов кодирования. Кодировщик работает в два прохода. При первом он просматривает все данные и строит свой словарь, при втором - выполняет кодирование. Этот метод позволяет построить оптимальный словарь прежде, чем приступить к кодированию.