Поиск контуров на изображении

Сегментация — это процесс разделения цифрового изображения на несколько сегментов (множество пикселей, также называемых суперпикселями). Цель сегментации заключается в упрощении и/или изменении представления изображения, чтобы его было проще и легче анализировать. Сегментация изображений обычно используется для того, чтобы выделить объекты и границы (линии, кривые, и т. д.) на изображениях.

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

Алгоритм выделения границ или иначе обнаружения границ работают после того, как качество изображения улучшено перечисленными выше методами. Эти алгоритмы можно подразделить на два класса:

1) подчеркивающие, усиливающие, выделяющие границы;

2) строящие контуры автоматически.

Известны линейные алгоритмы выделения границ и нелинейные. В качестве первых можно привести маски, похожие на те, которые используются в линейной фильтрации. Разница в том, что для выделения границ используются весовые коэффициенты разных знаков, как положительные, так и отрицательные. Например, использования масок для горизонтальной или вертикальной обработки (выделения, усиления) изображения:

Поиск контуров на изображении - student2.ru и Поиск контуров на изображении - student2.ru

Процедура линейной фильтрации изображения в MATLAB выполняется с использованием команды

imfilter(I,h);

где I – исходное изображение, h- матраца фильтра.

Другой вариант – нелинейные алгоритмы, использующие свойство градиента показывать направление наискорейшего роста функции. К таким относятся методы Робертса и Собеля, Шарра, дифер. алгоритм и т.д Так, выделение вертикальных перепадов осуществляется дифференцированием по строкам, горизонтальных - по столбцам. Дифференцирование производится в дискретном вид:

Поиск контуров на изображении - student2.ru

Здесь ∆x=1 - приращение вдоль строки, равное 1 пикселу, ∆y=1 - приращение вдоль столбца, также равное 1 пикселу. Выделение перепадов по диагонали можно получить, вычисляя разности уровней диагональных пар элементов.

Для выделения перепадов используются следующие наборы весовых множителей, реализующих двумерное дифференцирование:

север северо-восток восток юго-восток

Поиск контуров на изображении - student2.ru

юг юго-запад запад северо-запад

Поиск контуров на изображении - student2.ru

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

Выделение горизонтального перепада можно выполнить также путем вычисления приращения разности яркостей пикселов вдоль строки, что равноценно вычислению второй производной по направлению (оператор Лапласа):

Поиск контуров на изображении - student2.ru

Это отвечает одномерной маске Н = | -1 2 -1 |, сумма весовых множителей равна нулю. Таким же образом можно искать перепады по вертикали и по диагонали. Для выделения перепадов без учета их ориентации используются двумерные операторы Лапласа:

Поиск контуров на изображении - student2.ru

Здесь сумма весовых множителей также равна нулю. Операторы Лапласа реагируют на перепады яркости в виде ступенчатого перепада и на "крышеобразный" перепад. Они также выделяет изолированные точки, тонкие линии, их концы и острые углы объектов. Линия подчеркивается в 2 раза ярче, чем ступенчатый перепад, конец линии в 3 раза, а точка - в 4 раза ярче. Оператор Лапласа не инвариантен к ориентации перепадов: например, отклик оператора на наклонный перепад в диагональном направлении почти вдвое больше, чем в горизонтальном и вертикальном.

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

Фильтры для выделения перепадов и границ могут быть рекурсивными. Изображение с подчеркнутыми границами (контурами) субъективно воспринимается лучше, чем оригинал. Происходит фокусировка частично расфокусированного изображения. При использовании оператора Лапласа для этих целей применяют три типовых набора весовых множителей:

Поиск контуров на изображении - student2.ru

H16 - H18 отличаются от фильтров H13 - H15 тем, что к центральному элементу матрицы прибавлена 1, т.е. при фильтрации исходное изображение накладывается на контур.

Для выделения контуров и перепадов яркости могут применяться нели­нейные фильтры. В нелинейных алгоритмах используют нелинейные операторы дискретного дифференцирования. В фильтре Робертса исполь­зуется перемещающаяся по изображению маска 2´2:

Поиск контуров на изображении - student2.ru

дифференцирования производится с помощью одного из выражений

Поиск контуров на изображении - student2.ru

Поиск контуров на изображении - student2.ru

Рассмотрим подробнее метод Собеля.Оператор Собеля — дискретный дифференциальный оператор, вычисляющий приближённое значение градиента яркости изображения. Результатом применения оператора Собеля в каждой точке изображения является либо вектор градиента яркости в этой точке, либо его норма. Используется в области обработки изображений, в частности, часто применяется в алгоритмах выделения границ.

В фильтре Собела используется окно 3´3:

Поиск контуров на изображении - student2.ru

На рисунке показаны результаты применения фильтра Собела.

Поиск контуров на изображении - student2.ru

 
   

Оператор Собеля представляет собой более неточное приближение градиента изображения, но он достаточно качественен для практического применения во многих задачах. Точнее, оператор использует значения интенсивности только в окрестности 3×3 каждого пиксела для получения приближения соответствующего градиента изображения, и использует только целочисленные значения весовых коэффициентов яркости для оценки градиента. Формула оператора Собеля: Gx и Gy — две матрицы, где каждая точка содержит приближенные производные по x и по y. Они вычисляются следующим образом путем умножения матрицы Gx и Gy и суммированием обоих матриц, в результате полученный результат записывается в текущие координаты x и y в новое изображение:

Поиск контуров на изображении - student2.ru .

Матрицы Gy и Gx:

Поиск контуров на изображении - student2.ru

Центральному (i,j) -му пикселу вместо f i,j присваивается значение яркости Поиск контуров на изображении - student2.ru либо Поиск контуров на изображении - student2.ru , где

Поиск контуров на изображении - student2.ru

Итак, обнаружение контуров - это технология обработки изображений для поиска границ объектов внутри изображений. Он работает, обнаруживая разрывы в яркости. Обнаружение края используется для сегментации изображений и извлечения данных в таких областях, как обработка изображений, компьютерное зрение и машинное зрение.

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

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

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

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

Функция edge – «выделение границ»

Синтаксис:

BW=edge(l, method)
BW=edge(l, method, thresh)
BW=edge(l, method, thresh, P)
[BW, thresh]=edge(l, method, ...)

Описание:

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

Функция BW=edge(I, method) предназначена для выделения границ на исходном полутоновом изображении I. Данная функция возвращает бинарное изображение BW такого же размера, как исходное I. Пиксель BW(r, с) равен 1, если пиксель I(r, с) принадлежит границе. Для обнаружения границ может использоваться несколько методов. Применяемый метод задается в параметре method в виде одной из следующих строк: 'sobel', 'prewitt', 'roberts', 'log', 'zerocross', 'canny'. Если параметр method при вызове функции опущен, то по умолчанию он полагается равным 'sobel'.

Для каждого из методов определения границ можно задать дополнительные параметры. Для этого используется одна из функций BW=edge(I, method, thresh), BW=edge(I, method, thresh, P), где параметр thresh задает порог для определения того, принадлежит ли пиксель к границе, а в параметре Р передаются настройки, специфичные для каждого из методов.

Если при вызове функции параметр thresh опущен, то значение порога выбирается автоматически. Получить значение порога можно, дополнительно определив выходной параметр thresh: [BW, thresh]=edge(I, method,...).

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

Функция BW=edge(I, 'sobel', thresh) для определения границ использует фильтрацию исходного изображения I фильтром Собеля [1, 3]; пиксель считается относящимся к границе, если соответствующий ему пиксель результата фильтрации имеет значение, большее thresh. Для данного метода можно указать дополнительный параметр direction: BW=edge(I, 'sobel', thresh, direction), который определяет, какие границы будут обнаруживаться. Параметр direction может принимать значения:

  • 'horizontal' - выделение горизонтальных границ;
  • 'vertical' - выделение вертикальных границ;
  • 'both' - выделение границ во всех направлениях (данное значение используется по умолчанию, когда параметр direction не определен).

Функция BW=edge(I, 'prewitt', thresh) для определения границ использует фильтрацию исходного изображения I фильтром Превита [1,3]; пиксель считается относящимся к границе, если соответствующий ему пиксель результата фильтрации имеет значение, большее thresh. Для данного метода можно указать дополнительный параметр direction: BW=edge(I, 'prewitt', thresh, direction), который определяет, какие границы будут обнаруживаться. Возможные значения параметра direction описаны выше.

Функция BW=edge(I, 'roberts', thresh) для определения границ использует фильтрацию исходного изображения I фильтром Робертса; пиксель считается относящимся к границе, если соответствующий ему пиксель результата фильтрации имеет значение, большее thresh.

Функция BW=edge(I, 'log', thresh) для определения границ использует фильтрацию исходного изображения I фильтром лапласиан–гауссиана [1, 2]; пиксель считается относящимся к границе, если соответствующий ему пиксель результата фильтрации имеет значение, большее thresh. Для формирования маски фильтра используется функция fspecial с параметрами sigma=2 (среднеквадратичное отклонение) и n=ceil(sigma*3)*2+1 (размер маски). Параметр sigma можно задать в параметре функции edge: BW=edge(I, 'log', thresh, sigma).

Функция BW=edge(I, 'zerocross', thresh, h) для определения границ использует фильтрацию исходного изображения I линейным фильтром с маской h; пиксель считается относящимся к границе, если соответствующий ему пиксель результата фильтрации имеет значение, большее thresh.

Функция BW=edge(I, 'canny', thresh) использует для определения границ метод Канни. Это достаточно сложный метод, состоящий из большого числа этапов [4]. Суть метода состоит в поиске локальных участков с перепадами яркости. Перепады яркости ищутся с помощью фильтрации по каждой из осей одномерным фильтром лапласиан–гауссиана. В методе Канни для классификации перепадов на "слабые" и "сильные" используется два порога - нижний и верхний. "Слабые" границы отмечаются в результирующем изображении, только если они соединены с "сильными". Для зашумленных изображений данный метод обеспечивает наилучшее обнаружение границ по сравнению с остальными методами функции edge, но требует существенно большего времени.

Параметр thresh может являться двухэлементным вектором. В этом случае первый элемент вектора задает значение нижнего порога, а второй элемент - значение верхнего порога. Если параметр thresh является скалярным значением, то thresh задает значение верхнего порога, а для нижнего порога используется значение 0.4*thresh. Если параметр thresh при вызове функции опущен или в качестве thresh передан пустой массив ([ ]), то значения порогов определяются автоматически.

В функцию BW=edge(I, 'canny', thresh, sigma) дополнительно передается параметр sigma, задающий среднеквадратичное отклонение распределения Гаусса, которое используется при формировании маски фильтра, выделяющего перепады яркости.

Пример:

Рассмотрим выделение границ методом Собеля. Исходное изображение показано на рис. 1,а. Результирующее изображение, на котором отмечены границы, показано на рис. 1,б.

% Пример демонстрирует выделение границ методом Собеля.
% Чтение исходного изображения и вывод его на экран.
I=imread(‘lena.bmp’);
imshow(l);
% Выделение границ методом Собеля и вывод результата на экран.
BW=edge(l, ‘sobel, 0.09);
figure, imshow(BW);

Поиск контуров на изображении - student2.ru Поиск контуров на изображении - student2.ru
а) б)

Рис. 1.

Задание.

1. Загрузить jpg изображение в соответствии с вариантом. Подписать его. Применить к исходному изображению фильтры для выделения контуров

Поиск контуров на изображении - student2.ru , Поиск контуров на изображении - student2.ru

Поиск контуров на изображении - student2.ru

Поиск контуров на изображении - student2.ru

Поиск контуров на изображении - student2.ru

Вывести фильтрованные изображения на экран.

2. Загрузить gif изображение в соответствии с вариантом. Выделите границы всеми рассмотренными методами функции edge.

Наши рекомендации