Рубрики

Программа Python для определения краев изображения с помощью OpenCV | Метод обнаружения краев Собеля

Следующая программа обнаруживает края кадров в прямом эфире видео контента. Код будет компилироваться только в среде Linux. Убедитесь, что openCV установлен в вашей системе, прежде чем запускать программу.

Шаги для загрузки требований ниже:

  • Запустите следующую команду на своем терминале, чтобы установить его из репозитория Ubuntu или Debian.
    sudo apt-get install libopencv-dev python-opencv
  • ИЛИ Для загрузки OpenCV с официального сайта выполните следующую команду:
    bash install-opencv.sh

    на вашем терминале.

  • Введите свой пароль sudo, и у вас будет установлен OpenCV.

Принцип обнаружения краев

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

  • Первое, что мы собираемся сделать, это найти градиент изображения в градациях серого, что позволяет нам находить краеподобные области в направлениях x и y. Градиент является многопараметрическим обобщением производной. В то время как производная может быть определена по функциям одной переменной, для функций нескольких переменных градиент занимает свое место.
  • Градиент является вектор-функцией, а не производной, которая скалярна. Как и производная, градиент представляет наклон тангенса графика функции . Точнее, градиент указывает в направлении наибольшей скорости увеличения функции, а его величина — это наклон графика в этом направлении.

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

# Python программа для обнаружения Edge
# использование OpenCV в Python
# с использованием обнаружения краев Собеля
# и лапласианский метод

import cv2

import numpy as np

  
# Захватите видео в реальном времени с камеры 0

cap = cv2.VideoCapture(0)

  

while(1):

  

    # Взять каждый кадр

    _, frame = cap.read()

      

    # Конвертировать в HSV для более простых расчетов

    hsv = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV)

      

    # Расчет Собелкса

    sobelx = cv2.Sobel(frame,cv2.CV_64F,1,0,ksize=5)

      

    # Расчет Собеля

    sobely = cv2.Sobel(frame,cv2.CV_64F,0,1,ksize=5)

      

    # Расчет лапласиана

    laplacian = cv2.Laplacian(frame,cv2.CV_64F)

      

    cv2.imshow('sobelx',sobelx)

    cv2.imshow('sobely',sobely)

    cv2.imshow('laplacian',laplacian)

    k = cv2.waitKey(5) & 0xFF

    if k == 27:

        break

  
cv2.destroyAllWindows()

  
# отпустите рамку
cap.release()

Расчет производной изображения

Цифровое изображение представлено матрицей, в которой хранится значение RGB / BGR / HSV (к какому цветовому пространству принадлежит изображение) каждого пикселя в строках и столбцах.
Производная матрицы вычисляется оператором, называемым лапласианом . Чтобы вычислить лапласиан, вам нужно будет вычислить первые две производные, называемые производными Собеля , каждая из которых учитывает изменения градиента в определенном направлении: одно горизонтальное, другое вертикальное.

  • Горизонтальная производная Собеля (Sobel x) : получается путем свертки изображения с матрицей, называемой ядром, которая всегда имеет нечетный размер. Ядро с размером 3 — самый простой случай.
  • Вертикальная производная Собеля (Sobel y) : получается путем свертки изображения с матрицей, называемой ядром, которая всегда имеет нечетный размер. Ядро с размером 3 — самый простой случай.
  • Свертка рассчитывается по следующему методу: изображение представляет собой исходную матрицу изображения, а фильтр — матрицу ядра.


    Коэффициент = 11 — 2- 2- 2- 2- 2 = 3
    Смещение = 0

    Взвешенная сумма = 124 * 0 + 19 * (- 2) + 110 * (- 2) + 53 * 11 + 44 * (- 2) + 19 * 0 + 60 * (- 2) + 100 * 0 = 117
    O [4,2] = (117/3) + 0 = 39

    Таким образом, в конце, чтобы получить лапласиан (приближение), нам нужно будет объединить два предыдущих результата (Sobelx и Sobely) и сохранить его в лапласиане.

Параметры:

  • cv2.Sobel (): функция cv2.Sobel (frame, cv2.CV_64F, 1,0, ksize = 5) может быть записана как
    cv2.Sobel(original_image,ddepth,xorder,yorder,kernelsize)

    где первый параметр — исходное изображение, второй параметр — глубина целевого изображения. Когда ddepth = -1 / CV_64F, изображение получателя будет иметь ту же глубину, что и источник. Третий параметр — это порядок производной x. Четвертый параметр — это порядок производной y. При вычислении Sobelx мы будем устанавливать xorder как 1 и yorder как 0, тогда как при вычислении Sobly случай будет обратным. Последний параметр — это размер расширенного ядра Собеля; это должно быть 1, 3, 5 или 7.

  • cv2.Laplacian : в функции
    cv2.Laplacian(frame,cv2.CV_64F)

    первый параметр — исходное изображение, а второй параметр — глубина целевого изображения. Когда глубина = -1 / CV_64F, конечное изображение будет иметь ту же глубину, что и исходное изображение.

Приложения для обнаружения краев

  • Уменьшите ненужную информацию в изображении, сохраняя структуру изображения.
  • Извлечение важных функций изображения, таких как кривые, углы и линии.
  • Распознает объекты, границы и сегментацию.
  • Играет важную роль в компьютерном зрении и распознавании

Связанная статья: Обнаружение края, используя метод обнаружения края Canny
Эта статья предоставлена Pratima Upadhyay . Если вы как GeeksforGeeks и хотели бы внести свой вклад, вы также можете написать статью с помощью contribute.geeksforgeeks.org или по почте статьи contribute@geeksforgeeks.org. Смотрите свою статью, появляющуюся на главной странице GeeksforGeeks, и помогите другим вундеркиндам.

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

Рекомендуемые посты:

Программа Python для определения краев изображения с помощью OpenCV | Метод обнаружения краев Собеля

0.00 (0%) 0 votes