How to find the image gradients using Sobel and Laplacian derivatives in OpenCV Python?
Image gradients play an essential role in computer vision and image processing. They help us detect edges and corners, find contours and shapes, and extract useful information from images. To compute the image gradients, we can use two commonly used image operators called Sobel and Laplacian derivatives.
In this tutorial, we will explore how to find the image gradients using Sobel and Laplacian derivatives in OpenCV Python. We will use OpenCV, a powerful computer vision library, to perform the operations. So, let’s get started!
Prerequisites
Before we dive into the code, let’s make sure that we have the necessary libraries installed on our system. For this tutorial, we need Python and OpenCV installed. To install them, run the following commands in your terminal:
pip install opencv-python
Sobel Derivatives
Sobel operators are widely used in image processing to compute the image gradients. They are easy to implement and can detect edges in the horizontal and vertical direction.
To find the horizontal and vertical gradients using Sobel operators, we must apply two separate filters along the x and y-axis, respectively. The resulting gradients are then combined to obtain the final gradient magnitude and orientation.
Let’s see how to compute image gradients using Sobel derivatives in OpenCV Python.
import cv2
import numpy as np
# Load the image
image = cv2.imread('input.jpg')
# Convert the image to grayscale
gray_image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
# Compute the Sobel gradient along the x-axis and y-axis
sobel_x = cv2.Sobel(gray_image, cv2.CV_64F, 1, 0, ksize=5)
sobel_y = cv2.Sobel(gray_image, cv2.CV_64F, 0, 1, ksize=5)
# Compute the gradient magnitude and orientation
magnitude = np.sqrt(sobel_x ** 2 + sobel_y ** 2)
angle = np.arctan2(sobel_y, sobel_x)
# Show the results
cv2.imshow('Input Image', image)
cv2.imshow('Sobel X', sobel_x)
cv2.imshow('Sobel Y', sobel_y)
cv2.imshow('Gradient Magnitude', magnitude)
cv2.imshow('Gradient Orientation', angle)
cv2.waitKey(0)
In the code above, we first load the input image and convert it to grayscale. Then, we apply the cv2.Sobel
function to compute the image gradients along the x-axis and y-axis, respectively. Note that we use cv2.CV_64F
to specify the output data type of the gradient matrices.
Next, we combine the two gradient matrices using the np.sqrt
and np.arctan2
functions to obtain the gradient magnitude and orientation, respectively.
Finally, we display the input image, Sobel gradient along the x-axis and y-axis, gradient magnitude, and orientation using cv2.imshow
and wait for a key press to exit.
Laplacian Derivatives
Laplacian operators are another common way to compute image gradients. They can detect edges and corners in the image and are used for image sharpening and enhancement.
To compute the Laplacian gradient of an image, we apply a Laplacian filter to the image. This filter is defined as the second derivative of the image in the x and y direction. The resulting gradient is then combined to obtain the final gradient magnitude.
Let’s see how to compute image gradients using Laplacian derivatives in OpenCV Python.
import cv2
import numpy as np
# Load the image
image = cv2.imread('input.jpg')
# Convert the image to grayscale
gray_image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
# Compute the Laplacian gradient
laplacian = cv2.Laplacian(gray_image, cv2.CV_64F)
# Compute the gradient magnitude
magnitude = np.abs(laplacian)
# Show the results
cv2.imshow('Input Image', image)
cv2.imshow('Laplacian', laplacian)
cv2.imshow('Gradient Magnitude', magnitude)
cv2.waitKey(0)
In the code above, we first load the input image and convert it to grayscale. Then, we apply the cv2.Laplacian
function to compute the Laplacian gradient of the image. Note that we use cv2.CV_64F
to specify the output data type of the gradient matrix.
Next, we compute the gradient magnitude using the np.abs
function and display the input image, Laplacian gradient, and gradient magnitude using cv2.imshow
and wait for akey press to exit.
Conclusion
In this tutorial, we have learned how to find image gradients using Sobel and Laplacian derivatives in OpenCV Python. We have seen how to compute the gradients along the x and y-axis using Sobel operators and how to apply Laplacian operators to compute the Laplacian gradient of an image.
We have also learned how to combine the gradient matrices to obtain the final gradient magnitude and orientation. These operations are essential in various computer vision and image processing tasks, such as edge detection, corner detection, and feature extraction.
By understanding how to compute image gradients using Sobel and Laplacian derivatives, we can gain a deeper understanding of the underlying principles of image processing and apply this knowledge to solve complex computer vision problems.