Обнаружение края (1): обзор

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

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

Часть материала в этой статье взята из курса CS131 в Стэнфордском университете.

Цель обнаружения края

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

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

image.png

Градиент изображения

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

бинарный градиент

Предположим, что есть бинарная функцияf(x,y)f(x,y), то имеет свой вектор градиента:

f(x,y)=[δf(x,y)δxδf(x,y)δy]=[fxfy]\nabla f(x,y)= \left[ \begin{matrix} \frac{\delta f(x,y)}{\delta x}\\ \frac{\delta f(x,y)}{\delta y} \end{matrix} \right]= \left[ \begin{matrix} f_x\\ f_y \end{matrix} \right]

Значение градиента:

f(x,y)=fx2+fy2|\nabla f(x,y)|=\sqrt{f_x^2+f_y^2}

Направление градиента:

θ=tan1(δfδy/δfδx)\theta = tan^{-1}\left(\frac{\delta f}{\delta y} / \frac{\delta f}{\delta x}\right)

бинарный дискретный градиентный фильтр

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

13[101101101]\frac{1}{3} \left[ \begin{matrix} 1&0&-1\\ 1&0&-1\\ 1&0&-1 \end{matrix} \right]

Вертикальный фильтр это:

13[111000111]\frac{1}{3} \left[ \begin{matrix} 1&1&1\\ 0&0&0\\ -1&-1&-1 \end{matrix} \right]

Например, для матрицы:

I=[10102020201010202020101020202010102020201010202020]I= \left[ \begin{matrix} 10&10&20&20&20\\ 10&10&20&20&20\\ 10&10&20&20&20\\ 10&10&20&20&20\\ 10&10&20&20&20 \end{matrix} \right]

Примените вышеупомянутый поперечный фильтр кII,получить:

Ix=[0000001010000101000010100000000]I_x= \left[ \begin{matrix} 0&0&0&0&0\\ 0&10&10&0&0\\ 0&10&10&0&0\\ 0&10&10&0&0\\ 0&0&0&0&0 \end{matrix} \right]

На следующем рисунке показан результат вывода картинки по горизонтали и по вертикали:

простой детектор границ

краевые особенности

Простейший детектор краев предназначен для обнаружения мест на изображении, где резко меняется интенсивность. Например, для изменения интенсивности красной линии на левом рисунке ниже, как показано на верхнем правом рисунке, можно четко наблюдать, что там, где есть край, изменение интенсивности очень резкое. 2. Если вычислить дискретный градиент функции интенсивности, то можно получить правое нижнее изображение Место с большим значением градиента – это место резкого изменения функции интенсивности, то есть место, где верхний край изображения расположен.

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

Эффекты шума и решения

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

图片名称

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

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

G(u,v)=12число Пио2e(u2+v2)/2о2G(u,v)=\frac{1}{2\pi \sigma^2}e^{-(u^2+v^2)/2\sigma^2}

вuuиvvдиапазон размытия в обоих направлениях,о\sigmaявляется стандартным отклонением. В дискретном пространстве матрица свертки, состоящая из пикселей с ненулевым распределением, преобразуется с исходным изображением. Значение каждого пикселя представляет собой средневзвешенное значение значений соседних соседних пикселей. Значение исходного пикселя имеет наибольшее значение распределения Гаусса, поэтому он имеет наибольший вес, а вес соседних пикселей становится все меньше и меньше по мере того, как расстояние от исходного пикселя становится все дальше и дальше. Это размытие сохраняет краевые эффекты лучше, чем другие фильтры выравнивания размытия. Для преобразования непрерывной функции Гаусса в форму дискретного пространства, пожалуйста, обратитесь к Википедиимасштабное космическое преобразованиеВот этот.

Код для генерации ядра Гаусса с использованием numpy выглядит следующим образом:

def gaussian_kernel(size, sigma):
    kernel = np.zeros((size, size))
    k = int((size - 1) / 2)
    parameter = 1 / (2 * np.pi * sigma ** 2)
    for i in range(2 * k + 1):
        for j in range(2 * k + 1):
            kernel[i][j] = parameter * np.exp(-((i - k) ** 2 + (j - k) ** 2) / (2 * sigma ** 2))

    return kernel

Например, полученный размер3×33\times 3, ядро ​​Гаусса со стандартным отклонением 1, результат:

После сглаживания по Гауссу зашумленная функция на рисунке выше может получить «чистую» градиентную функцию:

При выборе параметров функции Гаусса мы должны обратить внимание на баланс между гладкостью и локализацией, Если гладкость слишком высока, исходный край будет размыт, что приведет к отклонению нашей цели.

что такое хороший детектор границ

Чтобы спроектировать хороший детектор границ, необходимо придерживаться трех принципов:

  • Высокая точность обнаружения: Хороший детектор границ должен свести к минимуму ложные срабатывания (т. е. границы, которые не существуют из-за шума) и ложные негативы (настоящие границы не обнаруживаются).
  • Высокая степень локализации: обнаруженный край должен быть как можно ближе к истинному краю
  • один ответ: Детектор может обнаружить только один край для реального края, т. е. минимизировать локальный максимум вблизи реального края.

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

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