Методы обнаружения контуров в изображении: пространственные фильтры

Методы обнаружения контуров в изображении: пространственные фильтры

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

Предварительные требования

  • Базовое знание Python.
  • Установленные библиотеки: opencv-python, numpy, scipy.
  • Понимание понятий свёртки и градиента на школьном уровне.

1. Теоретическое введение в поиск контуров. Немного математики

1.1 Механизм работы масок

Маска — это матрица небольшой размерности, применяемая ко всему изображению для пересчёта значений пикселей. Её элементы называются весами и подбираются в зависимости от задачи. Чаще всего используются нечётные размеры маски — это позволяет чётко определить её центр.

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

Ключевым при обнаружении контуров является разрывность яркости. В RGB-модели яркость определяется как среднее значений по трём каналам. Для анализа используются производные первого и второго порядка, а также понятие градиента.

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

При выходе маски за границы изображения недостающие пиксели полагаются нулевыми или изображение расширяется.

1.2 Оператор Робертса

Оператор Робертса — один из простейших градиентных фильтров. Он использует две матрицы 2×2, ориентированные по диагоналям.

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

1.3 Операторы Прюитта и Собеля

Операторы Прюитта и Собеля используют маски 3×3 и работают по всем направлениям, в отличие от диагонально ориентированного Робертса.

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

Оператор Собеля отличается увеличенным весом (коэффициент 2) у центральных элементов маски. Это снижает эффект сглаживания и повышает чувствительность к диагональным контурам. Он лучше выделяет мелкие детали по сравнению с Прюиттом.

1.4 Оператор Лапласа

Оператор Лапласа (Лапласиан) основан на производной второго порядка и относится к изотропным — он инвариантен к повороту изображения.

Дискретная форма Лапласиана представляется в виде матрицы 3×3. Для получения результата из исходного изображения вычитается свёртка с этой маской. Часто требуется нормализация результата.

1.5 Фильтр Уоллеса

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

Это позволяет устранить неравномерное освещение и улучшить локальный контраст. Фильтр делит изображение на блоки и пересчитывает яркость каждого пикселя с учётом локальной статистики.

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

1.6 Детектор границ Канни

Алгоритм Канни состоит из пяти этапов:

  • Сглаживание — устранение шума, например, с помощью фильтра Гаусса.
  • Поиск градиентов — вычисление величины и направления градиента, например, с помощью оператора Собеля.
  • Подавление не-максимумов — оставляются только локальные максимумы градиента в направлении вектора градиента. Углы квантуются с шагом 45°.
  • Двойная пороговая фильтрация — пиксели разделяются на три группы: сильные (выше верхнего порога), слабые (между порогами) и подавляемые (ниже нижнего).
  • Трассировка по гистерезису — слабые границы сохраняются только если они связаны с сильными. Проверяется связность по 8-ми направлениям.

Алгоритм обеспечивает точное выделение контуров и хорошую устойчивость к шуму.

2. Практическая реализация

Все методы легко реализуются с помощью библиотек OpenCV и NumPy.

2.1 Оператор Робертса

Реализуется с помощью двух масок 2×2 для горизонтального и вертикального направлений. Результат — грубый, обрывистый контур с низкой детализацией. Подходит для задач, где важна скорость.

2.2 Операторы Собеля и Прюитта

Оба оператора используют маски 3×3. Прюитт выделяет больше деталей, чем Робертс. Собель за счёт усиления центральных весов лучше работает на диагоналях и мелких структурах.

2.3 Оператор Лапласа

Лапласиан реализуется одной маской, так как он изотропный. Фильтр очень чувствителен к деталям и шуму. Время выполнения собственной реализации — 150 мс, тогда как встроенный метод OpenCV работает за 8 мс.

2.4 Детектор границ Канни

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

Функция cv.findContours() использует топологический анализ бинаризованного изображения для поиска и иерархической организации контуров. cv.drawContours() визуализирует результат: контуры — синим, bounding box’ы — зелёным.

2.5 Адаптивный медианный фильтр Уоллеса

Фильтр устраняет резкие перепады яркости относительно локального среднего. Применяется как предобработка перед выделением контуров.

Выводы

  • Детектор Канни показывает лучший результат по качеству и подавлению шума.
  • Оператор Лапласа чувствителен к деталям, но захватывает много шума. По скорости близок к другим фильтрам.
  • Операторы Собеля и Прюитта дают схожие результаты. Собель лучше на диагоналях и мелких структурах. Хорошее сочетание качества и производительности.
  • Оператор Робертса даёт наименее качественный результат, но самый быстрый. Подходит для обработки больших массивов, где важна скорость.
  • Фильтр Уоллеса устраняет локальные контрасты, упрощая выбор порогов и последующую обработку.
Читать оригинал