How to find the Fourier Transforms of Gaussian and Laplacian filters in OpenCV Python?
Image filtering is an essential operation in image processing, which is used for enhancing or degrading specific features in an image. Two critical types of filters used in image processing are the Gaussian filter and the Laplacian filter. The Fourier Transform is a mathematical tool that transforms an image from the spatial domain to the frequency domain and is used to analyze the frequency content of an image. In this article, we’ll discuss how to find Fourier Transforms of Gaussian and Laplacian filters in OpenCV Python.
Fourier Transform
The Fourier Transform is a mathematical tool that transforms a given function in the spatial domain to a function in the frequency domain. In simpler terms, it transforms an image from the spatial domain to the frequency domain. The frequency domain can be used to analyze the frequency content of an image. The Fourier Transform of an image in OpenCV Python can be found using the cv2.dft()
function.
Here’s an example of finding the Fourier Transform of an image:
import cv2
import numpy as np
# Read an image from file
img = cv2.imread('image.png',0)
# Find the Fourier Transform
dft = cv2.dft(np.float32(img),flags = cv2.DFT_COMPLEX_OUTPUT)
# Shift the zero-frequency component to the center of the spectrum
dft_shift = np.fft.fftshift(dft)
# Find the magnitude spectrum
magnitude_spectrum = 20*np.log(cv2.magnitude(dft_shift[:,:,0],dft_shift[:,:,1]))
# Display the magnitude spectrum
cv2.imshow('Magnitude Spectrum',magnitude_spectrum)
cv2.waitKey(0)
cv2.destroyAllWindows()
The above code reads an image from a file, finds the Fourier Transform using the cv2.dft()
function, shifts the zero-frequency component to the center of the spectrum, finds the magnitude spectrum, and displays it.
Gaussian Filter
The Gaussian filter is a type of low-pass filter used for smoothening an image by reducing noise and blurring. The Fourier Transform of a Gaussian filter is a Gaussian function that is centered at the origin. In OpenCV Python, the Gaussian filter can be applied using the cv2.GaussianBlur()
function.
Here’s an example code for finding the Fourier Transform of a Gaussian filter:
import cv2
import numpy as np
# Specify the image dimensions
rows = 480
cols = 640
# Create a Gaussian filter
gaussian_filter = cv2.getGaussianKernel(256,100)
# Normalize the filter
gaussian_filter = gaussian_filter / np.linalg.norm(gaussian_filter)
# Resize the filter to match the image size
gaussian_filter = np.resize(gaussian_filter,(rows,cols))
# Find the Fourier Transform of the filter
dft_filter = np.fft.fft2(gaussian_filter)
# Shift the zero-frequency component to the center of the spectrum
dft_filter_shift = np.fft.fftshift(dft_filter)
# Find the magnitude spectrum
magnitude_spectrum = 20*np.log(np.abs(dft_filter_shift))
# Display the magnitude spectrum
cv2.imshow('Magnitude Spectrum',magnitude_spectrum)
cv2.waitKey(0)
cv2.destroyAllWindows()
The above code creates a Gaussian filter using the cv2.getGaussianKernel()
function, normalizes the filter, resizes it to match the image size, finds the Fourier Transform of the filter using the np.fft.fft2()
function, shifts the zero-frequency component to the center of the spectrum, finds the magnitude spectrum and displays it.
Laplacian Filter
The Laplacian filter is a type of high-pass filter used for edge detection in an image. The Fourier Transform of a Laplacian filter is a function that is centered at the origin with both positive and negative values. In OpenCV Python, the Laplacian filter can be applied using the cv2.Laplacian()
function.
Here’s an example code for finding the Fourier Transform of a Laplacian filter:
import cv2
import numpy as np
# Specify the image dimensions
rows = 480
cols = 640
# Create a Laplacian filter
laplacian_filter = np.array([[0, 1, 0], [1, -4, 1], [0, 1, 0]])
# Pad the filter with zeros
pad = np.zeros((rows - 3, cols - 3))
laplacian_filter = np.pad(laplacian_filter, ((1, 1), (1, 1)))
laplacian_filter = np.vstack((laplacian_filter, pad))
laplacian_filter = np.hstack((laplacian_filter, pad))
# Find the Fourier Transform of the filter
dft_filter = np.fft.fft2(laplacian_filter)
# Shift the zero-frequency component to the center of the spectrum
dft_filter_shift = np.fft.fftshift(dft_filter)
# Find the magnitude spectrum
magnitude_spectrum = 20*np.log(np.abs(dft_filter_shift))
# Display the magnitude spectrum
cv2.imshow('Magnitude Spectrum',magnitude_spectrum)
cv2.waitKey(0)
cv2.destroyAllWindows()
The above code creates a Laplacian filter using a matrix of values, pads it with zeros to match the image size, finds the Fourier Transform of the filter using the np.fft.fft2()
function, shifts the zero-frequency component to the center of the spectrum, finds the magnitude spectrum and displays it.
Conclusion
In this article, we discussed how to find Fourier Transforms of Gaussian and Laplacian filters in OpenCV Python. The Fourier Transform is a valuable tool in image processing that transforms an image from the spatial domain to the frequency domain. The Gaussian filter and Laplacian filter are two essential filters used in image processing for smoothening and edge detection, respectively. Finding the Fourier Transforms of these filters can help in analyzing the frequency content of an image. With the help of sample code snippets, we outlined how to find Fourier Transforms of Gaussian and Laplacian filters effortlessly.