如何在OpenCV Python中找到高斯和拉普拉斯滤波器的傅里叶变换?
我们应用 傅里叶变换 来分析各种滤波器的频率特征。我们可以使用 np.fft.fft2() 对高斯和拉普拉斯滤波器应用傅里叶变换。我们使用 np.fft.fftshift() 将零频率分量移动到频谱的中心。
步骤
要查找高斯或拉普拉斯滤波器的傅里叶变换,可以按照以下步骤进行 –
- 导入所需的库。在以下所有Python示例中,所需的Python库是 OpenCV,Numpy 和 Matplotlib 。请确保您已经安装了它们。
-
定义高斯或拉普拉斯滤波器。
-
使用 np.fft.fft2(filter) 对上述已定义的滤波器应用傅里叶变换。
-
调用 np.fft.fftshift() 将零频率分量移动到频谱的中心。
-
应用对数变换并可视化滤波器和幅度谱。
让我们看一些示例,以便更清楚地了解问题。
示例
在这个Python程序中,我们找到了一个高斯滤波器的傅里叶变换。我们还可视化高斯滤波器和傅里叶变换后的高斯滤波器。
#导入所需的库
import cv2
import numpy as np
from matplotlib import pyplot as plt
#创建一个高斯滤波器
x = cv2.getGaussianKernel(5,10)
gaussian = x*x.T
#对高斯滤波器应用傅里叶变换
fft_filter = np.fft.fft2(gaussian)
#移动零频率分量到频谱中心
fft_shift = np.fft.fftshift(fft_filter)
#应用对数变换
mag_spectrum = np.log(np.abs(fft_shift)+1)
#可视化高斯滤波器和变换后的高斯滤波器
plt.subplot(1,2,1),plt.imshow(gaussian,cmap = 'gray')
plt.title('高斯滤波器'), plt.xticks([]), plt.yticks([])
plt.subplot(1,2,2),plt.imshow(mag_spectrum,cmap = 'gray')
plt.title('幅度谱'), plt.xticks([]), plt.yticks([])
plt.show()
输出
以上Python程序将产生以下 输出 窗口 –
示例
在这个程序中,我们计算Laplacian滤波器的傅里叶变换。我们还可视化Laplacian滤波器和傅里叶变换的Laplacian滤波器。
# 导入所需库
import cv2
import numpy as np
from matplotlib import pyplot as plt
# 创建Laplacian滤波器
laplacian=np.array([[0, 1, 0],[1,-4, 1],[0, 1, 0]])
# 对Laplacian滤波器应用傅里叶变换
fft_filter = np.fft.fft2(laplacian)
# 将零频率分量移至谱中心
fft_shift = np.fft.fftshift(fft_filter)
# 应用对数转换
mag_spectrum = np.log(np.abs(fft_shift)+1)
# 可视化Laplacian滤波器和傅里叶变换的Laplacian滤波器
plt.subplot(1,2,1),plt.imshow(laplacian,cmap = 'gray')
plt.title('Laplacian Filter'), plt.xticks([]), plt.yticks([])
plt.subplot(1,2,2),plt.imshow(mag_spectrum,cmap = 'gray')
plt.title('Magnitude Spectrum'), plt.xticks([]), plt.yticks([])
plt.show()
输出
它将产生以下 输出 窗口 −