Гонсалес Р., Вудс Р., Эддинс С. Цифровая обработка изображений в среде Matlab (2006) (1246139), страница 79
Текст из файла (страница 79)
Если Я вЂ” это изображение, то с1гсвЬ11г — это не что иное, как обычная прокрутка (вверх и вниз) или панорамирование (влево и вправо) зацикленного изображения. 11.1.3. Некоторые основные утилитные М-функции В этой главе будут часто использоваться следующие типичные операции: преобразование областей и границ, упорядочение граничных точек в смежные цепи и подвыборка границы для упрощения ее представления и описания.
Здесь мы рассмотрим некоторые утилитные М-функции, которые применяются для этих целей. Чтобы излишне не углубляться в особенности организации этих процедур и не отвлекаться от основных идей главы, мы обсудим лишь основной синтаксис этих функций. Задокументированные коды всех этих функций имеются в приложении В. Как отмечалось ранее, границы представляются в виде массивов (452 Г д.а д. прх2, в которых каждая строка соответствует паре двумерных координат.
Многие из этих функций автоматически конвертируют координатные массивы 2хпр в массивы с размерами прх2. Функция В = Ьоплпаг1ев(т, сова, 61г) отслеживает внешние границы объектов изображения Х, которое предполагается двоичным с нулевым фоном. Параметр сопл обозначает используемую связность выходных границ: его значение может быть равно 4 или 8 (по умолчанию).
Параметр 61т указывает направление, в котором отслеживаются границы; его значение может быть 'си' (по умолчанию) или 'сои', что, соответственно, означает направление по часовой стрелке или против. Итак, если выбрана 8-связность и направление ' сч', то используется упрощенный синтаксис В = Ьовпцат1ев(а).
Выходом обеих форм вызова функции явдляется смешанный массив В, элементами которого служат координаты точек обнаруженной границы. Первая и последняя точки границы, возвращаемые функцией Ьоцпс(аг1ев, совпадают. Этот приводит к замкнутой границе. Для закрепления этого материала предположим, что мы хотим найти границу объекта с самой длинной границей на изображении 1 (для простоты предположим, что имеется единственная такая граница).
Это можно совершить, применяя следующую последовательность команд:з » В = Ьоши$аг1ев(1); » с( = се11йш(д1епВСЬд, В); » (шах о, и) = шахЫ); » ч = ВПс(1)У; Вектор ч содержит координаты самой длинной границы входного изображения, а )с соответствует номеру области. Массив ч имеет размеры прх2. Последняя команда просто выбирает первую гранину максимальной длины, если таковых имеется много. Как отмечалось в предыдущем абзаце, первая и последняя точки каждой границы, выделенной функцией Ьоцпйаг1ев, совпадают, т.е. строка ч(1,:) равна строке ч(ево,:). Функция Ьовпй2е1ВЬЬ, имеющая форму вызова ЬВ = Ьовпс(2е18ЬС(Ь), удаляет из Ь пикселы, которые необходимы для 4-связности, но не нужны для 8- связности, и оставляет границу, чьи пикселы являются только 8-связными.
Входная матрица Ь должна иметь размер прх2, и в каждой ее строке записаны координаты (х, у) граничных пикселов. Требуется, чтобы граница Ь была замкнута, связна, и необходимо, чтобы пикселы границы были ориентированы по часовой стрелке или против. Те же условия применяются к функции Ьоцп621оцг: Ь4 = Ьоцпд121оцт(Ь). зСм. 1 2 10.2, в котором осдьясяяется такое использование функции иак. . е д . д ддддд) Эта функция вставляет дополнительные пикселы в тех местах границы, где имеется диагональная связность, тогда получается выходная граница, в которой пикселы являются 4-связными. Листинги программ этих функций приведены в приложении В.
Функция 8 = Ьопп421ш(Ь, М, й, хО, уО) строит двоичное изображение 8 размерами МхХ, в котором 1 стоят на месте точек границ и О на заднем плане. Параметры хО и уО обозначают положения минимальных х- и у-координат Ь на изображении. Граница Ь должна быть координатным массивом размерами прх2 (или 2хпр), где пр - это число точек. Если параметры хО и уО опущены, то граница примерно центрируется в массиве ЛХхгд'. Если, в свою очередь, параметры М и М отсутствуют, то вертикальный и горизонтальный размеры выходного изображения полагаются равными высоте и ширине границы Ь.
Если функция Ьоши1ат1ев обнаруживает кратные границы, то можно получить все эти координаты для использования в функции Ьовпд121ш путем связывания различных элементов смешанного массива В:~ Ь = сас(1, Вт:т), где 1 обозначает связывание вдоль первой (вертикальной) размерности массива. Функция [в, вп) = ЬвиЬвашр(Ь, ягЫввр) совершает укрупняющую подвыборку (одинарной) границы Ь по решетке, линии которой отстают друг от друга на Вт14вер пикселов. Выходом в является граница с меньшим числом точек, чем было у Ь, число этих точек определяется значением Вг14вер, а вн это множество граничных точек, перемасштабированных так, что перемещения их координат образуют единое целое.
Такое представление полезно при кодировании границы с помощью цепных кодов, что обсуждается в 6 11.1.2. Требуется также, чтобы точки Ь были упорядочены по илп против направления часовой стрелки. После совершения подвыборки границы функцией ЬвпЬвашр ее точки перестают быть связными. Их можно связать обратно, применив функцию в = соппестро1у(в(;,1), в(:,2)), где строки в являются координатами границы после подвыборки. Необходимо, чтобы точки в были упорядочены по или против часовой стрелки.
Строки выхода в являются координатами связанной границы, которая получается соединением точек в самыми короткими путями, состоящими из 4- или 8-связных прямых сегментов. Эта функция бывает полезной при построении связного граничного многоугольника, который является более гладким (более простым) по сравнению с исходной границей Ь, по которой он построен. Функция соппессро1у также довольно удобна при работе с функциями, которые строят только вершины многоугольников, например, с функцией ш1првгро1у, которая рассматривается в з 1 1.2.3. дСм. 1 6.Н1 Лля объясыеддия оператора сас.
См. также пример !1.13. ~4М Г ЕП д Вычисление целочисленных координат отрезков, соединяющих две точки, является базовым инструментом при работе с границами (например, функции соццессро1у требуется как раз такая подфункция). Для этих целей хорошо подходит функция из 1РТ 1цс11це, которая имеет синтаксис~ (х, у) = 1цс11це(х1, х2, у1, у2), где (х1, у1) и (х2, у2) — это целочисленные координаты двух точек, которые необходимо соединить прямой линией. Выходами х и у служат вектор-столбцы, состоящие из целых х- и у-координат соединяющего отрезка.
11.2. Представление 11.2.1. Цепные коды С помощью цепных кодов граница представляется в виде последовательности соединенных отрезков, для которых указаны длина и направление. Как правило. такое представление основывается на отрезках с 4- или 8-связностью. Направление каждого отрезка кодируется числом в соответствии со схемой нумерации, например, как изображено на рис. 11.1, а) и б). Коды, построенные по этой схеме, называются цепными кодами Фримана. Рнс. 11.1. Номера направлений а) для цепных кодов с 4 направлениями и б) для цепных кодов с 8 направле- ниями б) а) 4 '.! О Цепной код границы области зависит от начальной точки, но с помощью простой процедуры его можно сделать инвариантным к ее выбору.
Для этого аФункция тпе11ле является недокументированной утилитой 1РТ. Ее программный код приве- денав приложении В. Методы сегментации, обсуждавшиеся в гл. 10, дают на выходе необработанные данные в форме множества пикселов, расположенных вдоль границы или внутри области. Хотя эти данные иногда непосредственно используются для получения дескрипторов (например, при определении текстурных признаков области), обычная практика состоит в применении методов компактного представления данных сегментации. Полученные компактные представления оказываются значительно более эффективными для вычисления дескрипторов.
В этом разделе мы рассмотрим различные подходы к описанию областей. .а. э,д, „,, 4Д цепной код просто рассматривается как циклическая последовательность номеров направлений отрезков, и исходная точка переопределяется таким образом, чтобы при начале отсчета с нее получалась линейная запись, соответствующая целому числу наименьшей величины. Цепной код также можно сделать инвариантным относительно поворота [на углы с шагом 90' или 45ь, как показано на рис. 11.1, а) и б)), если вместо самого кода рассматривать его первую разность, которая формируется путем вычитания значений направления для всех пар соседних элементов кодовой последовательности.
Эта разность определяется подсчетом числа смен направлений (против часовой стрелки на рис. 11.1), которые разделяют два смежных элемента кода. Например, для цепного кода с 4 направлениями 10103322 первая разность задается последовательностью 3133030. Инвариантность по отношению к поворотам достигается путем ориентирования границы по отношению к некоторым доминируюгцим характеристикам описываемого объекта, например, вдоль его главных осей, как это делается в 3 11.3.2. Функция йсЬсойе с синтаксисом с = ХсЬсоае(Ь, оопп, ауг) вычисляег циклические коды Фримана для множества точек ориентированной границы, которое хранится в виде массива Ь с размерами прх2.
Выходом служит структура с со следующими полями, где числа внутри скобок определяют размеры массивов: с. Хсс =-цепной код Фримана (1хпр) с.йШ =первая разность кода с.хсс (1хпр) с.шш =целые числа наименьшей величины (1хпр) с.йИйшп=первая разность кода с.шш (1хпр) с.хйуО =координаты начала кода (1х2) . Параметр сопл задавг связность кода; его значения могуг быть 4 или 8 (по умолчанию). Величина 4 допустима, только если граница не содержит диагональных переходов.