2.9.          Закраска областей

 

Существует несколько вариантов задания областей.

1)      Внутренне определенные области.

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

 

 

Рис. 2.9.1.

 

2)      Гранично-определенные области.

 

Область, граница:

а) 4 – связная;

б) 8 – связная;

 

 

Рис. 2.9.2.

 

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

 

3)      Область, заданная списком вершин (проводится граница и используется алгоритм 2).

 

Закраска гранично-связной области

 

Существует несколько алгоритмов закраски такой области. Рассмотрим два из них.

1)      Использует рекурсию. Метод прост для программирования, однако крайне неэффективен. От затравочной точки просматривают все точки. Если они не граничные, закрашивают и посылают в стек. Далее вытаскивают из стека,  и если точка не является граничной и закрашенной, делают то же самое. См. блок-схему рис.2.9.3.

рис. 2.9.3.

 

 

Рис. 2.9.4.

 

 

 

Алгоритм закраски областей, заданных списком вершин

(метод построчного сканирования)

 

Интерполяция яркости при закраске областей

О линейной интерполяции яркости  при закраски области можно говорить, если закрашиваемая фигура плоская т.е. лежит в одной плоскости, например (ХУ).

 

 

Рис. 2.9.5.

 

Плоскость определяется по трём точкам:

 

Рис. 2.9.6.

 

 

                       

               

|| || - определитель матрицы;

 

 

 

 

            A·x + B·y + D                                                A              В             D

V = - ¾¾¾¾¾¾¾  = a·x + b·y + g, где a = - ¾,  b = - ¾ , g = - ¾;

                        C                                                         С              C             C

 

V = V1 + α (х - х1)+β (у - у1), где

V – яркость в произвольной точке, V1 – яркость известная.

 

 

Предварительно производится отсечение многоугольника по полю вывода. Существуют различные задачи закраски: выпуклых многоугольников и многоугольников произвольной формы. Начнем с закраски произвольного многоугольника.

Рис.2.9.7.

 

Сначала находят ymax и ymin. Далее для текущей у-координаты находят крайнее левое и крайнее правое ребро. Начинают с крайнего левого ребра: идут вправо (и закрашивают соответствующие точки) до пересечения со следующим ребром. Также необходим анализ на наличие локальных экстремумов. В этих точках режим закраски не меняется.

 

Алгоритм работает с помощью 2-х таблиц:

1.       таблица ребер (ТР);

2.       таблица активных ребер (ТАР);

В ТР заносятся все ребра, а в ТАР лишь те ребра, которые мы пересекаем.

 

Составление ТР:

      Все ребра делятся на группы по нарастанию у-координаты, а внутри группы рёбра упорядочиваются в соответствии с нарастанием хнач. Ребро в таблицу заносится только 1 раз, горизонтальные ребра игнорируются.

 

A (1, 2)

B (4, 8)

C (8, 6)

D (7, 2)

E (5, 4)

 

 

 

Таблица рёбер:

Группа, №

Ребро

ymin

ymax

хНАЧ

хКОН

∆x

VНАЧ

VКОНЕЧ

∆V

1

АВ

 

2

8

1

4

0.5

 

 

 

 

АЕ

4

1

5

2

 

 

 

 

DC

6

7

8

0.25

 

 

 

 

DE

4

7

5

-1

 

 

 

 

 

2

 

CB

 

6

 

8

 

8

 

4

 

-2

 

 

 

 

         хКОН  ¾  хНАЧ                             VКОНЕЧ  ¾  VНАЧ

Dх = ¾¾¾¾¾¾;    DV = ¾¾¾¾¾¾¾;

         ymax   ¾  ymin                                     ymax    ¾   ymin

 

 

Алгоритм

1.       Сформировать ТР и подготовить ТАР

2.       Выбор первой координаты сканируемой строки:  у = min {ymin};

3.       Если у = уmin, то перенос группы из ТР в ТАР.

 

Таблица активных ребер (ТАР)

Ребро

уНАЧ

хНАЧ

∆х

VНАЧ

∆V

AB

2

1

0.5

 

 

AE

2

1

2

 

 

DC

2

7

0.25

 

 

DE

2

7

-1

 

 

 

4. Упорядочивание ребер в ТАР по возрастанию хНАЧ.

5. Сканирование (проводят сканирующую строку).
      а) переключение режимов по хНАЧ

б) учёт прохождения через вершины – локальные экстремумы. Если точка – локальный экстремум, то режим следует сохранить. Для отслеживания данной ситуации можно включить  в ТР уmax, при совпадении необходим дополнительный анализ.

в) проводить линейную интерполяцию яркости при закраске от (хНАЧ , VНАЧ)i  до (хНАЧ , VНАЧ)i+1

6. Удалить из ТАР те ребра, для которых справедливо у = уmax

7. Для всех элементов в ТАР произвести:  хНАЧ = хНАЧ + ∆х;  VНАЧ = VНАЧ + ∆V;

8. Переход к следующей сканирующей строке: y=y+1;

9. Проверка на окончание: если y>max{уmax}, то конец, иначе осуществить переход к  п.3).

 

Hosted by uCoz