Обнаружение границ (2): оператор Собеля и оператор Кэнни

компьютерное зрение

предыдущий постВводятся некоторые основные понятия обнаружения границ. Эта статья является второй в серии статей об обнаружении границ, в которой представлены два зрелых алгоритма обнаружения границ: оператор Собеля и оператор Кэнни.

оператор Собеля

Оператор Собеля представляет собой алгоритм обнаружения границ на основе градиента. В предыдущей статье мы пришли к выводу, что положение края на изображении имеет больший градиент. Оператор Собеля использует два3×33\times3Ядро свертки сворачивается с изображением для получения везде градиента (два ядра свертки - это направление x и направление y соответственно).

Два ядра свертки оператора Собеля следующие:

Gx=[+101+202+101]Gy=[+1+2+1000121]G_x= \left[ \begin{matrix} +1&0&-1\\ +2&0&-2\\ +1&0&-1 \end{matrix} \right] G_y= \left[ \begin{matrix} +1&+2&+1\\ 0&0&0\\ -1&-2&-1 \end{matrix} \right]

Разложение ядра свертки Собеля

Приведенное выше ядро ​​свертки Собеля можно разбить на две части, а именно сглаживание по Гауссу и вычисление градиента:

Gx=[+101+202+101]=[121][+101]G_x= \left[ \begin{matrix} +1&0&-1\\ +2&0&-2\\ +1&0&-1 \end{matrix} \right]= \left[ \begin{matrix} 1\\ 2\\ 1 \end{matrix} \right] \left[ \begin{matrix} +1 & 0 & -1 \end{matrix} \right]

в[121] \left[ \begin{matrix} 1\\ 2\\ 1 \end{matrix} \right]используется для сглаживания по Гауссу,[+101] \left[ \begin{matrix} +1 & 0 & -1 \end{matrix} \right]используется для расчета градиента.

Результат оператора Собеля

Как и в предыдущей статье, величина и направленность результата вычисляются по следующим формулам:

G=Gx2+Gy2G=\sqrt{{G_x}^2+{G_y}^2}
Θ=arctan(GyGx)\Theta=\arctan \left( \frac{G_y}{G_x} \right)

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

Как показано на рисунке ниже, левый верхний угол — исходное изображение, правый верхний и левый нижний — соответственно.GyG_yиGxG_x, внизу справа естьGGрезультат. На нижнем правом изображении более яркое место — это край изображения (во время реализации обычно выбирается определенный порог, а пиксели больше порога считаются краями).

image.png

Дефекты оператора Собеля

Оператор Собеля — это простой метод обнаружения краев, который имеет следующие два недостатка:

  1. Плохая местность:GGДля простого расчета градиента несколько пикселей рядом с краем будут иметь большие значения, в результате чего оцениваемый край будет «грубым».
  2. Он более чувствителен к конкретным направлениям: оператор Собеля вычисляет градиенты только в горизонтальном и вертикальном направлениях.Для наклонных краев его легко пропустить, и ложные срабатывания склонны возникать в этих двух направлениях.

Хитрый оператор

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

Оператор Собеля в предыдущем разделе выполняет два шага: первый — использовать сглаживание по Гауссу для устранения шума, а второй — вычислить силу и направление градиента изображения. Недостатком является недостаточно хорошая локализация результатов. И хитрый операторНа основе оператора Собеля(То есть результат оператора Собеля нужно сначала вычислить в операторе Кэнни), и два шага продолжаются:

  • не максимальное подавление
  • Края фильтра с порогами гистерезиса

не максимальное подавление

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

图片名称

Как показано на рисунке ниже, при условии, чтоG(x,y)|\nabla G|(x,y)за очки(x,y)(x,y)Значение градиента , формула для немаксимального подавления выглядит следующим образом (гдеx'x'иx''x''даxxсмежные точки в тангенциальном направлении края)

图片名称
M(x,y)={G(x,y)ifG(x,y)>G(x',y')&G(x,y)>G(x'',y'')0otherwiseM(x,y)= \left\{ \begin{array}{lr} |\nabla G|(x,y)\quad if\quad |\nabla G|(x,y) > |\nabla G|(x',y')\quad \&\quad |\nabla G|(x,y) > |\nabla G|(x'',y'')\\ 0\quad otherwise \end{array} \right.

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

image.png

Порог гистерезиса

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

image.png

Метод гистерезисного порога решает эту проблему, устанавливая два порога (высокий порог H и низкий порог L):

  • Если значение градиента меньше L, не как край
  • Если значение градиента больше, чем H, то каксильный край
  • Если значение градиента находится между L и H, то какслабый край

Сильные ребра рассматриваются непосредственно как ребра, а слабые ребра выбираются как ребра при следующих условиях:

  • Подключайтесь напрямую к прочным краям
  • Соединены с сильными ребрами соседними другими слабыми ребрами

Алгоритм обнаружения краев Canny

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

  1. Сначала выполните сглаживание по Гауссу на изображении и рассчитайтеxxиyyГрадиент ориентации
  2. Рассчитать значение и направление градиента
  3. Сделать не максимальное подавление - уменьшить ширину края
  4. Выполнение скрининга метода порога гистерезиса

Окончательный результат выглядит следующим образом:

image.png

Резюме этой статьи

В этой статье вводятся два оператора обнаружения границ — оператор Собеля и оператор Кэнни. Оператор Собеля является базовым и простым, а оператор Кэнни используется чаще и надежен. В следующей статье мы представим реализацию алгоритма обнаружения границ Canny на Python, так что следите за обновлениями.