Устранение искажений в растровых дисплеях
Рассмотрим мелкие объекты. Не используя принцип выравнивания, объекты I и III будут проигнорированы, т.к. не покрывают центр , а объект II будет высвечен в виде целого с максимальной яркостью.
Рис. 3.15
При движении объекта (см. рис) будет наблюдаться мерцание. Кадр I, III – объекта нет (по той же причине), кадр II – объект есть.
Рис. 3.16
В случае мелких объектов (соизмеримых с ) физический разбивается на несколько мнимых (разрешение увеличивается в 2 раза). Значение интенсивности физического определяется как усредненное значение интенсивностей мнимых .
Рис. 3.17
Для цветных изображений:
Рис. 3.18
Вместо 256 независимых цветов оценивается R-, G-, B- составляющие для каждого из 4 мнимых .
Сглаживание линий
Есть итальянская поговорка: “Необязательно говорить правду, главное, чтобы то, что вы скажите, хорошо звучало”.
Это относится и к сглаживанию линий; не нужно рисовать картинку идеально. Нужно, чтобы картинка лишь выглядела как настоящая. Не следует углубляться в сложную математику, чтобы получить идеально сглаженные линии, зрительная система человека видит то, что хочет видеть, так почему бы не дать ей лишь ключ к распознаванию?
Алгоритм Ву
Идея: при рисовании линий обычным образом с каждым шагом по основной оси высвечивается два по неосновной оси.
Рис. 3.19
Их интенсивность подбирается пропорционально расстоянию от центра до идеальной линии. Чем дальше т., тем < ее интенсивность. Значение интенсивности 2-ух дают в сумме 1, т.е. это интенсивность 1 , в точности попавшего на идеальную линию. Это придает линии одинаковую интенсивность на всем ее протяжении, создавая иллюзию, что точки расположены вдоль линии не по 2, а по одной в точности по идеальной линии.
Горизонтальные, вертикальные и диагональные линии не требуют сглаживания. Для других линий алгоритм Ву проходит их вдоль основной оси, подбирая координаты по неосновной оси. Смещение вдоль неосновной оси вычисляется 1 целочисленным делением (для линий с наклоном < 1 берется сам наклон, с наклоном > 1 – 1\2 наклона). Это значение называется ошибкой смещения. Ошибка накопления ( ) показывает, как далеко ушли от идеальной линии по неосновной оси, и как только она достигает критического значения, делается шаг на 1 вдоль неосновной оси. Если основной осью является X, то будут установлены 2 т. с координатами (x,y) и (x,y+1). Короче говоря, продвижение вдоль линии аналогично алгоритму Брезенхэма, только на каждом этапе устанавливается не 1 , а 2. Осталось определить их интенсивность. Ошибка смещения суммируется с ошибкой накопления.
Пусть число уровней интенсивности кратно 2,
min интенсивность — ,
max интенсивность — 0.
Старшие n битов ошибки накопления покажут необходимую интенсивность для одного из . Интенсивность 2-го пары - интенсивность . Ошибка накопления содержит соотношение расстояний от центра каждого из двух до идеальной линии.
Рис. 3.20
Заполнение области
Алгоритм построчного сканирования
Рис. 3.21
Есть область, граница которой разложена в растр. Требуется: заполнить область внутри. Пусть внутри задана точка “boundary” — значение граничных . “old” – значение внутри области до заполнения. “new” – значение внутри области новое.
Объект заключается в прямоугольную оболочку и проверяется принадлежность объекту.
Проводится построчное сканирование. Находится со значением “boundary”, , следующий за ним и имеющий значение “old” меняется на “new” и так до тех пор, пока не будет встречен еще один со значением “boundary”. После этого осуществляется переход на следующую строку.
Рис. 3.22
Недостаток: Просматривается больше , чем необходимо.
Метод заполнения с затравкой
Область называется 4-хсвязной, если из любой внутренней т. можно достичь любой другой т., двигаясь в одном из 4-х направлений.
4-х связная обл. 8-связная обл.
Рис. 3.23
Алгоритм:
1) Поместить затравочный в стек.
2) Пока стек не пуст:
а) извлечь из стека;
б) присвоить требуемое значение;
в) для каждого из соседних 4-хсвязных проверить:
- является ли он граничным;
- не присвоено ли требуемое значение.
г) проигнорировать в любом из этих двух случаев.
иначе поместить в стек.
Пример:
Рис. 3.24
Стек
0 11 12 13
1 10 2
2 3
3 2 14
4 5 13 15 14 16
6 3 1 17
7 8 3 5 18 17 16
9 10
Заполнение линиями
Для заданной т. (x,y) определяется и заполняется максимальный отрезок, содержащий эту т. и лежащий внутри области. Потом в поисках еще не заполненных проверяются отрезки, лежащие выше и ниже. Если такие находятся, то функция рекурсивно вызывается дальше. Алгоритм эффективен и для областей с отверстиями.
Дата добавления: 2016-07-18; просмотров: 1441;