Что такое Canny Edge Detection
Обнаружение краев Canny — это метод обнаружения краев с использованием многоэтапного алгоритма обнаружения краев. Этот метод был опубликован в 1986 году Джоном Ф. Кэнни.
Обнаружение краев Canny в основном делится на 4 этапа:
(1) Шумоподавление. Шум может повлиять на точность обнаружения краев, поэтому его следует сначала отфильтровать.
(2) Рассчитать величину и направление градиента
(3) Немаксимальное подавление, то есть соответствующее «утончение» края.
(4) Определите ребро. Окончательная информация о границе определяется с использованием двухпорогового алгоритма.
При обнаружении краев реального изображения мы обычно используем фильтрацию по Гауссу для удаления шума изображения (1), затем вычисляем величину и угол градиента (2), а затем перемещаемся по пикселям изображения, чтобы удалить все точки, не являющиеся краями (3). . Наконец, виртуальный край, созданный шумом, удаляется для получения окончательной информации о крае. (4)
В OpenCV он предоставляет нам функцию cv2.Canny() для обнаружения края Canny, ее полное определение выглядит следующим образом:
def Canny(image, threshold1, threshold2, edges=None, apertureSize=None, L2gradient=None):
изображение: 8-битное входное изображение
threshold1: первый порог во время обработки
threshold2: второй порог во время обработки
края: вычисленное изображение края
апертураSize: Размер апертуры фильтра Собеля.
L2gradient: вычисляет идентичность величины градиента изображения. Это логический тип со значением по умолчанию False. Если оно равно True, то для вычисления используется более точная норма L2, то есть сумма квадратов производных по двум направлениям возводится в квадрат, в противном случае используется норма L1 (абсолютное значение производных по двум направлениям добавляется непосредственно), математическая формула выглядит следующим образом:
получить край изображения
Теперь, когда мы поняли определение его метода, а также конкретный принцип реализации. Затем давайте получим информацию о краях изображения с помощью программы. Конкретный код выглядит следующим образом:
import cv2
img = cv2.imread("4.jpg", cv2.IMREAD_UNCHANGED)
result1=cv2.Canny(img,100,200)
result2=cv2.Canny(img,30,90)
cv2.imshow("img", img)
cv2.imshow("result1", result1)
cv2.imshow("result2", result2)
cv2.waitKey()
cv2.destroyAllWindows()
После запуска полученный эффект показан на следующем рисунке:
Можно видеть, что информация об изображении, полученная с помощью обнаружения краев Canny, почти такая же, как эффект, достигнутый классным разделением контуров символов Douyin. Это верно, на самом деле, классный эффект разделения контуров символов Douyin может быть реализован с помощью обнаружения краев Canny.