Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Шпоры 1 шпоры.docx
Скачиваний:
22
Добавлен:
22.09.2019
Размер:
1.52 Mб
Скачать

16.Алгоритм брезенхема для генерации окружности

В растр разлагаются не только линейные, но и другие, более сложные функции. Разложению конических сечений, т.е. окружностей, эллипсов, парабол, гипербол посвящено значительное число работ. Наибольшее внимание, уделено окружности. Один из наиболее эффективных и простых для понимания алгоритмов генерации окружности принадлежит Брезенхему. Сначала необходимо сгенерировать только одну восьмую часть окружности. Остальные ее части могут быть получены последовательными отражениями. Если сгенерировать первый октант (от 0 до 45º против часовой стрелки), то второй октант можно получить зеркальным отражением относительно прямой у=х, что дает в совокупности первый квадрант. Первый квадрант отражается относительно прямой х=0 для получения соответствующей части окружности во втором квадранте. Верхняя полуокружность отражается относительно прямой у=0 для завершения построения. Приведем матрицы соответствующих преобразований.

Для отражения первого октанта относительно оси 

Для отражения первого квадранта относительно оси 

Для отражения верхней полуокружности относительно оси 

17.Заполнение многоугольников

Генерацию сплошных областей из простых описаний ребер или вершин будем называть растровой разверткой сплошных областей, заполнением многоугольников или заполнением контуров. Для этого можно использовать несколько методов, которые обычно делятся на две категории: растровая развертка и затравочное заполнение.

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

  Заполнение многоугольников. Многие замкнутые контуры являются простыми многоугольниками. Если контур состоит из кривых линий, то его можно аппроксимировать подходящим многоугольником или многоугольниками.   Простейший метод заполнения многоугольника состоит в проверке на принадлежность внутренности многоугольника каждого пиксела в растре. Затраты можно уменьшить путем вычисления для многоугольника прямоугольной оболочки. Как показано на рисунке проверяются только внутренние точки этой оболочки.

 

Растровая развёртка многоугольников.Можно разработать более  эффективный метод, чем тест на принадлежность внутренней части, если воспользоваться тем фактом, что соседние пикселы, вероятно, имеют одинаковые характеристики (кроме граничных ребер). Это свойство называется пространственной когерентностью. Для растровых графических устройств соседние пикселы на сканирующей строке, вероятно, имеют одинаковые характеристики. Это когерентность растровых строк.

 Характеристики пикселов на данной строке изменяются только там, где ребро многоугольника пересекает строку. Эти пересечения делят сканирующую строку на области.

  Для простого многоугольника на рисунке строка 2 пересекает  многоугольник при х=1 и х=11. Получаем три области:   x < 1;  1<=x<=11;  x > 11

строка 6 делится на 5 областей:

x < 1;1<=x<=4;4<x<9;9<=x<=11;x>11

Совсем не обязательно, чтобы точки пересечения для строки 6 сразу определялись в фиксированном порядке (слева направо). Для определения интенсивности, цвета и оттенка пикселов на сканирующей строке рассматриваются пары отсортированных точек пересечений. Для каждого интервала, задаваемого парой пересечений, используется интенсивность или цвет заполняемого многоугольника. Для интервалов между парами пересечений и крайних (от начала  строки до первой точки пересечения и от последней точки пересечения до конца строки) используется фоновая интенсивность или цвет. Дополнительная трудность возникает при пересечении сканирующей строки и многоугольника точно по вершине, как это показано на рисунке ниже.

Правильный результат можно получить, учитывая точку пересечения в вершине два раза, если она является точкой локального минимума или максимума и учитывая ее один раз в противном случае. Определить локальный максимум или минимум многоугольника в рассматриваемой вершине можно с помощью проверки концевых точек двух ребер, соединенных в вершине. Если у обоих концов координаты больше, чем у вершины, значит, вершина является точкой локального минимума. Если  меньше, значит, вершина – точка локального максимумаАлгоритмы заполнения с затравкой.В этих алгоритмах предполагается, что известен хотя бы один пиксел из внутренней области многоугольника. Алгоритм пытается найти и закрасить все другие пикселы, принадлежащие внутренней области. Области могут быть либо внутренне- либо гранично-определенными. Если область относится к внутренне-определенной, то все пикселы, принадлежащие внутренней части имеют один и тот же цвет или интенсивность, а все пикселы, внешние по отношению к области, имеют  другой цвет. Это продемонстрировано на рисунке слева. Если область относится к гранично-определенным, то все пикселы на границе области  имеют выделенное значение  или цвет, как показано на рисунке справа. Ни один из пикселов из внутренней части такой области не может иметь это выделенное значение. Алгоритмы, заполняющие внутренне-определенные области, называются внутренне-заполняющими, а алгоритмы для гранично-определенных областей гранично-заполняющими. Мы будем обсуждать гранично-заполняющие алгоритмы.

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

18. Основные методы устранения ступенчатости.

Чтобы эффективно бороться со ступенчатостью (лестничным эффектом), приводящей к искажениям в изображении. Основная причина появления лестничного эффекта заключается в том, что отрезки, ребра многоугольника, цветовые границы и т.д. имеют непрерывную природу, тогда как растровое устройство дискретно. Для представления отрезка, ребра многоугольника и т.д. на растровом устройстве необходимо начертить их в дискретных координатах, что может привести к удивительным результатам. Для предотвращения искажения следует производить выборку сигнала с частотой по крайней мере вдвое превышающей частоту сигнала. Недостаточная выборка приводит к тому, что высокопериодичные изображения визуализируются неверно. Могут быть проигнорированы также и длинные тонкие объекты. Особенно заметны такие эффекты в анимационных последовательностях кинокадров..

На следующем рисунке представлен маленький треугольник на трех кадрах анимационной последовательности. Если атрибуты пиксела определяются в его центре, то на первом кадре объект невидим, на втором видим, а на третьем снова невидим. В совокупности это будет выглядеть как мерцание объекта. 

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

На рисунке показано усреднение двух типов. Равномерное усреднение окружающих пикселов для уменьшения разрешения в 2 и в 4 раза демонстрируется в левой части рисунка. Каждый дисплейный пиксел делится на подпикселы в процессе формирования растра более высокого разрешения. Для получения атрибутов дисплейного пиксела определяются атрибуты в центре каждого подпиксела, которые затем усредняются. В некоторой степени можно получить лучшие результаты, если рассматривать больше подпикселов и учитывать их влияние с помощью весов при определении атрибутов. В левой части рисунка представлены взвешенные средние для уменьшения разрешения в 2 и в 4 раза. Для этих взвешенных средних при уменьшении разрешения в 2 раза рассматриваются 9 пикселов, а при уменьшении в 4 раза – 49.

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

Свертка и устранение ступенчатости

Распространение обсуждавшихся простых методов устранения ступенчатости (сглаживания) требует использование математического метода, называемого сверткой. Для сглаживания берется свертка сигнала, т. е. изображения, с ядром свертки. А результат используется для определения атрибутов пиксела.

Свертка задается интегралом

  

где h(e, -x) – ядро или функция свертки,у(х) – свертываемая функция, с(e) – свертка h(x) и у(х)

Математически ядро свертки равно

  h(x) = 1 ; 0<=x<=1 Отражение приводит к h(-x) =1; -1<=x<=0;Перенос на эпселент дает h(E, -x) =1;  -1<=х<=E

Поскольку как ядро, так и свертываемая функция у(х) не равны нулю лишь на конечных интервалах, то пределы интегрирования в свертке тоже конечны. Как их определить. Из рисунка ясно, что нижний предел равен максимуму начал интервалов, на которых функции не равны нулю, а верхний предел равен минимуму концов этих интервалов. Таким образом,

где обе функции параболические. Если тангенс угла наклона равен m, а не 1, то результат можно обобщить в виде mE 2/2 и (m  Е/2)(2-Е).

Операция свертки часто называется фильтрацией, а ядро свертки – функцией фильтра. В обсуждавшемся ранее простом методе с площадями изображение предварительно фильтруется. Префильтрация выравнивает атрибуты пикселов вычисленного разрешения с разрешением, большим, чем разрешение дисплея, и дальнейшее усреднение атрибутов нескольких пикселов для получения пикселов с меньшим разрешением можно рассматривать как постфильтрующую операцию. Используются также двумерные фильтры. В настоящее время исследованы простое прямоугольное, пирамидальное, конечное и двумерное гауссовские ядра свертки. Простые фильтры в виде свертки не всегда эффективны для маленьких многоугольников с площадью, меньшей площади пиксела или для длинных тонких многоугольников. Тем не менее сглаживание можно реализовать с помощью отсечения. Стороны области пиксела образуют отсекающее окно. Каждый индивидуальный многоугольник отсекается по сторонам этого окна. Для модулирования интенсивности пиксела используется отношение площади полученного в результате отсечения многоугольника к площади пиксела. Если внутри пиксела находится несколько многоугольников, то используется среднее (либо равномерное, либо взвешенное) их атрибутов для модулирования пиксела.