Паламарь_Компьютерная графика

advertisement
МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РФ
РЫБИНСКИЙ ГОСУДАРСТВЕННЫЙ АВИАЦИОННЫЙ
ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ ИМЕНИ П. А. СОЛОВЬЕВА
ЗАОЧНАЯ ФОРМА ОБУЧЕНИЯ
НАЧЕРТАТЕЛЬНАЯ ГЕОМЕТРИЯ.
ИНЖЕНЕРНАЯ И КОМПЬЮТЕРНАЯ
ГРАФИКА
Программа учебной дисциплины
и методические указания
к выполнению контрольной работы
РЫБИНСК
2012
2
УДК 681.3
Начертательная геометрия. Инженерная и компьютерная графика:
Программа учебной дисциплины и методические указания к выполнению
контрольной работы / Сост. И. Н. Паламарь; РГАТА. – Рыбинск, 2007. –
28 с. – (Заочная форма обучения / РГАТА).
Данные методические указания предназначены для выполнения
контрольной работы студентами специальности 230101 «Вычислительные
машины, комплексы, системы и сети» по дисциплине «Компьютерная
графика»
СОСТАВИТЕЛЬ
кандидат технических наук, доцент И. Н. Паламарь
ОБСУЖДЕНО
на заседании кафедры ВС
РЕКОМЕНДОВАНО
Методическим Советом РГАТА
3
ПРЕДИСЛОВИЕ
Настоящая программа составлена в соответствии с Государственным
стандартом высшего профессионального образования и Учебным планом
подготовки специалиста по направлению 654600.
ЦЕЛИ И ЗАДАЧИ ИЗУЧЕНИЯ ДИСЦИПЛИНЫ
Дисциплина преподается с целью дать студентам комплекс знаний о
теоретических основах компьютерной графики для широкого применения
методов и средств разработки вычислительных систем и программных
документов. Основные задачи изучения дисциплины:
– изучение методов визуального представления информации,
математических основ компьютерной графики и геометрического
моделирования, особенностей восприятия растровых изображений,
методов квантования и дискретизации изображений, систем кодирования
цвета, алгоритмов растрирования и геометрические преобразования;
– умение применять на практике алгоритмы компьютерной графики,
создавая геометрические модели объектов;
– ознакомление с моделями графических данных и техническими
средствами компьютерной графики.
1. СОДЕРЖАНИЕ ДИСЦИПЛИНЫ
Введение. Общие сведения о предмете. Области применения
компьютерной графики. Классификация и обзор современных
графических
систем.
1.1. Программные средства компьютерной графики и базовая
графика. Основные функции базовых программных средств (графические
объекты, примитивы и их атрибуты, графические возможности языков
высокого уровня, графические редакторы). Графические операционные
системы и оболочки (интерфейс с пользователем, системы MS WINDOWS,
X-WINDOW). Точки, линии, полигоны. Представление пространственных
форм. Методы заполнения площади. Видовые операции. Геометрические
преобразования графических объектов. Системы координат, типы
преобразований графической информации. Графические библиотеки в
языках программирования. BGI-графика.
1.2. Аппаратные средства компьютерной графики.
Технические
средства
компьютерной
графики: мониторы,
графические адаптеры, плоттеры, принтеры, сканеры. Архитектура
графических систем (персональные компьютеры, графические рабочие
4
станции, высокопроизводительные графические системы). Методы
создания и редактирования изображений. Графические процессоры,
аппаратная реализация графических функций. Понятие конвейеров ввода
и вывода графической информации.
1.3. Алгоритмы визуализации: отсечения, развертки, удаления
невидимых линий и поверхностей, закраски.
1.3.1. Математические и алгоритмические основы растровой
графики.
Алгоритмы растровой графики: Алгоритмы вычерчивания отрезков.
Простой пошаговый алгоритм разложения отрезка в растр. Алгоритмы
Брезенхема вычерчивания отрезков.
Вычерчивание кривых. Алгоритм Брезенхема для генерации окружностей.
Способы генерации растровых изображений (формирование буфера
кадра). Алгоритмы развертки. Растровая развертка в реальном времени.
Групповое кодирование, клеточное кодирование. Изображение отрезков.
Изображение литер.
Растровая
развертка
сплошных
областей.
Заполнение
многоугольников. Простой алгоритм с упорядоченным списком ребер.
Алгоритмы заполнения по ребрам, с перегородкой, со списком ребер и
флагом, с затравкой, построчный алгоритм заполнения с затравкой.
Основы методов устранения ступенчатости. Устранение лестничного
эффекта (алгоритм Брезенхема, фильтрация, отсечение, аппроксимация
полутонами).
1.3.2. Алгоритмы отсечения.
Двухмерное отсечение. Простой алгоритм определения видимости и
двумерное отсечение.
Алгоритм Сазерленда-Коэна, основанный на разбиении отрезка.
Алгоритм разбиения средней точкой.
Обобщение алгоритма двумерного отсечения выпуклым окном
произвольного положения. Алгоритм Кируса-Бека.
Внутреннее и внешнее отсечение (стирание). Отсечение невыпуклым
окном.
Трехмерное отсечение. Алгоритм отсечения средней точкой.
Трехмерный алгоритм Кируса-Бека.
Отсечение
многоугольников.
Последовательное
отсечение
многоугольника
(алгоритм
Сазерленда-Ходжмена).
Отсечение
невыпуклыми областями (алгоритм Вейлера-Азертона). Отсечение литер.
1.3.3. Алгоритмы удаления невидимых линий и поверхностей
(трехмерная графика).
Общая постановка задачи синтеза сложного трехмерного
изображения. Этапы синтеза изображения, их основное содержание и
5
решаемые
задачи.
Преобразования в трехмерном пространстве. Задача удаления
невидимых линий и поверхностей. Ее место и роль в машинной графике.
Классификация алгоритмов по способу выбора системы координат
(объектное пространство, пространство изображений). Трехмерное
представление функций. Алгоритм плавающего горизонта.
Приближение
и
воспроизведение
поверхностей.
Методы
аппроксимации поверхностей. Использование поверхностей Кунса, Безье,
поверхностей, построенных с помощью сплайнов.
Задача удаления невидимых линий в объектном пространстве.
Алгоритм Робертса.
Удаление невидимых линий в пространстве изображений. Алгоритм
Варнока (разбиение окнами).
Удаление невидимых поверхностей. Алгоритм Вейлера-Азертона
(для объектного пространства).
Алгоритм, использующий Z-буфер. Алгоритм, использующий список
приоритетов. Алгоритмы построчного сканирования. Алгоритмы
построчного сканирования для криволинейных поверхностей.
Алгоритмы определения видимых поверхностей путем трассировки
лучей. Определение затененных участков.
1.3.4. Способы создания фотореалистических изображений
Физические и психологические факторы, учитываемые при создании
реалистических изображений. Простая модель освещения.
Алгоритмы закраски: Метод Гуро закраски поверхностей (получение
сглаженного изображения). Закраска Фонга (улучшение аппроксимации
кривизны поверхности). Модель освещения со специальными эффектами:
учет направления и концентрации света, ограничение области,
освещаемой источником света.
Модель освещения, учитывающая отражение. Учет прозрачности и
преломления. Алгоритмы создания теней и учета фактуры поверхности.
Глобальная модель освещения с трассировкой лучей.
1.4. Основные функциональные возможности современных
графических систем. Способы реализации и применение интерактивных
графических систем. Организация диалога в графических системах.
Объектно-ориентированный диалог. Тенденции построения современных
графических систем: графическое ядро, приложения, инструментарий для
написания приложений. Принципы построения «открытых» графических
систем.
1.5. Прикладное использование трехмерной машинной графики и
реалистических изображений: автоматизированное проектирование,
распознавание образов, восстановление форм скрытых объектов в
медицине, тренажеры, реклама, мультипликация.
6
1.6. Графические операционные системы и оболочки. Стандарты в
области разработки графических систем. Форматы хранения графической
информации.
1.7.
Проблемы
геометрического
моделирования.
Виды
геометрических моделей и их свойства, параметризация моделей.
Геометрические операции над моделями. 2D и 3D моделирование в рамках
графических систем.
1.8. Направление современных исследований. Когнитивная
компьютерная графика.
2. ПЕРЕЧЕНЬ ЛАБОРАТОРНЫХ РАБОТ
2.1. Методы лофтинга в пакете 3D Studio Max.
2.2. Методы создания систем частиц и объемных деформаций в
пакете 3D Studio Max.
2.3. Изучение методов визуализации, анимации сцен и имитации
эффектов внешней среды в пакете 3D Studio Max.
2.4. Изучение форматов хранения графической информации.
2.5. Изучение алгоритмов сжатия изображений.
2.6. Программирование методов создания фотореалистических
изображений (закраска, текстуры) в среде Delphi.
2.7. Изучение OpenGL для создания сцен.
3. ПРИМЕРЫ ЗАДАНИЙ КОНТРОЛЬНОЙ РАБОТЫ
Вариант № 1
1. Сжать по алгоритму LZW последовательность 4-х битовых
элементов:
<4> <4> <7> <7> <7> <4> <7> <7>.
Представить пошаговое исполнение алгоритма.
2. Вычислить положение отрезка Р1(–2; 6), Р2(1; 4) после выполнения
последовательности преобразований в матричном виде:
– сжатие по оси Х в 4 раза, растяжение по оси Y в 3 раза;
– отражение относительно центра координат;
– поворот на 270º.
Начертить положение отрезка после каждого преобразования.
Рассчитать матрицу результирующего преобразования и координаты
преобразованного отрезка.
3. Построить на растре часть окружности с центром в начале
координат и радиусом 6 пикселов с помощью инкрементивного подхода.
4. Цветовые модели (в электронном виде).
7
5. Выполнить разработку анимации трехмерного объекта в
программе 3D Studio Max с использованием:
– деформаций;
– траектории движения;
– эффектов внешней среды;
– материалов;
– освещенности.
Выходные файлы: *.max, *.avi.
Привести текстовое описание разработки сцены и примененных
инструментов.
Вариант № 2
1. Разжать по алгоритму LZW последовательность символов:
<64> <3> <3> <6> <68> <67> <6> <65>.
Представить пошаговое исполнение алгоритма.
2. Вычислить положение отрезка Р1(–4; 1), Р2(2; 3) в следующей
последовательности:
1) сжатие по оси Х в 3 раза;
2) параллельный перенос по оси Х на +4 ед.;
3) поворот на 30º.
Начертить положение отрезка после каждого преобразования.
Рассчитать матрицу результирующего преобразования и координаты
преобразованного отрезка.
3. Выполнить отсечение отрезка с конечными точками Р1(3; 1),
Р2(7; 4) методом Кируса-Бека (II способ c использованием директрисы)
нерегулярным окном с вершинами
V1(0; 0), V2(3; 3), V3(6; 0).
4. Алгоритм фрактального сжатия.
5. Выполнить разработку анимации трехмерного объекта в
программе 3D Studio Max с использованием:
– деформаций;
– траектории движения;
– эффектов внешней среды;
– материалов;
– освещенности.
Выходные файлы: *.max, *.avi.
Привести текстовое описание разработки сцены и примененных
инструментов.
8
Вариант № 3
1. Сжать по алгоритму LZW последовательность 6-битовых элементов:
<5> <9> <9> <5> <9> <9> <5>.
Представить пошаговое исполнение алгоритма.
2. Выполнить преобразование отрезка Р1(–1; 1), Р2(3; –1) в
следующей последовательности (в матричном виде):
1) поворот на (–270º);
 1 0 
2) отражение 
;
0
1


3) растянуть по оси Y в 0,5 раза.
Начертить положение отрезка после каждого преобразования.
Рассчитать результирующие параметры преобразования в
матричном виде.
3. Построить на растре часть окружности с центром в точке
(–2, 1) и радиусом 7 пикселов с помощью инкрементивного метода.
4. Волновое (wavelet) сжатие (в электронном виде).
5. Выполнить разработку анимации трехмерного объекта в
программе 3D Studio Max с использованием:
– деформаций;
– траектории движения;
– эффектов внешней среды;
– материалов;
– освещенности.
Выходные файлы: *.max, *.avi.
Привести текстовое описание разработки сцены и примененных
инструментов.
Вариант № 4
1. Разжать по алгоритму LZW последовательность символов:
<64> <2> <1> <66> <66> <1> <67> <65>.
Представить пошаговое исполнение алгоритма.
2. Вычислить положение отрезка Р1(–1; 1), Р2(3; –1) после
выполнения последовательности преобразований:
1) поворот на (90º);
2) относительно оси Y;
3) сжатие по оси Х в 4 раза.
Начертить положение отрезка после каждого преобразования.
9
Рассчитать матрицу результирующего преобразования и координаты
преобразования отрезка.
3. Выполнить отсечение отрезка с конечными точками Р1(3; 1),
Р2(7; 4) методом Кируса-Бека (II способ c использованием директрисы)
нерегулярным окном с вершинами
V1(0; 0), V2(3; 3), V3(6; –2).
4. Обзор видеоадаптеров (в электронном виде).
5. Выполнить разработку анимации трехмерного объекта в
программе 3D Studio Max с использованием:
– деформаций;
– траектории движения;
– эффектов внешней среды;
– материалов;
– освещенности.
Выходные файлы: *.max, *.avi.
Привести текстовое описание разработки сцены и примененных
инструментов.
Вариант № 5
1. Сжать по алгоритму LZW последовательность 6-битовых элементов:
<5> <9> <9> <5> <9> <9> <5>.
Представить пошаговое исполнение алгоритма.
2. Выполнить преобразование отрезка Р1(–2; 1), Р2(4; –2) в системе
координат ХОY в следующей последовательности:
 1 0
1) отражение 
;
0

1


2) сжатие по оси Х в 2 раза и растяжение по оси Y в 3 раза;
3) поворот на (+90º).
Начертить положение отрезка после каждого преобразования.
Рассчитать матрицу результирующего преобразования и координаты
преобразования отрезка.
3. Построить на растре часть окружности с центром в начале
координат и радиусом 8 пикселов с помощью инкрементивного метода.
4. Алгоритм сжатия JPEG.
5. Выполнить разработку анимации трехмерного объекта в
программе 3D Studio Max с использованием:
– деформаций;
10
– траектории движения;
– эффектов внешней среды;
– материалов;
– освещенности.
Выходные файлы: *.max, *.avi.
Привести текстовое описание разработки сцены и примененных
инструментов.
Вариант № 6
1. Сжать по алгоритму LZW последовательность 5-битовых элементов:
<7> <7> <3> <7> <3> <7> <3> <7> <3>.
2. Выполнить преобразование отрезка Р1(–1; 1), Р2(3; –1) в системе
координат ХОY в следующей последовательности:
1) поворот на (–270º);
 1 0 
2) отражение 
;
0
1


3) растяжение по оси Y в 0,5 раза и сжатие по оси Х в 3 раза.
Начертить положение отрезка после каждого преобразования.
Рассчитать матрицу результирующего преобразования и координаты
преобразования отрезка.
3. Отсечение отрезков Р1(2; 5), Р2(6; 2,5) и Р1(9; 3), Р2(6; 6)
регулярным окном
xл = 2
xп =7
yн = 1
yв = 4
по алгоритму Сазерленда-Коэна.
4. Технологии мультимедиа.
5. Выполнить разработку анимации трехмерного объекта в
программе 3D Studio Max с использованием:
– деформаций;
– траектории движения;
– эффектов внешней среды;
– материалов;
– освещенности.
Выходные файлы: *.max, *.avi.
Привести текстовое описание разработки сцены и примененных
инструментов.
Вариант № 7
1. Разжать по алгоритму LZW последовательность символов:
11
<128> <9> <7> <7> <130> <132> <129>.
2. Вычислить положение отрезка P1(–1; 4), P2(2; –1) после
выполнения последовательности преобразования в матричном виде:
1) сжатие по оси X в 3 раза, растяжение по оси Y в 2 раза;
2) отражение относительно центра координат;
3) поворот на (270о).
Начертить положение отрезка после каждого преобразования.
Рассчитать матрицу результирующего преобразования и координаты
преобразованного отрезка.
3. Выполнить отсечение отрезка P1(–2; 1), P2(4; 4) нерегулярным
окном с координатами (первый способ)
V1(0; 2), V2(7; 0), V3(0; –5).
4) Основные принципы DirectX.
5. Выполнить разработку анимации трехмерного объекта в
программе 3D Studio Max с использованием:
– деформаций;
– траектории движения;
– эффектов внешней среды;
– материалов;
– освещенности.
Выходные файлы: *.max, *.avi.
Привести текстовое описание разработки сцены и примененных
инструментов.
Вариант № 8
1. Разжать по алгоритму LZW последовательность символов:
<16> <1> <4> <4> <18> <20> <17>.
2. Вычислить положение отрезка P1(–2; 6), P2(1; 4) после выполнения
последовательности преобразования в матричном виде:
1) сжатие по оси Y в 2 раза, растяжение по оси X в 2 раза;
2) отражение относительно центра координат;
3) поворот на (–90о).
Начертить положение отрезка после каждого преобразования.
Рассчитать матрицу результирующего преобразования и координаты
преобразованного отрезка.
3. Разложить в растр окружность с центром в точке (2; 0) и радиусом
8 (для третьего квадранта) по алгоритму Брезенхема.
4. Формат сжатия SVG.
12
5. Выполнить разработку анимации трехмерного объекта в
программе 3D Studio Max с использованием:
– деформаций;
– траектории движения;
– эффектов внешней среды;
– материалов;
– освещенности.
Выходные файлы: *.max, *.avi.
Привести текстовое описание разработки сцены и примененных
инструментов.
1. Сжать
пикселов:
по
Вариант № 9
алгоритму LZW последовательность
6-битовых
<3> <3> <3> <5> <5> <5> <5> <3> <3>.
Представить пошаговое исполнение алгоритма.
2. Вычислить положение отрезка P1(–4; 2), P2(1; 6) после выполнения
последовательности преобразований (в матричном виде):
1) сжатия по оси Y в 3 раза, растяжение по оси X в 2 раза;
2) отражение относительно оси X;
3) поворот на 270о.
3. Выполнить отсечение отрезка P1(0; 0), P2(12; 4) нерегулярным
окном с координатами
V1(–2; –2), V2(1; 5), V3(0; 12).
4. Аппаратные средства для поддержки компьютерной графики на
уровне процессора
5. Выполнить разработку анимации трехмерного объекта в
программе 3D Studio Max с использованием:
– деформаций;
– траектории движения;
– эффектов внешней среды;
– материалов;
– освещенности.
Выходные файлы: *.max, *.avi.
Привести текстовое описание разработки сцены и примененных
инструментов.
Вариант № 10
13
1. Сжать по алгоритму LZW последовательность 7-битовых элементов
<7> <5> <5> <7> <5> <7> <5> <7>
2. Вычислить положение отрезка P1(–2; –1), P2(4; –2) после
выполнения последовательности преобразований
1) отражение относительно оси Y;
2) сжатие по оси X в два раза и растяжение по оси Y в 3 раза;
3) поворот на (–90).
Начертить положение отрезка после каждого преобразования.
Рассчитать матрицу результирующего преобразования и координаты
преобразованного отрезка.
3. Выполнить отсечение отрезка P1(1; 2), P2(6; 5) алгоритмом
Сазерленда-Коэна регулярным окном с координатами границ
xл = 2
xп =7
yн = 1
yв = 4.
4. Формат сжатия TIFF (в электронном виде)
5. Выполнить разработку анимации трехмерного объекта в
программе 3D Studio Max с использованием:
– деформаций;
– траектории движения;
– эффектов внешней среды;
– материалов;
– освещенности.
Выходные файлы: *.max, *.avi.
Привести текстовое описание разработки сцены и примененных
инструментов.
4. СПИСОК ЛИТЕРАТУРЫ И
ПЕРЕЧЕНЬ ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ
Основной
4.1. Аммерал Л. Машинная графика на языке Си.-М.: Сол Систем,
1992.
Т.1: Принципы программирования в машинной графике.-224с.
Т.2: Машинная графика на персональных компьютерах.-232с.
Т.3: Интерактивная трехмерная машинная графика.-317с.
Т.4: Программирование графики на Турбо Си.-221с.
4.2. Роджерс Д. Алгоритмические основы машинной графики.-М:
Мир, 1989.-512с.
4.3. Роджерс Д., Адамс Дж. Математические основы машинной
графики.-М.: Машиностроение, 1980.-240с.
14
4.4. Ньюмен У., Спрулл Р. Основы интерактивной машинной
графики.- М.: Мир, 1976.-573с.
4.5. Фоли Дж., вэн Дэм А. Основы интерактивной машинной
графики.- М.: Мир, 1976. (в двух томах).
4.6. Хирн Д., Бейкер М. Микрокомпьютерная графика.- М.: Мир,
1987.-352с.
4.7. Гилой В. Интерактивная машинная графика. – М.: Мир, 1981.384с.
4.8. Эгрон Ж. Синтез изображений. Базовые алгоритмы.- М.: Радио и
связь, 1993. –216с.
4.9. Шикин Е.В., Боресков А.В., Зайцев А.А. Начала компьютерной
графики.- М.: ДИАЛОГ – МИФИ, 1993.-138с.
Дополнительный
4.10. Павлидис Т. Алгоритмы машинной графики и обработки
изображений.- М.: Радио и связь, 1986.- с.
4.11. Гардан И., Люка М. Машинная графика и автоматизация
конструирования.- М.: Мир, 1987.-272с.
4.12. Фролов А.Г., Фролов Г.В. Программирование видеоадаптеров
CGA, EGA и VGA.- М.: ДИАЛОГ – МИФИ, 1992.-288с.
4.13. Шикин Е.В., Боресков А.В. Компьютерная графика. Динамика,
реалистические изображения.- М.: ДИАЛОГ – МИФИ, 1995.-288с.
4.14. Иванов В.П., Батраков А.С. Трехмерная компьютерная графика/
Под ред. Г.М.Полищука.- М.: Радио и связь, 1995.-224с.
Программное обеспечение:
– среда программирования Delphi;
– 3D Studio MAX.
5. МЕТОДИЧЕСКИЕ УКАЗАНИЯ СТУДЕНТАМ
ПО ИЗУЧЕНИЮ ДИСЦИПЛИНЫ
5.1. МЕТОДИЧЕСКИЕ УКАЗАНИЯ ПО ВЫПОЛНЕНИЮ ЛАБОРАТОРНЫХ РАБОТ
При подготовке к лабораторным работам следует изучить методические
указания к лабораторным работам, рекомендуемую литературу, конспект
лекций. Все вопросы, связанные с выполнением лабораторных работ, подробно
рассмотрены в методических указаниях.
5.2. МЕТОДИЧЕСКИЕ УКАЗАНИЯ ПО ИЗУЧЕНИЮ ТЕОРЕТИЧЕСКОГО КУРСА
Теоретический курс изучается студентом в процессе работы на лекциях,
при этом студент конспектирует излагаемый преподавателем материал, отвечает
на вопросы, которые ставит преподаватель в процессе чтения лекций, а также в
15
процессе самостоятельной работы с рекомендуемой литературой в библиотеке
академии.
Перед лекцией следует просмотреть материалы предыдущих лекций по
данной дисциплине.
6. СПИСОК ЭКЗАМЕНАЦИОННЫХ ВОПРОСОВ
6.1 Виды преобразований между классами изображений.
6.2 Особенности зрения человека и как они используются.
6.3 Сегментация и устранение шумов.
6.4 Особенности формата GIF.
6.5 Алгоритм ЦДА.
6.6 Алгоритм Брезенхема для рисования отрезка.
6.7 Метод Сазерленда-Коэна в алгоритме простого двумерного
отсечения.
6.8 Алгоритм Сазерленда-Коэна, основанный на разбиении отрезка.
6.9 Алгоритм Спрулла-Сазерленда.
6.10 Алгоритм Кируса-Бека.
6.11 Алгоритм плавающего горизонта.
6.12 Алгоритмы, использующие понятие лицевых граней.
6.13 Алгоритм Варнока.
6.14 Алгоритм, использующий z-буфер.
6.15 Алгоритмы, использующие список приоритетов.
6.16 Алгоритмы построчного сканирования.
6.17 Алгоритм определения видимости путем трассировки лучей.
6.18 Модель освещенности. Полигональная закраска.
6.19 Метод Гуро.
6.20 Метод Фонга.
6.21 Алгоритм рендеринга трассировкой лучей.
6.22 Метод излучательности.
6.23
6.24
6.25
6.26
6.27
6.28
6.29
6.30
6.31
6.32
6.33
6.34
6.35
Моделирование текстуры. Проективный подход.
Моделирование текстуры. Процедурный подход.
Алгоритмы построения теней.
Создание эффекта прозрачности.
Алгоритм сжатия JPEG.
Алгоритм wavelet сжатия.
Основы вейвлет-анализа.
Ортогональный вейвлет-анализ.
Теория фрактального сжатия.
Алгоритм фрактального сжатия.
Цветовые модели RGB, CMYK.
Цветовые модели HSB, Lab.
Методы выделения границ на изображении.
16
6.36
6.37
6.38
6.39
Методы утончения.
Формат JPEG 2000.
OpenGL.
DirectX.
7. КОНТРОЛЬНЫЕ ВОПРОСЫ
7.1. Приведите примеры преобразований, не выводящие
изображения за пределы соответствующего класса
7.2. Почему для сглаживания изображения используются нижние
частоты?
7.3. Как повлияет на результат работы алгоритма Брезенхема для
построения линии использование вместо фукнции Ring только функции
Round или только функции Trunc как для положительных, так и для
отрицательных значений аргумента?
7.4. Модифицируйте алгоритм Брезенхема для визуализации отрезка
с использованием 4-х связных пикселов
7.5. Модифицируйте алгоритм Брезенхема для генерации в первом
квадранте отрезка c k > 1
7.6. Модифицируйте алгоритм Брезенхема для визуализации отрезка
c k<0
7.7. Измените модифицированный алгоритм Брезенхема построения
линии в соответствии с указанными рекомендациями для получения более
реалистичного изображения
7.8. Как изменится модифицированный алгоритм Брезенхема для
устранения ступенчатости не ребра многоугольника, а отрезка?
7.9. Как правильно визуализировать отрезок по модифицированному
алгоритму Брезенхема с I = 8, используя 256-цветную палитру?
7.10. Всегда ли результат заполнения многоугольника по алгоритму
с упорядоченным списком ребер совпадает с растровой разверткой в
соответствии с алгоритмом заполнения по ребрам?
7.11. Модифицируйте алгоритм заполнения с затравкой для
8-связных областей
7.12. Чем определяется максимальная глубина стека в построчном
алгоритме заполнения с затравкой?
7.13. Сравните вычислительную эффективность алгоритма простого
двумерного отсечения и алгоритма Сазерленда-Коэна, основанного на
разбиении отрезка
7.14. От чего зависит максимальное количество разбиений отрезка в
алгоритме Спрулла-Сазерленда?
17
7.15. На каких шагах алгоритма Спрулла-Сазерленда получаем
верхнюю и нижнюю оценки искомой точки пересечения?
7.16. Какая из задач в алгоритме Робертса является задачей
линейного программирования?
7.17. Модифицируйте алгоритм z-буфера для построения сечений
поверхностей и вычислите глубину каждого пиксела на сканирующей
строке пошаговым способом, если известно уравнение плоскости, несущей
многоугольник.
7.18. Каким образом реализовать алгоритмы построчного
сканирования как алгоритмы удаления невидимых линий?
7.19. С чем связана эффективность трассировки лучей в обратном
направлении?
7.20. Как изменится алгоритм обратной трассировки лучей для учета
перспективного преобразования?
7.21. Каким образом модифицировать алгоритм плавающего
горизонта для вывода полутонового изображения графика функции
7.22. Определите, какие алгоритмы, и каким образом зависят от
когерентности сцены
7.23. Определите алгоритмы удаления невидимых линий и
поверхностей, не связанные с процессом визуализации
7.24. Поясните зависимость рендеринга по методам Гуро и Фонга от
поворотов изображения
7.25. Какие алгоритмы удаления невидимых граней пригодны для
создания сцены с глобальной моделью освещения и почему?
7.26. Чем отличаются алгоритмы трассировки лучей для удаления
невидимых граней и в глобальной модели освещения?
7.27. Определите, как по методу Блинна изменится величина вектора
нормали и его возмущения, если размер объекта увеличится в три раза.
7.28. К каким эффектам при построении изображения может
привести изменение направления лучей из-за преломления?
7.29. Почему алгоритм z-буфера не позволяет учесть эффект
прозрачности?
7.30. Нужно ли для создания разных видов сцены при расчете
проекционной тени сцены заново вычислять тени объектов?
7.31. Как сократить количество теневых многоугольников в
структуре данных при нахождении проекционной тени?
7.32. Что является источником собственных теней на фрактальных
поверхностях?
18
8. МЕТОДИЧЕСКИЕ МАТЕРИАЛЫ ПО АЛГОРИТМУ LZW
В ФОРМАТЕ GIF
Введем термины, используемые в алгоритме:
Символ – в растровых изображениях это индекс, описывающий цвет
пиксела. На произвольный пиксел будем ссылаться как на K.
Строка – последовательность символов, полученная путем
конкатенации. Произвольную строку можно описать как []K.
Префикс – это часть строки, которая непосредственно предшествует
символу K.
Код – число, соответствующее строке.
Таблица строк – список уникальных элементов, содержащих код и
соответствующую ему строку.
На вход алгоритма поступает поток данных (пикселов), а на выходе
формируется поток кодов (вывода), содержащий коды. В процессе
сжатия/ разжатия формируется таблица строк. Сжатие основано на
повторении символов в потоке данных.
Алгоритм LZW для сжатия файлов в формате GIF имеет следующие
отличия от стандартного алгоритма:
1. Введен специальный код очистки, который переводит все
параметры сжатия/ разжатия и таблицы в исходное состояние. Значение
этого кода равно 2размер кода. Например, если размер кода равен 4 бита на
пиксел, то код очистки равен 16.
2. Код конца информации, который явно отмечает конец потока
данных изображения. Значение этого кода равно коду очистки + 1.
Например, 16 + 1 = 17.
3. Первый доступный код для сжатия равен коду очистки + 2. Т.е. 18.
8.1. АЛГОРИТМ СЖАТИЯ GIF
Рассмотрим последовательность шагов алгоритма на псевдокоде.
1. Инициализация таблицы строк. Запись кода очистки.
2. [] = пусто
3. К – следующий символ в потоке символов; [] + K
4. Есть ли []K в таблице строк?
5 {Да: [] := [] K;
6.
идти на (3)}
7. {Нет: добавить []K в таблицу строк;
8.
вывести код для [] в поток кодов;
9.
[]:= K}
19
10. Идти на (3)
11. Если символов больше нет: {вывести [] в поток кодов;
записать код конца информации}
Рассмотрим пример.
Предположим, что вводимые данные имеют вид:
<7> <7> <7> <8> <8> <7> <7> <6> <6>
Глубина цвета – 8 бит.
Результат сжатия приведен в таблице.
Поток данных
Pixel 0 7
Pixel 1 7
Pixel 2 7
Pixel 3 8
Pixel 4 8
Pixel 5 7
Pixel 6 7
Pixel 7 6
Pixel 8 6
Поток вывода
256
7
––
258
8
8
––
258
6
6
257
Новый элемент таблицы
––
258: 77
––
259: 778
260: 88
261: 89
––
262: 776
263: 66
Поясним работу алгоритма сжатия.
Каждый пиксел изображения (байт) будет являться символом
строки. После инициализации таблицы строк, содержащей все
односимвольные строки, получаем 256 строк (0 … 255). Коды очистки и
конца информации будут иметь значение 256 и 257 соответственно.
Строка-префикс [] пуста.
Читаем пиксел 0 в K. K = 7. Есть эта строка в таблице? Да, поскольку
таблица инициализирована всеми возможными односимвольными
строками. Присвоим []:= 7. Идем на начало цикла.
Читаем следующий пиксел 1 в K (K = 7) и получаем []K = 77. Есть ли
такая строка в таблице? Нет. Запишем код, связанный с [] – 7, в поток
вывода (поток кодов) и добавим строку []K = 77 в таблицу кодов как
элемент с номером 258. Присвоим []:= K, т.е. сохраним [] = 7, и таким
образом используем пиксел 1 как начало следующей строки.
Читаем пиксел 2 в K и получаем []K = 77. Есть ли []К в таблице? Да:
элемент с номером 258. Присвоим []:= []K = 77. Идем на начало цикла.
Читаем пиксел 3 в K и получаем []K = 778. Есть ли такая строка в
таблице? Нет. Запишем код, связанный с [] – 258: 77, в поток вывода и
добавим строку 259: 778 в таблицу кодов. Присвоим []:= K, т. е. [] = 8.
20
Читаем пиксел 4 в K и получаем []K = 88. Такой строки в таблице
нет, поэтому добавим в таблицу кодов новый элемент 260: 88, а в поток
вывода запишем код, связанный с [], т. е. – 8. Присвоим []:= K = 8.
Читаем пиксел 5 в K и получим []K = 87. Такой строки в таблице нет,
поэтому добавим в таблицу кодов новый элемент 261: 87, а в поток
вывода запишем код, связанный с [], т. е. – 8. Присвоим []:= K = 7.
Читаем пиксел 6 в K и получим []K = 77. Есть ли []К в таблице? Да:
элемент с номером 258. Присвоим []:= []K = 77. Идем на начало цикла.
Читаем пиксел 7 в K и получаем []K = 776. Такой строки в таблице
нет, поэтому добавим в таблицу кодов новый элемент 262: 776, а в поток
вывода запишем код, связанный с [], т. е. – 258. Присвоим []:= K = 6.
Читаем пиксел 8 в K и получаем []K = 66. Такой строки в таблице
нет, поэтому добавим в таблицу кодов новый элемент 263: 66, а в поток
вывода запишем код, связанный с [], т. е. – 6. Присвоим []:= K = 6.
Поскольку все пикселы считаны, запишем в поток вывода код,
связанный с [], т. е. – 6 и запишем код конца информации.
8.2. АЛГОРИТМ РАЗЖАТИЯ GIF
Рассмотрим последовательность шагов алгоритма на псевдокоде:
1. Инициализировать таблицу строк
2. Взять первый код из потока кода: тек_код
3. Вывести строку для тек_код в поток символов
4. стар_код:= тек_код
5. тек_код:= следующий в потоке кодов
6. Существует тек_код в таблице кодов?
7. {Да: вывести строку для тек_кода в поток символов
8. []:= трансляция для стар_код
9. K:=первый символ трансляции для тек_кода
10. добавить [] K в таблицу строк
11. стар_код:=тек_код}
12. {Нет: []:=трансляция для стар_код
13.
K:= первый символ из []
14.
вывести [] K в поток символов и добавить его к таблице
строк
15.
стар_код:= тек_код}
16. Идти на (5)
17. По коду конца информации вывести строку для текущего кода в
поток символов
21
Рассмотрим работу алгоритма на примере. Мы в процессе сжатия
получили поток вывода <256> <7> <258> <8> <8> <258> <6> <6> <257>.
2-1) тек_код:= 7
3-1) выведем строку для текущего кода в поток символов –7
4-1) стар_код:= тек_код= 7
5-1) тек_код:= 258
6-1) Существует в таблице? Нет.
12-1) []:= 7
13-1) K:= 7
14-1) Выводим []K= 77 в поток символов – 77.
Добавим 258: 77 в таблицу строк.
15-1) стар_код:= тек_код= 258
5-2) тек_код:= 8
6-2) код в таблице существует
7-2) выводим строку тек_код в поток символов – 8.
8-2) []:= 77 (трансляция для старого кода)
9-2) K:= 8 (первый символ трансляции текущего кода)
10-2) Добавим []K в таблицу строк 259: 778
11-2) стар_код:= тек_код= 8
5-3) тек_код:= 8
6-3) Код существует в таблице
7-3) выводим строку тек_код в поток символов – 8.
8-3) []:= 8 (трансляция для старого кода)
9-3) K:= 8 (первый символ трансляции текущего кода)
10-3) Добавим [] K в таблицу строк 260: 88
11-3) стар_код:= тек_код= 8
5-4) тек_код:= 258
6-4) Код существует в таблице
7-4) выводим строку тек_код в поток символов – 77.
8-4) []:= 8 (трансляция для старого кода)
10-4) Добавим [] K в таблицу строк 261: 87
11-4) стар_код: тек_код= 258
5-5) тек_код:= 6
6-5) Код существует в таблице
7-5) выводим строку тек_код в поток символов – 6.
22
8-5) []:= 77 (трансляция для старого кода)
9-5) K:= 6 (первый символ трансляции текущего кода)
10-5) Добавим [] K в таблицу строк 262: 776
11-5) стар_код:= тек_код= 6
5-6) тек_код:= 6
6-6) Код существует в таблице
7-6) выводим строку тек_код в поток символов – 6.
8-6) []:= 6 (трансляция для старого кода)
9-6) K:= 6 (первый символ трансляции текущего кода)
10-6) Добавим [] K в таблицу строк 263: 66
11-6) стар_код:= тек_код= 6
Коды закончились. По коду конца информации выводим строку
для текущего кода в поток символов.
По следующему коду конца информации работа алгоритма разжатия
заканчивается.
Таким
образом,
получили
поток
символов,
соответствующий исходному в примере.
9. ПРИМЕР ВЫПОЛНЕНИЯ КОНТРОЛЬНОЙ РАБОТЫ
1. Разжать по алгоритму LZW последовательность символов:
<128><9><7><7><130><132><129>
Инициализируем таблицу кодов значениями 0..127.
Резервируем коды: 128 – код очистки;
129 – код конца информации
Стр.
алг.
№
симв
Ход выполнения алгоритма
1
2
3
4
5
6
7
8
9
10
11
5
0
1
1
1
2
2
2
2
2
2
2
3
Инициализировать таблицу строк
тек_код:=9
Вывести строку для тек_код в поток символов
стар_код:= тек_код= 9
тек_код:=7
Существует в таблице? Да
Вывести строку для тек_код в поток символов
[]:= 9 (трансляция для старого кода)
K:= 7 (первый символ трансляции текущего кода)
Добавим []K в таблицу строк 130:97
стар_код:= тек_код=7
тек_код:=7
Таблиц
а строк
Поток
символов
0:0
…
127:127
128:нач
129:кнц
9
7
0:0
…
127:127
23
Стр.
алг.
№
симв
Ход выполнения алгоритма
6
7
8
9
10
11
5
6
7
8
9
10
11
5
6
7
8
9
3
3
3
3
3
3
4
4
4
4
4
4
4
5
5
5
5
5
Существует в таблице? Да
Вывести строку для тек_код в поток символов
[]:= 7 (трансляция для старого кода)
K:= 7 (первый символ трансляции текущего кода)
Добавим []K в таблицу строк 131:77
стар_код:= тек_код=7
тек_код:=130
Существует в таблице? Да
Вывести строку для тек_код в поток символов
[]:= 7 (трансляция для старого кода)
K:= 9 (первый символ трансляции текущего кода)
Добавим []K в таблицу строк 132:79
стар_код:= тек_код=130
тек_код:=132
Существует в таблице? Да
Вывести строку для тек_код в поток символов
[]:= 97 (трансляция для старого кода)
K:= 7 (первый символ трансляции текущего кода)
10
5
Добавим []K в таблицу строк 133:79
Таблиц
а строк
Поток
символов
128:нач
129:кнц
130:97
7
0:0
…
127:127
128:нач
129:кнц
130:97
131:77
0:0
…
127:127
128:нач
129:кнц
130:97
131:77
132:79
97
79
Коды закончились. По коду конца информации выводим строку
для текущего кода в поток символов. Результат:
<9><7><7><9><7><7><9>
2. Вычислить положение отрезка P1(–1; 4), P2(2; –1) после
выполнения последовательности преобразования в матричном виде:
1) сжатие по оси X в 3 раза, растяжение по оси Y в 2 раза;
2) отражение относительно центра координат;
3) поворот на 270.
Начертить положение отрезка после каждого преобразования.
Рассчитать матрицу результирующего преобразования и ординаты
преобразованного отрезка.
1
2
P1 ;
P2
.
4
1
Начальное положение отрезка изображено на рис. 1.
24
Y
6
P1
2
P2
4 6
X
Рис. 1
1. Сжатие по оси X в 3 раза, растяжение по оси Y в 2 раза
Матрица сжатия-растяжения имеет вид
dx 0
, где dx-коэффициент
0 dy
сжатия/растяжения по X а dy-коэффициент сжатия/растяжения по Y. В
нашем случае получится следующая матрица преобразования:
0.333 0
M1
. Проведем преобразование:
0
2
P1  M1 
0.333 0 1 0.33*(1)  0* x 0.333



;
0
2 4
0*(1)  2* 4
8
P2  M1 
0.333 0 2 0.333* 2  0*( 1) 0.666



0
2 1
0* 2  2*(1)
2
Результат преобразования изображен на рис. 2.
P1
Y
P2
Рис. 2.
X
25
2. Отражение относительно центра координат;
Матрица отражения относительно центра координат имеет вид
1 0
M2
. Проведем преобразование:
0 1
P1  M 2 
1 0 0.333
1*( 0.333)  0*8
0.333



;
0 1
8
0*( 0,333)  ( 1) *8
8
P2  M 2 
1 0 0.666
1*0.666  0*( 2)
0.666



0 1
2
0*0.666  ( 1) *( 2)
2
Результат преобразования изображен на рис. 3.
Y
P2
X
P1
Рис. 3.
3. Поворот на 270
Для того, чтобы осуществить поворот против часовой стрелки на
cos()  sin()
270 используем матрицу
, где -угол поворота. В нашем
sin() cos()
случае
получится
следующая
матрица
преобразования:
M3
Проведем преобразование:
P1  M 3 
0 1 0.333
0*0.333  1*( 8)
8



;
1 0
8
1*0.333  0*( 8) 0.333
P2  M 3 
0 1 0.666
0*( 0.666)  1* 2
2



.
1 0
2
1*( 0.666)  0* 2 0.666
Результат преобразования изображен на рис. 4.
0 1
.
1 0
26
Y
6
4
2
P1
P2
2 4 6
X
Рис. 4.
Расчет матрицы результирующего преобразования:
M r  M 3  M 2  M1
0 1 1 0
0*(1)  1*0
0*0  1*( 1)
0 1



;
1 0 0 1 1*(1)  0*0 0*( 1)  0*( 1) 1 0
0 1 0.333 0 0*0.333  (1) *0 0*0  (1) * 2
0
2



.
1 0
0
2
1*0.333  0*0
1*0  0* 2
0.333 0
Проверка:
0
2 1 0*(1)  (2) * 4
8



;
0.333 0
4 0.333*( 1)  0* 4 0.333
0
2 2
0* 2  (2) *(1)
2



0.333 0 1 0.333* 2  0*(1_ 0.666
Результаты совпадают.
3. Выполнить отсечение отрезка P1(–2; 0), P2(4; 3) нерегулярным
окном с координатами (первый способ)
V1(0; 2), V2(7; 0), V3(0; –5) (рис. 5).
27
Y
P2
V1
V2
P1
X
V3
Рис. 5.
По формуле уравнения прямой линии получим функции отрезка и
сторон окна:
X  X1
Y  Y1

.
X 2  X1 Y2  Y1
Подставим численные значения для вычисления функции отрезка
[P1, P2]:
X  2 Y 1

.
4  2 4 1
Упростив выражение, получаем:
Y = 0,5X + 1; [P1, P2].
Подставим численные значения для получения уравнений прямых
[V1, V2], [V2, V3] и [V1, V3]:
X 0 Y 2

; [V1, V2];
70 02
X 7 Y 0

; [V2, V3].
0  7 5  0
Упростив выражения, получим:
2
y   x  2 ; [V1, V2];
7
y
5
x  5 ; [V2, V3];
7
y  0 ; [V1, V3].
Для отсечения отрезка используем алгоритм Кируса-Бека.
28
Параметрическое описание отрезка имеет вид:
P (t )  P1  ( P2  P1 )t  [–2 0]+[6 3]t = (6t  2) i  (3t ) j ,
где i , j - единичные векторы, ориентированные вдоль осей X и Y
соответственно.
Внутренние нормали к сторонам окна равны соответственно:
V1V2:[–1 –1]; V1V3:I; V2V3:[–1 1].
Выберем на стороне V1V2 граничную точку mr [7 0] получим:
P (t )  mr  (6t – 5)i + (3t)j.
Уравнение
nr [ P (t )  mr ]  6t  5  3t  0 ;
9t = 5; t = 5/9
дает значение t = 5/9 для пересечения отрезка с выбранной стороной.
5
5
Подстановка P (5 / 9)  (6   2) i  3  j  [4/3 5/3] дает координаты
9
9
первой точки пересечения.
Выберем граничную точку mr(0, 2) на стороне V1V3. Получим
P (t )  mr  (6t – 2)i + (3t – 2)j.
Уравнение
nr [ P (t )  mr ]  6t  2  0 ;
t = 1/3.
дает значение t = 1/3 для пересечения отрезка с выбранной стороной.
Подстановка P (1/ 3)  [0 1] дает координаты второй точки пересечения.
Выберем граничную точку mr(0, –5) на стороне V2V3. Получим
P (t )  mr  (6t – 2)i + (3t– 5)j.
Уравнение
nr [ P (t )  mr ]  6t  2  3t  5  3t  3  0 ;
t = –1.
Так как значение t лежит вне интервала от 0 до 1, то оно отвергается,
следовательно, отрезок Р1Р2 не пересекает сторону V2V3.
4. Реферативный вопрос по теории приводится на диске.
5. Видеофайл с анимацией приводится на диске.
Download