7.5. ПОСТРОЕНИЕ КОНТУРА
Понятие границы множества, расположенного на непрерывной плоскости, вполне очевидно. Такую границу образует множество всех точек, которые обладают следующим свойством: независимо от того, сколь мала выбранная окрестность этих точек, она содержит точки, лежащие как внутри множества, так и вне его. Не столь очевидно соответствующее понятие для дискретной плоскости. Дадим несколько определений, которые позволят прояснить это понятие. Отметим также, что термин «контур» мы сохраним для случая дискретной плоскости, а термином граница будем пользоваться лишь применительно к множествам, расположенным на непрерывной плоскости.
Определение 7.5 Контуром, или к-контуром, связного множества пикселов будем называть множество всех пикселов из каждый из которых имеет, по меньшей мере, одного н-соседа, расположенного вне н-контуром множества будем называть множество всех пикселов из каждый из которых имеет, по меньшей мере, одного соседа, расположенного вне
7.5.1. ПОСТРОЕНИЕ ОДИНОЧНОГО КОНТУРА
Обход пикселов контура можно осуществлять в соответствии с маршрутом, причем для такого обхода всегда можно использовать некоторый замкнутый маршрут Далее, имея дело с контурами, всегда будем иметь в виду вполне определенную процедуру обхода, а именно процедуру, задаваемую алгоритмом 7 1. В ней используются понятие -соседа (см. определение 7.1) и обозначения, введенные с помощью рис. 7.4. Все численные операции с выполняются по модулю 8. Данный алгоритм можно описать в терминах поведения наблюдателя, движущегося вдоль пикселов, принадлежащих множеству, и выбирающего крайний правый
пиксел. Начальный пиксел А может определяться рядом способов, в том числе с помощью обхода плоскости сверху вниз и слева направо. Процедура построения контура заканчивается, когда очередным пикселом, осматриваемым в процессе обхода, оказывается начальный. Поскольку такое же положение имеет место в начале обхода, флаг первый используется для того, чтобы можно было различать начало алгоритма и возвращение в начальный пиксел. Цикл, предусмотренный на шагах алгоритма 5—9, выполняется не более трех раз, чтобы избежать хождения по кругу вокруг множества, содержащего лишь один пиксел.
Алгоритм 7.1. Алгоритм построения контура
Процедура TRACER
Обозначения. А — начальная точка контура множества R; С — текущая точка, окрестность которой в данный момент исследуется; S — направление поиска, выраженное в коде, приведенном на рис. 7.4; первый — флаг, имеющий значение «истина» только в начале построения; обнаружен — флаг, имеющий значение «истина» только при обнаружении очередной точки контура.
(см. скан)
(см. скан)
Данный алгоритм предусматривает по одному проходу на каждое отверстие области и, кроме того, один проход — на построение внешнего контура области. Следовательно, он должен применяться в сочетании с каким-либо алгоритмом поиска, позволяющим обнаруживать отверстия, расположенные внутри области. Кратко опишем один из таких алгоритмов. Обход образует замкнутый маршрут и предусматривает просмотр внешних контуров против часовой стрелки, а контуров отверстий — по часовой стрелке. Если в результате работы алгоритма должно порождаться некоторое описание контура, то можно воспользоваться направлениями поиска и координатами х, у точки А. Последние выводятся в первую очередь, а затем каждый раз, когда некоторому пикселу присваивается значение текущий выводится значение направления поиска . В результате порождается описание контура, представленное в цепном коде (см. подразд. 1.2.3). Описания, представленные в цепном коде, могут также храниться в оперативной памяти и использоваться при обходе внутренних частей области в процессе поиска отверстий.