Edge detection
Edge detection (детекция границ) — группа алгоритмов компьютерного зрения для выделения границ объектов по резкому изменению яркости или цвета пикселей. Лежит в основе классической сегментации изображений и дополняет нейросетевые методы удаления фона.
Edge detection (детекция границ) — группа алгоритмов компьютерного зрения для выявления резких изменений яркости (градиентов) в изображении, соответствующих физическим границам объектов. Краеугольная техника классического машинного зрения, остающаяся важным элементом предобработки в современных нейросетевых пайплайнах удаления фона и сегментации.
Классические алгоритмы детекции границ
- Sobel (1968): попарные свёрточные ядра 3×3 по X и Y, вычисляет приближение градиента. Быстрый, устойчив к шуму, но даёт толстые границы.
- Prewitt: похож на Sobel, но с равномерными весами. Менее устойчив к шуму.
- Laplacian of Gaussian (LoG): гауссово размытие + оператор Лапласа. Изотропный (не зависит от направления), хорошо находит точки перегиба яркости.
- Canny (1986): многошаговый алгоритм: гауссово сглаживание → Sobel-градиент → non-maximum suppression → hysteresis thresholding. Стандарт для чётких тонких границ. Параметры:
threshold1,threshold2,apertureSize. - Structured Forests / HED (2015): нейросетевой детектор границ на Random Forests / CNN, обученный на BSD500. Понимает семантику объектов, не только контраст яркости.
Роль edge detection в удалении фона
Современные нейросети (BiRefNet, rembg) не используют классический edge detection как таковой — они учатся распознавать объекты end-to-end. Однако edge-информация влияет на качество несколькими путями:
- Alpha refinement: после получения грубой маски от основной сети, edge-aware alpha refinement (FBA Matting, ViTMatte) уточняет пиксели границы, используя градиент яркости
- Loss functions: при обучении BiRefNet используется edge-loss — штраф за неточные предсказания именно на границах объекта
- Guided filter / Edge-aware smoothing: постобработка alpha-channel с сохранением чётких границ
Edge detection в практических задачах
| Задача | Рекомендуемый алгоритм | Библиотека |
|---|---|---|
| Быстрый детектор для предобработки | Sobel / Canny | OpenCV cv2.Canny() |
| Точные границы с семантикой | HED / RCF | PyTorch model |
| Граница для compositing | Canny + guided filter | OpenCV + scikit-image |
| Художественный эффект «карандашный рисунок» | Laplacian + инвертирование | PIL / Sharp |
FAQ — Edge detection
Почему Canny не работает на зашумленных фото?
Шум создаёт ложные края — каждый шумовой пиксель даёт высокий градиент. Решение: увеличить sigma гауссового размытия (первый шаг Canny) или применить denoising перед детекцией. На сильно зашумленных фото лучше работают обученные детекторы (HED), так как они игнорируют случайные текстуры.
Edge detection vs Segmentation — в чём разница?
Edge detection возвращает карту вероятных границ (каждый пиксель = вероятность границы). Segmentation возвращает маску принадлежности к классу (пиксель = «объект» или «фон»). Границы — производная сегментации, но граница не равна сегментационной маске: граница двусторонняя, маска — бинарная.