
- •Введение
- •Глава 7. Стандартизация в компьютерной графике 189
- •Глава 8. Форматы графических файлов 216
- •Глава 9. Технические средства кг (оборудование кг) 265
- •Г л а в а 1. Основные понятия
- •Разновидности компьютерной графики
- •1.2. Принципы организации графических программ
- •Г л а в а 2. Растровая графика. Базовые растровые алгоритмы
- •2.1. Растровые изображения и их основные характеристики
- •Разрешающая способность в зависимости от расстояния
- •2.2. Вывод изображений на растровые устройства
- •2.3. Методы улучшения растровых изображений
- •2.21. Диагональное расположение ячеек 5x5
- •2.4. Базовые растровые алгоритмы
- •Характеристики шейдерных возможностей видеоадаптеров
- •2.5. Инструменты растровых графических пакетов
- •2.6. Преимущества и недостатки растровой графики
- •Г л а в а 3. Ве кторная графика
- •3.1. Средства создания векторных изображений
- •3.2. Сравнение механизмов формирования изображений в растровой и векторной графике
- •3.3. Структура векторной иллюстрации
- •3.4. Математические основы векторной графики
- •3.5. Элементы (объекты) векторной графики
- •3.6. Достоинства и недостатки векторной графики
- •Г л а в а 4. Фрактальная графика
- •4.1. Математика фракталов. Алгоритмы фрактального сжатия изображений
- •4.2 Обзор основных фрактальных программ
- •Г л а в а 5. Цветовые модели компьютерной графики
- •5.1. Элементы цвета
- •5.1.1 Свет и цвет
- •5.1.2. Физическая природа света и цвета
- •5.1.3. Излученный и отраженный свет
- •5.1.4. Яркостная и цветовая информация
- •5.1.5. Цвет и окраска
- •5.2. Характеристики источника света
- •5.2.1. Стандартные источники
- •5.2.2 Особенности восприятия цвета человеком
- •5.3. Цветовой и динамический диапазоны
- •5.4. Типы цветовых моделей
- •5.4.1. Аддитивные цветовые модели
- •5.4.2. Субтрактивные цветовые модели
- •5.4.3. Перцепционные цветовые модели
- •5.4.4. Системы соответствия цветов и палитры
- •5.4.5. Триадные и плашечные цвета
- •5.4.6. Цветовые режимы
- •Г л а в а 6. Реалистическое представление сцен
- •6.1 Закрашивание поверхностей
- •6.1.1. Модели отражения света
- •6.1.2. Вычисление нормалей и углов отражения
- •6.2 Метод Гуро
- •6.3 Метод Фонга
- •6.4. Имитация микрорельефа
- •6.6. Пример имитации микрорельефа методом dot3 Bump Mapping
- •6.5 Трассировка лучей
- •6.6 Анимация
- •Глава 7. Стандартизация в компьютерной графике
- •7.2 Международная деятельность по стандартизации в машинной графике
- •7.3 Классификация стандартов
- •7.4 Графические протоколы
- •7.4.1 Аппаратно-зависимые графические протоколы
- •7.4.2 Языки описания страниц
- •7.4.3 Аппаратно-независимые графические протоколы
- •7.4.4 Проблемно-ориентированные протоколы
- •7.4.5 Растровые графические файлы
- •Глава 8. Форматы графических файлов
- •8.1 Векторные форматы
- •8.2 Растровые форматы
- •8.3 Методы сжатия графических данных
- •8.5. Форматы мультимедиа
- •8.6. Преобразование файлов из одного формата в другой
- •Глава 9. Технические средства кг (оборудование кг)
- •9.1 Видеоадаптеры
- •9.2 Манипуляторы
- •9.3 Оборудование мультимедиа
- •9.4 Мониторы
- •9.5 Видеобластеры
- •9.6 Периферия
- •9.6.1 Принтеры
- •9.6.2 Имиджсеттеры
- •9.6.3 Плоттеры
- •9.7 Модемы
- •9.8 Звуковые карты
- •9.9 Сканеры
- •Планшетные сканеры
- •9.10. Цифровые фотоаппараты и фотокамеры
- •Литература
8.3 Методы сжатия графических данных
При сжатии методом RLE (Run - Length Encoding) последовательность повторяющихся величин (в нашем случае - набор бит для представления видеопикселя) заменяется парой - повторяющейся величиной и числом её повторений.
RLE - один из самых старых и простых алгоритмов компрессии графики. Основная его идея такова: если в строках растра встречаются цепочки одинаковых пикселов, например
2 2 2 2 2 2 2 135 11 11 11 11,
их можно заменить цепочкой из пары чисел - <счетчик повторений, значение>. Для отдельных пикселов, не входящих в цепочки, счетчик не нужен:
<7 2> 135 <4 11>.
Чем больше цепочек в растре и чем они длиннее, тем больше эффект сжатия.
Как программа может прочитать код RLE? Нужно как-то различать счетчик и значение. Для этого необходимо специальное кодирование. В версии RLE для PCX признаком счетчика служат единицы в двух левых битах (11xxxxxx) текущего байта кодированного мае сива. Соответственно 6 бит, которые остались, означают количество повторов (от 1 до 63) в цепочке следующего за счетчиком значения (второй байт). Таким образом, строка из 63 повторяемых байтов преобразуется в два байта, то есть для таких цепочек достигается сжатие почти в 32 раза.
Метод сжатия RLE включается в некоторые графические форматы, например, в формат PCX.
Программа сжатия файла может сначала записывать количество видеопикселей, а затем их цвет или наоборот. Поэтому возможна такая ситуация, когда программа, считывающая файл, ожидает появления данных в ином порядке, чем программа, сохраняющая этот файл на диске. Если при попытке открыть файл, сжатый методом RLE, появляется сообщение об ошибке или полностью искажённое изображение, нужно считать этот файл с помощью другой программы или преобразовать его в иной формат.
Сжатие методом RLE наиболее эффективно для изображений, которые содержат большие области однотонной закраски, и наименее эффективно - для отсканированных фотографий, так как в них нет длинных последовательностей одинаковых видеопикселей .
Метод сжатия LZW основан на поиске повторяющихся узоров в изображении.
В формате GIF для сжатия растров используется алгоритм LZW. Алгоритм LZW (Lempel-Ziv-Welch) разработан в 1984 г. Уелшем (Terry A. Welch). Этот алгоритм принадлежит к классу LZ-алгоритмов, зачинателями которых были Зив и Лемпель (Jacob Ziv, Abraham Lempel) в 1977 г.
В алгоритмах класса LZ используется словарный метод сжатия. Создается словарь, содержащий повторяемые последовательности символов (фразы), которые находятся в исходном кодируемом массиве символов. Каждая фраза получает код - порядковый номер (индекс) в словаре. Кодирование массива символов выполняется заменой фраз соответствующими индексами этих фраз из словаря.
Приведем пример кодирования. Строка байтовых данных
241 16 72 10 10 10 10 10 241 16 72 13 5
преобразуется в
241 16 72 10 259 259 256 72 13 5,
В таблице 8.6 приведено содержимое словаря для этой строки.
Таблица 8.6 Кодирование методом LZW
Код (индекс) |
Содержимое (S + с) |
Компактная запись |
|
|
|
код S |
с |
0 |
0 |
|
0 |
1 |
1 |
|
1 |
… |
… |
… |
… |
255 |
255 |
|
255 |
256 |
241 16 |
241 |
16 |
257 |
16 72 |
16 |
72 |
258 |
72 10 |
72 |
10 |
259 |
1010 |
10 |
10 |
260 |
10 1010 |
259 |
10 |
261 |
10 10 241 |
259 |
241 |
262 |
241 16 72 |
256 |
72 |
263 |
72 13 |
72 |
13 |
264 |
135 |
13 |
5 |
Сильно насыщенные узорами рисунки могут сжиматься до 0,1 их первоначального размера. Метод сжатия LZW применяется для файлов форматов TIFF и GIF; при этом данные формата GIF сжимаются всегда, а в случае формата TIFF право выбора возможности сжатия предоставляется пользователю. Существуют варианты формата TIFF, которые используют другие методы сжатия. Из-за различных схем сжатия некоторые версии формата TIFF могут оказаться несовместимыми друг с другом. Это означает, что возможна ситуация, когда файл в формате TIFF не может быть прочитан в некоторой графической программе, хотя она должна «понимать» этот формат. Другими словами, не все форматы TIFF одинаковы. Но, несмотря на эту проблему, TIFF является одним из самых популярных растровых форматов в настоящее время.
|
|
Хорошо сжимаемое изображение |
Плохо сжимаемое изображение |
Рис. 8.3. Сжатие методом RLE
Метод сжатия JPEG обеспечивает высокий коэффициент сжатия для рисунков фотографического качества. Формат файла JPEG, использующий этот метод сжатия, разработан объединенной группой экспертов по фотографии (Joint Photographic Experts Group ). Сжатие по методу JPEG сильно уменьшает размер файла с растровым рисунком (возможен коэффициент сжатия 100:1). Высокий коэффициент сжатия достигается за счет сжатия с потерями, при котором в результирующем файле теряется часть исходной информации. Метод JPEG использует тот факт, что человеческий глаз очень чувствителен к изменению яркости, но изменения цвета он замечает хуже. Поэтому при сжатии этим методом запоминается больше информации о разнице между яркостями видеопикселей и меньше - о разнице между их цветами. Так как вероятность заметить минимальные различия в цвете соседних пикселей мала, изображение после восстановления выглядит почти неизменным. Пользователю предоставляется возможность контролировать уровень потерь, указывая степень сжатия. Благодаря этому, можно выбрать наиболее подходящий режим обработки каждого изображения: возможность задания коэффициента сжатия позволяет сделать выбор между качеством изображения и экономией памяти. Если сохраняемое изображение - фотография, предназначенная для высокохудожественного издания , то ни о каких потерях не может быть и речи, так как рисунок должен быть воспроизведён как можно точнее. Если же изображение - фотография, которая будет размещена на поздравительной открытке, то потеря части исходной информации не имеет большого значения. Эксперимент поможет определить наиболее допустимый уровень потерь для каждого изображения.
Теперь рассмотрим метод кодирования изображения, принятый в JPEG, подробнее. Кодирование осуществляется за несколько шагов.
Шаг 1. 24-битное изображение из RGB преобразуется в цветовую модель YCbCr.
Зачем это нужно? Еще со времен зарождения цветного телевидения известно, что канал яркости Y (luminance) содержит значительно больший объем информации сравнительно с двумя цветовыми каналами Сb и Сr (chrominance blue and chrominance red), поэтому в телевизионных системах каналу Y предоставляется больший диапазон частот. В JPEG наибольшему сжатию подвергаются компоненты Сb и Сr.
Шаг 2. Изображение разделяется на блоки размером 8x8 пикселов, и каждый такой блок подвергается двумерному дискретному косинусному преобразованию (ДКП) - Discrete Cosine Transform (DCT).
Преобразование выполняется в отдельности для компонентов Сb и Сr, причем для Y обрабатывается блок пикселов размерностью 8x8, а для Сb и Сr делается прореживание - берется каждый второй пиксел. Что дает ДКП? Оно преобразует пространственное распределение в частотное (подобно преобразованию Фурье). В результате получаем блоки также размерами 8*8, однако, здесь является частотным коэффициентом спектра, причем коэффициенты для нижних частот располагаются в левом верхнем углу, а для высоких частот - в правом нижнем углу. Поскольку основная энергия в спектре - у нижних частот, то максимальное числовое значение будет в левом верхнем углу.
Преобразование ДКП само по себе не приводит к потерям информации, однако, если элементы спектра записываются не как дробные, а округляются до целого, то это уже даст некоторую ошибку при декодировании.
Шаг 3. Квантование. Каждый элемент блока 8*8 после ДКП будет делиться на соответствующий элемент матрицы квантования
После деления выполняется округление до ближайшего целого числа.
В стандарте JPEG имеются рекомендованные таблицы квантования отдельно для Y, Сb и Сr.
Значения коэффициентов квантования меньше в левой верхней части таблиц по сравнению с коэффициентами в правой нижней части. Фактически таблица квантования определяет цифровой фильтр, который ослабляет верхние частоты.
Указанные в стандарте таблицы не являются обязательными - любая программа файлов JPEG может использовать собственные таблицы (понятно, что тогда эти таблицы должны быть записаны в файл, иначе невозможно декодирование).
Квантование - это основной фактор сжатия в соответствии с методом JPEG. В результате деления и округления большинство элементов блока 8*8 будет равняться нулю, что способствует компактности записи блока. Чем больше значение таблицы квантования, тем вероятнее преобразование результата деления в нуль. Однако это приводит к потере информации - чем больше значащих элементов преобразуется в нуль, тем меньше результат декодирования будет похож на исходное изображение.
Шаг 4. Элементы блока 8x8 записываются в виде одномерного вектора байтов. Элементы ты выбираются "зигзагом", как показано на рис. 8.4.
Рис.8.4. Формирование одномерного вектора
Шаг 5. Кодирование вектора. Сначала вектор кодируется методом RLE. Получает код в виде таких пар: <счетчик, значение>. Здесь счетчик задает количество нулей, которые записываются перед байтом значения. Потом выполняется кодирование пар методом Хаффмана. В файл JPEG, кроме сжатых кодов, записывается также таблица Хаффмана для обеспечения дальнейшего декодирования.
Метод сжатия Хаффмана, разработанный в 1952 году, используется как составная часть в ряде схем сжатия, таких как LZ. В соответствии с этим методом сначала для каждого символа вычисляется вероятность его появления. Потом символу приписывается битовый код, длина которого зависит от этой вероятности. Символы, которые чаще встречаются, получают более короткий битовый код, а символы, которые встречаются реже - длинный код.
Существуют подформаты JPEG. Baseline Optimized - файлы несколько лучше сжимаются, но не читаются некоторыми программами. JPEG Baseline Optimized разработан специально для Интернета, все основные браузеры его поддерживают. Progressive JPEG так же разработан специально для Сети, его файлы меньше стандартных, но чуть больше Baseline Optimized. Главная особенность Progressive JPEG в поддержке аналога черезстрочного вывода.
Из сказанного можно сделать следующие выводы. JPEG’ом лучше сжимаются растровые картинки фотографического качества, чем логотипы или схемы - в них больше полутоновых переходов, среди однотонных заливок же появляются нежелательные помехи. Лучше сжимаются и с меньшими потерями большие изображения для web или с высокой печатной резолюцией (200-300 и более dpi), чем с низкой (72-150 dpi), т.к. в каждом квадрате 8х8 пикселов переходы получаются более мягкие, за счет того, что их (квадратов) в таких файлах больше. Нежелательно сохранять с JPEG-сжатием любые изображения, где важны все нюансы цветопередачи (репродукции), так как во время сжатия происходит отбрасывание цветовой информации. В JPEG’е следует сохранять только конечный вариант работы, потому что каждое пересохранение приводит ко все новым потерям (отбрасыванию) данных и превращении исходного изображения с кашу.
Обобщенная информация о методах сжатия, используемых в растровых форматах файлов, приведена в таблице 8.7.
Таблица 8.7. Растровые форматы графических файлов
Название формата |
Программы, которые могут открывать файлы |
Метод сжатия |
BMP Windows Device Independent Bitmap |
Все программы WINDOWS, которые используют растровую графику |
RLE для 16- и 256- цветных изображений (по желанию) |
PCX Z - Soft PaintBrush |
Почти все графические приложения для PC |
RLE (всегда) |
GIF Graphic Interchange Format |
Почти все растровые редакторы; большинство издательских пакетов; векторные редакторы, поддерживающие растровые объекты |
LZW (всегда) |
TIFF Tagged Image File Format |
Большинство растровых редакторов и настольных издательских систем; векторные редакторы, поддерживающие растровые объекты |
LZW (по желанию) и др. |
TGA TrueVision Targa |
Программы редактирования растровой графики |
RLE (по желанию) |
IMG Digital Research GEM Bitmap |
Некоторые настольные издательские системы и редакторы изображений WINDOWS |
RLE (всегда) |
JPEG Joint Photographic Experts Group |
Последние версии программ редактирования растровой графики; векторные редакторы, поддерживающие растровые объекты |
JPEG (можно выбрать степень сжатия) |
8.4. 3D-форматы
В настоящее время более 30 компаний-участниц 3DIF (в частности, Intel, Adobe, Microsoft) ведут совместную разработку стандартного промышленного формата хранения 3D графики - U3D (Universal 3D Format). Первая версия формата появилась в 2004 году.
Приведем краткую характеристику некоторых популярных форматов, которые содержат в себе описание трехмерных объектов.
Формат VRML
VRML (язык моделирования виртуальной реальности - Virtual Reality Modeling Language) - графический формат, который базируется на подмножестве Open Inventor фирмы Silicon Graphics. Он предназначен для описания трехмерных изображений и обмена ими в сети World Wide Web.
Язык VRML, разработанный Gavin Bell, Rick Carey, Mark Pesce и Tony Parisi, стал первым языком трехмерного моделирования для Web. В 1995 была создана группа VAG (VRML Authoring Group) и появилась окончательная редакция спецификации VRML 1.0. В 1997 году технологию поддержали в своих браузерах как Microsoft, так и Netscape. ISO одобрила вторую версию спецификации как международный стандарт VRML 97 (или ISO/IEC 14772-1).
VRML-файл имеет расширение .WRL. Он использует формат ASCII и представляет собой обычный текстовый файл со списком объектов, которые названы узлами (nodes). К узлам VRML 2.0, в частности, относятся ЗD-геометрия, свойства света, который создается с помощью VRML, файлы изображений формата JPEG, видеофайлы формата MPEG, звуковые файлы формата MIDI, текстовые документы формата HTML.
Перечень некоторых узлов VRML 2.0 приведен в таблице 8.8.
Таблица 8.8 Перечень узлов VRML
Узлы VRML 2.0 |
Состав |
Grouping Nodes - группируемые узлы (узлы, которые могут иметь в себе несколько узлов) |
Anchor, Billboard, Collision, Transform |
Special Groups - узлы специальной группы |
Inline, LOD, Switch |
Common Nodes - общие узлы (узлы, которые могут входить в группируемые узлы) |
AudioClip, DirectionalLight, PointLight, Script, Shape, Sound, SpotLighl, Worldlnfo |
Sensors - узлы сенсоров |
CylinderSensor, PlaneSensor, Proximity-Sensor, SphereSensor, TimeSensor, Touch-Sensor, VisibilitySensor |
Geometry - узлы геометрии |
Box, Cone, Cylinder, Extrusion, ElevationGrid, IndexedFaceSet, IndexedLineSet, PointSet, Sphere. Text |
Формат 3DS
Это один из наиболее распространенных форматов для ЗD-графики. Файлы формата 3DS были стандартными файлами программы 3D Studio, еще когда она работала под DOS.
В 3D Studio MAX появился другой формат сохранения - МАХ, но для разработки игр этотновый формат оказался неудобным. Вместе с тем формат 3DS оказался пригодным для этойцели: кроме самих трехмерных моделей (которые представляют собой каркасные сетки), онхранит их положение в мировых координатах, координаты текстур, цвета вершин, ключевые кадры анимации, данные о свойствах материалов и атмосферные эффекты. С помощью этого формата можно хранить модели и целые карты (только скриптовые команды приходится хранить в отдельности).
Подчеркнем, что при сохранении 3DS-файлов можно указать, чтобы координаты текстур хранились вместе с моделью. После этой операции наложение текстуры происходит качественнее, хотя все же могут возникать швы на стыках разных текстур. Формат 3DS применим для любых видов игровых моделей. Он широко используется для обмена данными между системами трехмерного моделирования.
Форматы MDL, MD2 и MD3
Эти форматы предназначены для хранения анимационных моделей, в особенности анимации людей. Все три формата открыты, ими может воспользоваться любой желающий. В них хранятся модели и данные про "псевдоскелетную" анимацию (следует заметить, что в MD3 не поддерживается хранение сеток и текстуры в одном файле). Анимации моделей сохраняются в этих форматах в трехмерных кадрах, причем каждому кадру соответствует своя полноценная модель. Размер файлов при этом возрастает пропорционально количеству кадров анимации и может оказаться великоватым для серьезных игр, впрочем, форматы MDL, MD2 и MD3 можно довольно сильно сжать.
Формат SMD
В файлах формата SMD представлется настоящая скелетная анимация. Это приводит к уменьшению размеров файлов и улучшению качества анимации. Система хранения файлов имеет некоторые особенности. Во-первых, необходим ключевой SMD-файл. В нем хранится сама модель без анимации. Его необходимо загружать в первую очередь. Во-вторых, необходимы анимационные данные о модели, которые сохраняются в других файлах (один файл на одну анимацию). Этот формат обеспечивает высокое качество анимации.
Формат X
Microsoft DirectX .X формат файлов - это "родной" формат трехмерных моделей для DirectX. Он использовался только Direct3D:RM, но и Dirеct3D:IM можно было "принудить" работать с этим форматом. Direct3D:Retained Mode (Direct3D:RM) - это набор API, созданный для более легкого программирования трехмерной графики (сравнительно с более низкоуровневым Direct3D:Immediate Mode (Direct3D:IM), на котором основан сам Direct3D:RM). Direct3D:RM имеет набор инструментов для загрузки и манипулирования форматом трехмерных моделей X. С появлением DirectX 8 работать стало значительно проще. Раньше Direct3D был связан с DirectDraw, но, начиная с Direct 8, развитие этого компонента остановлено, и DirectfD стал полностью самодостаточным средством вывода графики в DirectX. Теперь он называется DirectXGraphics. Однако в составе SDK (Software Development Kit) есть файл ddraw.h, чтобы пользователи имели возможность и дальше работать с DirectDraw. В DirectX SDK файлы этого формата имеют расширение .X.
Формат X - структурно - и контекстно-независимый формат. Он управляется шаблоном и может использоваться любой клиентской программой. С его помощью описываются геометрические данные, иерархия фреймов, анимация.
Рассмотрим вкратце особенности формата Х-файла, используя материалы.
Ниже показано, какие слова зарезервированы и не должны использоваться.
ARRAY |
DWORD |
UCHAR |
BINARY |
FLOAT |
ULONGLONG |
BINARY.RESOURCE |
SDWORD |
UNICODE |
CHAR |
STRING |
WORD |
CSTRING |
SWORD |
|
DOUBLE |
TEMPLATE |
|
В начале потока данных обязательно должен быть заголовок, имеющий переменную длину.
Значения заключены в кавычки, чтобы обратить внимание на то, что значения размером в 4 байта должны иметь 4 символа
Пример заголовка:
Xof 03txt 0064
При создании файлов как в формате 3DS, так и в формате X, вводится только имя текстуры. Сами текстуры (преимущественно в формате BMP) хранят в виде отдельных файлов на диске. Удобство формата X состоит, в частности, в том, что, вы можете рисовать свои модели в Kinetix 3D Studio МАХ, экспортировать их в формат 3DS и получать модели в формате X с помощью утилиты 3dsconv, которая осуществляет конвертирование модели из популярного формата 3DS в формат X.