Пред.
След.
Макеты страниц
Распознанный текст, спецсимволы и формулы могут содержать ошибки, поэтому с корректным вариантом рекомендуем ознакомиться на отсканированных изображениях учебника выше Также, советуем воспользоваться поиском по сайту, мы уверены, что вы сможете найти больше информации по нужной Вам тематике ДЛЯ СТУДЕНТОВ И ШКОЛЬНИКОВ ЕСТЬ
ZADANIA.TO
8.4.4. ОПИСАНИЕ ОСНОВНОГО АЛГОРИТМАСодержательно этот алгоритм можно описать следующим образом. Горизонтальные строки заполняются в процессе обхода слева направо, начиная с пиксела, расположенного непосредственно справа от контура. [Для отыскания последнего в первой строке можно воспользоваться процедурой LEFT (затравочный пиксел).] Пусть результате ее выполнения выясняется, что значения верхнего и нижнего порядков равны 1, то пиксел Интерес представляют случаи, когда на обоих концах равно 1 только одно из значений порядков. Если, в частности, одно из них равно нулю, то это означает, что в соответствующей точке находится некоторый экстремум и следует либо поместить пиксел в стек, либо прекратить заполнение в данном направлении. Это условие составляет существенную часть рассматриваемого ниже алгоритма. Описанные механизмы представляют собой основу алгоритма 8.5. В нем помимо стека 5 используется стек На шаге 5 определяется, является ли адрес следующего пиксела допустимым или этот пиксел уже прошел заполнение. В обоих случаях алгоритм выходит из внутреннего цикла и выполняет шаг 1. Если стек — непустой, выталкивается новый пиксел, после чего весь процесс повторяется. Если адрес следующего пиксела является допустимым и этот пиксел еще не проходил заполнения, то этот пиксел выбирается в качестве текущего (шаг 6). На шаге 7 определяются порядки К-ГСС для левой части контура. На шаге 8 выполняется первая нетривиальная операция: проверяется достижение границы внутренней части области в текущем направлении просмотра. Если просмотр осуществляется вниз и значение верхнего порядка превышает единицу, то значит процесс заполнения дошел до «дна» контура (как показано на рис. 8.9, а) или возникла одна из представленных на рис. 8.9, б конфигураций. Наличие первой ситуации определяется посредством проверки того, находится ли текущий пиксел На шаге 9 проверяется, не равны ли нулю верхний и нижний порядки, и выбирается начальный пиксел в следующей строке. Не обязательно, чтобы оба значения порядков равнялись единице, даже несмотря на то, что вершины со значениями порядков (1,2) и (2,1) для полных областей недопустимы. Для большинства пикселов контура условия этого шага выполняются и алгоритм переходит непосредственно к шагу 14. Если значение хотя бы одного из порядков равно нулю, то значит соответствующий пиксел следует поместить в стек (см. утверждение 8.1) и при выборе пиксела
Рис. 8.9. Иллюстрация к работе алгоритма 8.5: а, б — конфигурации, для которых условие шага 8, заключенное в квадратные скобки Ввод пиксела в стек осуществляется на шаге 10. На рис. Появление нулевого порядка означает, что начальный пиксел на очередной строке просмотра следует выбирать особенно тщательно. Если просмотр осуществляется вниз и значение верхнего порядка равно, а нижнего не равно нулю, то в этом случае никаких сложностей не возникает. Эта проверка, как и аналогичная проверка для случая просмотра вверх, осуществляется на шаге 11. На рис. 8.10,а изображена конфигурация контура, для которой выполняются условия шага 11 для случая просмотра вниз. Шаг 12 рассчитан на случай, когда в следующей строке (по направлению просмотра), примыкающей к контуру, отсутствуют пикселы контура. Такая конфигурация изображена на рис. 8.10, б для случая просмотра вниз.
Рис. 8.10. Иллюстрация к работе алгоритма 8.5: а — конфигурация, для которой выполняются условия шага 11, б — шага 12, в — если при исследовании правой части контура возникает представленная конфигурация, пиксел Рассматривается пиксел, расположенный непосредственно над На шаге 14 осуществляется реальное заполнение. Именно на этом шаге осматривается большинство пикселов. При его выполнении для каждого пиксела проверяется, не окрашен ли он в цвет контура и не заполняет ли он пиксел с правильным цветом. Алгоритм 8.5. Заполнение контура по критерию связности Обозначения. Р — пиксел, с которого начинается заполнение при переходе к новой линии просмотра. затравочный пикселнад. Адрес (см. скан) (см. скан) На шаге 15 определяются порядки вершины К-ГСС, соответствующей правой дуге контура. Если значение одного из ее порядков равно 0, то адрес пиксела, расположенного по другую сторону контура (пиксел Очевидно, что одновременно в стеке находится максимум две вершины. С другой стороны, все вершины, связанные с заданной вершиной, либо попадут в стек, либо будут заполнены. Рассмотрим пример, приведенный на рис. 8.11. Пусть С — первая вершина, пройденная при обходе. В этом случае вершины В и Можно показать также, что в случае полной области алгоритм 8.5 обеспечивает корректное заполнение. В самом деле, при этом в стек заносятся лишь те пикселы, которые являются смежными точками максимумов или минимумов по вертикали.
Рис. 8.11 Пример использования стека в алгоритме 8.5
|
1 |
Оглавление
|