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

  1. Градиент изображения. Градиент изображения представляет собой скорость изменения значений пикселей по всему изображению. Это вектор, который указывает в направлении наибольшего увеличения интенсивности. Проще говоря, он говорит нам, как интенсивность изображения меняется от одного пикселя к соседним пикселям. Математически для изображения в оттенках серого градиент в направлении x (горизонтальном) и направлении y (вертикальном) можно вычислить с использованием частных производных:
  • Горизонтальный градиент (Gx) = Изображение(x+1, y) — Изображение(x-1, y)
  • Вертикальный градиент (Гр) = Изображение(x, y+1) — Изображение(x, y-1)

Величину градиента можно рассчитать как:

  • Величина градиента (G) = sqrt(Gx² + Gy²)

Направление градиента можно рассчитать как:

  • Направление градиента (θ) = atan(Gy / Gx)

Информация о градиенте помогает обнаружить края изображения.

2. Лапласиан: Лапласиан — это оператор производной второго порядка, который измеряет скорость изменения величины градиента. Это помогает найти на изображении области быстрого изменения интенсивности, которые могут соответствовать краям или углам. Оператор Лапласа часто используется для обнаружения краев и повышения резкости изображения. Для изображения в оттенках серого оператор Лапласа можно применить следующим образом:

  • Лапласово изображение = Gx² + Gy²

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

3. Оператор Собеля. Оператор Собеля — это широко используемый фильтр обнаружения краев, который аппроксимирует градиент изображения. Это сверточный фильтр, который подчеркивает края путем расчета величины градиента как в направлениях x, так и в направлениях y. Оператор Собеля можно использовать для определения силы и направления ребер.

  1. Оператор Собеля состоит из двух масок свертки: одна для обнаружения краев в горизонтальном направлении (Gx), а другая для обнаружения краев в вертикальном направлении (Gy). Эти маски подчеркивают изменения интенсивности пикселей в соответствующих направлениях.
  2. Оператор Собеля часто используется в задачах обнаружения границ, поскольку его относительно просто вычислить и во многих случаях он дает хорошие результаты.

В OpenCV вы можете использовать функции cv2.Laplacian() и cv2.Sobel() для вычисления градиента изображения, производных Лапласа и Собеля. Эти операции обычно используются в обработке изображений и компьютерном зрении для таких задач, как обнаружение границ и извлечение признаков.

Вот простой фрагмент кода для Image Gradient.

import cv2
import numpy as np

# Read the input image
image = cv2.imread('input_image.jpg', cv2.IMREAD_GRAYSCALE)

# Compute Laplacian gradient
laplacian = cv2.Laplacian(image, cv2.CV_64F)

# Compute Sobel gradients in X and Y directions
sobel_x = cv2.Sobel(image, cv2.CV_64F, 1, 0, ksize=3)  # Sobel X
sobel_y = cv2.Sobel(image, cv2.CV_64F, 0, 1, ksize=3)  # Sobel Y

# Optional: Convert gradients to absolute values
laplacian_abs = cv2.convertScaleAbs(laplacian)
sobel_x_abs = cv2.convertScaleAbs(sobel_x)
sobel_y_abs = cv2.convertScaleAbs(sobel_y)

# Display the computed gradients
cv2.imshow('Laplacian', laplacian_abs)
cv2.imshow('Sobel X', sobel_x_abs)
cv2.imshow('Sobel Y', sobel_y_abs)

cv2.waitKey(0)
cv2.destroyAllWindows()

Еще один фрагмент кода для того же самого:

# Image Gradient..
# It is a directional change in the color or intensity in an image
# it is most important part in finding information from range.
# Like finding edges within the images.
# There are various methods to find image gradient.
# laplacian Derivatives, SobelX and SobelY.
# image should be gray scale.

import cv2 
import numpy as np

img = cv2.imread("C:\\Users\\RANGER\\Desktop\\pixabay.jpg",0)
img = cv2.resize(img,(400,400))

# Laplacian = it calculate la placian derivate in pixels.
# parameter (image, data_type for -ve val,ksize)
# why datatype (because in laplacian derivate calculation if any -ve number found then these special datatye will handle those -ve numbers.)
lap = cv2.Laplacian(img,cv2.CV_64F,ksize=3)
# here in edges filtration you may find so much noise.
# so for clear edge filtration we will create array
# ksize will alway be odd number.
lap = np.uint8(np.absolute(lap))


# sobel Operation
# joint operation of Gaussian Smoothening and Differentiation operation.
# more resistant to noise.
# parameter(image, type for -ve val, x= 1(#vertical lines), y=0(horizontal line), ksize)

sobelX= cv2.Sobel(img, cv2.CV_64F,1,0,ksize=3)
sobelY= cv2.Sobel(img, cv2.CV_64F,0,1,ksize=3)
# here you may find very noise and distortion which is caused by datatype which hold 64 byte int size.
# which is why we need  to convert it into unsigned int 8.
sobelX = np.uint8(np.absolute(sobelX))
sobelY = np.uint8(np.absolute(sobelY))

# here you can find the difference i.e., in sobelX pixel will be verfied by vertically (top-buttom), 
# but in sobelY it is verified by Horizontal way( left - right).

# finally combine sobelX and sobelY
sobelcombine = cv2.bitwise_or(sobelX,sobelY)

cv2.imshow("grayimage",img)
cv2.imshow("Laplacian",lap)
cv2.imshow("Sobelx",sobelX)
cv2.imshow("Sobely",sobelY)
cv2.imshow("SobelCombine",sobelcombine)
cv2.waitKey(0)
cv2.destroyAllWindows()

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