Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Шпоры по компьютерной графике [по билетам].doc
Скачиваний:
70
Добавлен:
02.05.2014
Размер:
805.89 Кб
Скачать

8. Алгоритмы архивации без потерь: rle, lz/lzw, Хаффман.

Алгоритм RLE.

Изображение в нем вытягивается в цепочку байт по строкам растра. Само сжатие в RLE происходит за счет того, что в исходном изображении встречаются цепочки одинаковых байт. Замена их на пары <счетчик повторений, значение> уменьшает избыточность данных. В данном алгоритме признаком счетчика служат единицы в двух верхних битах считанного файла. Оставшиеся 6 бит расходуются на счетчик, который может принимать значения от 1 до 64. Строку из 64 повторяющихся байтов мы превращаем в два байта, т.е. сжимаем в 32 раза. Алгоритм рассчитан на деловую графику – изображения с большими областями повторяющегося цвета. Ситуация, когда файл увеличивается, для этого простого алгоритма не так уж редка, например, при обработке цветных фотографий. Для того чтобы изображение увеличилось в два раза, в нем значения всех пикселей должны быть больше двоичного 11000000 и подряд попарно не повторяться. Второй вариант этого алгоритма имеет больший максимальный коэффициент архивации и меньше увеличивает в размерах исходный файл. Признаком повтора в данном алгоритме является единица в старшем разряде соответствующего байта. В лучшем случае этот алгоритм сжимает файл в 64 раза, в худшем увеличивает на 1/128.

Алгоритм LZ/LZW.

Сжатие в нем в отличие от RLE осуществляется уже за счет одинаковых цепочек байт. Существует довольно большое семейство LZ-подобных алгоритмов. Один из достаточно простых вариантов этого алгоритма, например, предполагает, что во входном потоке идет либо пара <счетчик, смещение относительно текущей позиции>, либо просто <счетчик> пропускаемых байт и сами значения байтов. При разархивации для пары <счетчик, смещение> копируются <счетчик> байт из выходного массива, полученного в результате разархивации, на <смещение> байт раньше, а <счетчик> (т.е. число равное счетчику) значений “пропускаемых” байт просто копируются в выходной массив из входного потока. Данный алгоритм является несимметричным по времени, поскольку требует полного перебора буфера при поиске одинаковых подстрок. В результате сложно задать большой буфер из-за резкого возрастания времени компрессии. Однако потенциально построение алгоритма, в котором на <счетчик> и на <смещение> будет выделено по 2 байта (старший бит старшего байта счетчика – признак повтора строки / копирования потока), даст нам возможность сжимать все повторяющиеся подстроки размером до 32Кб в буфере размером 64Кб. В пределе, поскольку максимальное сжатие мы получаем, превращая 32Кб буфера в 4 байта, а буфер такого размера будет накоплен не сразу. Однако минимальная подстрока для которой выгодно проводить сжатие, должна состоять в общем случае минимум из 5 байт, что и определяет малую ценность данного алгоритма.

В алгоритмах семейства LZW может использоваться дерево для представления и хранения цепочек. Процесс сжатия выглядит достаточно просто. Последовательно считываются символы входного потока и проверяются, есть ли в созданной таблице строк такая строка. Если строка есть, то считывается следующий символ, а если строки нет, то заносится в поток код для предыдущей найденной строки, строка помещается в таблицу, и поиск начинается снова.

Алгоритм Хаффмана – один из классических алгоритмов. Использует только частоту появления одинаковых байт в изображении. Сопоставляет символам входного потока, которые встречаются большее число раз, цепочку бит меньшей длины, и, напротив, встречающимся редко – цепочку большей длины. Для сбора статистики требует двух проходов по изображению. Классический алгоритм Хаффмана требует записи в файл таблицы соответствия кодируемых символов и кодирующих цепочек.

(Вопрос)Удаление скрытых линий и поверхностей. Методы оптимизации, понятие когерентности.

коге­рентность (от английского coherenceсвязность). Выделяют не­сколько типов:

• когерентность в картинной плоскости — если данный пиксель соответствует точке грани Р, то скорее всего соседние пиксе­ли также соответствуют точкам той же грани;

• когерентность в пространстве объектов - если данный объект (грань) видим (невидим), то расположенный рядом объект (грань) скорее всего также является видимым (невидимым).

• временная: грани, видимые в данном кадре, ско­рее всего будут видимы и в следующем; аналогично грани, невидимые в данном кадре, скорее всего будут невидимы и в следующем.

Методы оптимизации: Отсечение нелицевых граней

Рассмотрим многогранник, для каждой грани которого задан единичный вектор нормали. Если вектор нормали грани n составляет с вектором l, задающим направление проектирования, тупой угол, то эта грань заведомо не может быть видна. Такие грани называются нелицевыми. Если угол является острым, грань называется лицевой.

Когда объекты невыпуклые или в сцене присут­ствует несколько объектов, они могут частично перекрываться или закрывать друг друга. В та­кой ситуации применяться методы сортировки - можно по удалённости граней от точки зрения расположить их в некотором порядке и после этого изобра­жать эти грани по степени их близости.

Не­лицевые грани всегда не видны. Ребра между нелицевыми гранями также всегда не видны. Ребро между лицевой и нелицевой гранями вполне может быть и видимым.

Ограничивающие тела Опишем вокруг каждого объекта тело достаточно простого вида. Если эти тела не пересекаются, то и содержащиеся внутри них объек­ты пересекаться не будут. Если описанные тела пересе­каются, то сами объекты при этом не обязательно пересекаются.

В качестве ограничивающих тел чаще всего используются пря­моугольные параллелепипеды с ребрами, параллельными координат­ным осям.

Разбиение пространства картинной плоскости

Каждой клетке разбиения ставится в соответствие список тех объектов, проекции которых пересекают ее. Для отыска­ния всех объектов, которые закрывают рассматриваемый объект при проектировании, проверяются только объекты, попадающие в те же клетки картинной плоскости, что и проекция данного объекта.

Иерархические структуры Сначала ограни­чивающее тело описывается вокруг всех объектов. На следующем этапе объекты разбиваются на несколько компактных групп и вокруг каждой из них описывается свое ограничивающее тело. Далее каждая из групп снова разбивается на подгруппы, вокруг каждой из них строится ограничивающее тело и т. д. В результате получается дере­во, корнем которого является тело, описанное вокруг всей сцены.

Сравнения объектов начинаются с корня. Если сравнение не да­ет положительного ответа, то все тела можно сразу отбросить. В про­тивном случае проверяются все его прямые потомки, и если какой-либо из них не дает положительного ответа, то все объекты, содер­жащиеся в нем, сразу же отбрасываются.

Билет 25