Студопедия Главная Случайная страница Обратная связь

Разделы: Автомобили Астрономия Биология География Дом и сад Другие языки Другое Информатика История Культура Литература Логика Математика Медицина Металлургия Механика Образование Охрана труда Педагогика Политика Право Психология Религия Риторика Социология Спорт Строительство Технология Туризм Физика Философия Финансы Химия Черчение Экология Экономика Электроника

Связность областей и их границ





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

Простой алгоритм заливки. Рассмотрим простой алгоритм заливки гранично-определенной 4-х связной области (рекурсивная реализация)

Заливка выполняется следующим образом:

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

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

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

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

Поместить координаты затравки в стек,

Пока стек не пуст.

Извлечь координаты растра из стека.

Перекрасить растр.

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

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

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

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

Рассмотренный алгоритм легко модифицировать для работы с 8-ми связными гранично-определенными областями или же для работы с внутренне-определенными. Сравнительные прогоны тестовых программ подтвердили соображения о неэкономности рекурсивного алгоритма: при стандартном окне стека в 64K с помощью рекурсивной программы можно закрасить квадратик не более чем 57×57 растров(при условии, что 1 растр = 1пикселю). Итеративная же программа при тех же условиях позволяет закрасить прямоугольник размером 110×110, истратив на массив координат 16382 байта. Как уже отмечалось, очевидный недостаток алгоритмов, непосредственно использующих связность закрашиваемой области - большие затраты памяти на стек, так как на каждый закрашенный растр в стеке по максимуму будет занесена информация о еще трех соседних. Кроме того, информация о некоторых растрах может записываться в стек многократно. Это приведет не только к перерасходу памяти, но и потере быстродействия за счет многократной раскраски одного и того же растра. Значительно более экономен далее рассмотренный построчный алгоритм заливки. Построчный алгоритм заливки с затравкой использует пространственную когерентность: растры в строке меняются только на границах; при перемещении к следующей строке размер заливаемой строки скорее всего или неизменен или меняется на 1 растр.

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

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

Координата затравки помещается в стек, затем до исчерпания стека выполняются пункты 2-4.

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

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








Дата добавления: 2015-10-02; просмотров: 666. Нарушение авторских прав; Мы поможем в написании вашей работы!




Аальтернативная стоимость. Кривая производственных возможностей В экономике Буридании есть 100 ед. труда с производительностью 4 м ткани или 2 кг мяса...


Вычисление основной дактилоскопической формулы Вычислением основной дактоформулы обычно занимается следователь. Для этого все десять пальцев разбиваются на пять пар...


Расчетные и графические задания Равновесный объем - это объем, определяемый равенством спроса и предложения...


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

Огоньки» в основной период В основной период смены могут проводиться три вида «огоньков»: «огонек-анализ», тематический «огонек» и «конфликтный» огонек...

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

Влияние первой русской революции 1905-1907 гг. на Казахстан. Революция в России (1905-1907 гг.), дала первый толчок политическому пробуждению трудящихся Казахстана, развитию национально-освободительного рабочего движения против гнета. В Казахстане, находившемся далеко от политических центров Российской империи...

Типология суицида. Феномен суицида (самоубийство или попытка самоубийства) чаще всего связывается с представлением о психологическом кризисе личности...

ОСНОВНЫЕ ТИПЫ МОЗГА ПОЗВОНОЧНЫХ Ихтиопсидный тип мозга характерен для низших позвоночных - рыб и амфибий...

Принципы, критерии и методы оценки и аттестации персонала   Аттестация персонала является одной их важнейших функций управления персоналом...

Studopedia.info - Студопедия - 2014-2025 год . (0.008 сек.) русская версия | украинская версия