Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Комп_граф.doc
Скачиваний:
22
Добавлен:
07.05.2019
Размер:
729.09 Кб
Скачать

5.2. Простой алгоритм заливки

Рассмотрим простой алгоритм заливки гранично-определенной 4-х связной области. Заливка выполняется следующим образом:

  • определяется, является ли пиксел граничным или уже закрашенным;

  • если нет, то пиксел перекрашивается, затем проверяются и, если надо, перекрашиваются 4 соседних пиксела.

Ниже приведен итеративный алгоритм закраски 4-х связной гранично-определенной области. Логика работы алгоритма следующая:

  • поместить координаты затравки в стек;

  • пока стек не пуст;

  • извлечь координаты пиксела из стека;

  • перекрасить пиксел;

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

  • если нет, то занести его координаты в стек.

На рис. 5.3 а) показан выбранный порядок перебора соседних пикселов, а на рис. 5.3 б) – соответствующий ему порядок закраски простой гранично-определенной области.

a) Порядок перебора соседних пикселов

б) Порядок заливки области

Рис. 5.3. Заливка 4-х связной области итеративным алгоритмом

Рассмотренный алгоритм легко модифицировать для работы с 8-ми связными гранично-определенными областями или же для работы с внутренне-определенными.

Как уже отмечалось, очевидный недостаток алгоритмов, непосредственно использующих связность закрашиваемой области, – большие затраты памяти на стек, так как на каждый закрашенный пиксел в стеке по максимуму будет занесена информация о еще трех соседних. Кроме того, информация о некоторых пикселах может записываться в стек многократно. Это приведет не только к перерасходу памяти, но и потере быстродействия за счет многократной раскраски одного и того же пиксела.

5.3 Построчный алгоритм заливки с затравкой

Использует пространственную когерентность:

  • пикселы в строке меняются только на границах;

  • при перемещении к следующей строке размер заливаемой строки, скорее всего, или неизменен или меняется на 1 пиксел.

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

Последовательность работы алгоритма для гранично-определенной области следующая:

  • координата затравки помещается в стек;

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

Анализируется строка ниже закрашиваемой в пределах от до и в ней находятся крайние правые пикселы всех незакрашенных фрагментов. Их координаты заносятся в стек. То же самое проделывается для строки выше закрашиваемой.

З адание на лабораторную работу № 5 "Заливка области с затравкой "

  1. Построить область с отверстиями, произвести заполнение, используя алгоритм простой затравки.

  2. Построить область с отверстиями, произвести заполнение, используя алгоритм построчной затравки.

  3. В чем суть итеративного и рекурсивного алгоритмов?

  4. Что такое пространственная когерентность?

  5. Сравните два алгоритма, найдите недостатки и преимущества.

  6. Чем отличаются четырех- и восьмисвязные алгоритмы (и области). Преимущества и недостатки.