Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции в формате doc / Курс лекций_новый_1.doc
Скачиваний:
40
Добавлен:
20.05.2014
Размер:
1 Мб
Скачать
      1. Области и алгоритмы по их заполнению

Различают следующие типы областей:

  • внутренне - определенные области - области заданные своими внутренними значениями, т.е. все внутренние пэлы имеют одно определение (old) и ни один граничный не имеет этого значения;

4-х связные внутренне-определенные области

8-и связные внутренне-определенные области

Рис. 6-6

Внутренние определенные области делятся на:

  1. четырехсвязные - каждый пэл имеет связь с другими по принципу "вверх- вниз" , "слева-справа";

  2. восьмисвязные области – каждый пэл имеет связь по восьми направлениям.

В зависимости от области используют тот или другой алгоритм.

  • граничноопределенные области - области , заданные своими граничными значениями ( boundaries);

Рис. 6-7

Гранично-определённые области делятся на:

  1. четырехсвязные;

  2. восьмисвязные.

Связность относиться к внутренним пэлам , т.е. для внутреннего пэла 4-х связной области недоступны внешние.

  • области, задаваемые многоугольниками

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

        1. Алгоритм построчного сканирования

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

Рисунок???

Данный алгоритм ориентирован на векторное представление изображения (без закрашивания области).

        1. Простой рекурсивный алгоритм ( затравочное заполнение )

Данный алгоритм Предназначен для заполнения 4-х связной внутренне – определенной области.

Стратегия – определение значения соседнего пэла и рекурсивное обращение к процедуре если он принадлежит области.

Пример:

procedure FLOOD_FILL_4(x , y { начальная точка }, old , new { старое и новое значения пэла} : integer )

begin

if READ_P ( x , y ) = old { чтение пэла } then

begin

WRITE_P ( x , y , new ) ; { смена значения }

{ продвижение по всем 4-м направлениям }

FLOOD_FILL_4( x , y – 1 , old , new ) ;

FLOOD_FILL_4( x , y + 1 , old , new ) ;

FLOOD_FIIL_4( x – 1 , y , old , new ) ;

FLOOD_FILL_4( x + 1 , y , old , new ) ;

end

end

Задание:

  1. Написать подпрограмму READ_P аналогично WRITE_P (см. выше) для привязки программ к системе координат экрана;

Рис. 6-8

  1. Модифицировать алгоритм для 8-ми связной области.

        1. Алгоритм заполнения многоугольников

Алгоритмы заполнения многоугольников деляться на две группы :

  • методы растровой развертки;

  • методы затравочного заполнения.

Метод растровой развертки основан на когерентности сканирующих строк ( соседние пикселы имеют одинаковое значение ).

Рис. 6-9 Многоугольник P1 - Р8

Шаги алгоритма:

1) Найти пересечения сканирующей строки со всеми ребрами .

2) Упорядочить точки пересечений по координате х .

3) Раскрасить пэлы между точками пересечений.

Пояснение:

Для строки С5 т. пересечения Q1 Q2 Q3 Q4 Q5 Q6 .

Пикселы разделяются на пары :

Q1-Q2 , Q2-Q3 ,…, Q5-Q6 {почередное переключение цвета

Особый случай - вершины. Если вершину С4 учитывать 1 раз , то S1S2 - цвет фона, S2S3 – цвет многоугольника. Поэтому вершины надо учитывать в списке дважды.

Поэтому при обнаружении вершины она определяется на локальный min или max. Для этого при стыковке 2-ух ребер сравниваются у координаты других концов векторов с координатой пересечения.

Рис. 6-10

Если у1 и у3 < y2 ( или у4 ) или у1 и у3 >у2 ( уn ), то это локальный экстремум. Глобального экстремума нет.

Соседние файлы в папке Лекции в формате doc