Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции Инженерка.docx
Скачиваний:
1
Добавлен:
01.05.2025
Размер:
5.69 Mб
Скачать

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.