Python图像处理:低频移中实现与OpenCV代码解析
Python图像处理:低频移中实现与OpenCV代码解析
本文将介绍如何使用Python和OpenCV库对图像进行低频移中处理,并附带代码解析。
代码功能
这段代码实现了对图像进行低频移中处理,并将原始图像和处理后的频谱可视化。
代码解析pythonimport cv2import numpy as npimport matplotlib.pyplot as plt
读取灰度图像img = cv2.imread('input.jpg', cv2.IMREAD_GRAYSCALE)
二维傅里叶变换f = np.fft.fft2(img)
低频移中fshift = np.fft.fftshift(f)
获取频谱最大幅值fmax = np.max(np.abs(fshift))
设置两个低频分量的位置u1, v1 = 50, 50u2, v2 = 150, 150
修改指定位置的幅值fshift[u1, v1] = fmax / 5fshift[u2, v2] = fmax / 5
逆向移动f1 = np.fft.ifftshift(fshift)
逆傅里叶变换img1 = np.fft.ifft2(f1)
获取振幅信息img1 = np.abs(img1)
显示结果plt.subplot(121)plt.imshow(img1, cmap='gray')plt.title('Modified Image')
plt.subplot(122)plt.imshow(np.log(1 + np.abs(fshift)), cmap='gray')plt.title('Shifted Spectrum (Log Scale)')
plt.show()
打印信息print('Image Shape:', img.shape)print('Low Frequency Component 1:', u1, v1)print('Low Frequency Component 2:', u2, v2)
代码详解
-
导入库: 首先导入必要的库:
cv2用于图像处理,numpy用于数值计算,matplotlib.pyplot用于绘图。 -
读取图像: 使用
cv2.imread()函数读取灰度图像,存储在变量img中。 -
傅里叶变换: 使用
np.fft.fft2()函数对图像进行二维傅里叶变换,得到频谱f。 -
低频移中: 使用
np.fft.fftshift()函数将频谱进行低频移中,将低频部分移到中心,高频部分移到四周。 -
设置低频分量: 计算频谱最大幅值
fmax,并在两个指定位置(u1, v1)和(u2, v2)设置幅值为fmax/5,模拟添加低频分量。 -
逆向移动: 使用
np.fft.ifftshift()函数对移动后的频谱进行逆向移动。 -
逆傅里叶变换: 使用
np.fft.ifft2()函数对逆向移动后的频谱进行逆傅里叶变换,得到重构图像img1。 -
获取振幅: 使用
np.abs()函数获取重构图像的振幅信息,消除结果中的虚部。 -
结果可视化: 使用
plt.imshow()函数分别显示重构图像和处理后的频谱的对数幅值图像。 -
信息打印: 打印图像尺寸和低频分量的位置信息。
总结
这段代码演示了如何使用Python和OpenCV库对图像进行低频移中处理。通过理解傅里叶变换和频谱操作,可以更好地理解图像处理中的频率域分析方法
原文地址: https://www.cveoy.top/t/topic/r7b 著作权归作者所有。请勿转载和采集!