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)

代码详解

  1. 导入库: 首先导入必要的库:cv2用于图像处理,numpy用于数值计算,matplotlib.pyplot用于绘图。

  2. 读取图像: 使用cv2.imread()函数读取灰度图像,存储在变量img中。

  3. 傅里叶变换: 使用np.fft.fft2()函数对图像进行二维傅里叶变换,得到频谱f

  4. 低频移中: 使用np.fft.fftshift()函数将频谱进行低频移中,将低频部分移到中心,高频部分移到四周。

  5. 设置低频分量: 计算频谱最大幅值fmax,并在两个指定位置(u1, v1)(u2, v2)设置幅值为fmax/5,模拟添加低频分量。

  6. 逆向移动: 使用np.fft.ifftshift()函数对移动后的频谱进行逆向移动。

  7. 逆傅里叶变换: 使用np.fft.ifft2()函数对逆向移动后的频谱进行逆傅里叶变换,得到重构图像img1

  8. 获取振幅: 使用np.abs()函数获取重构图像的振幅信息,消除结果中的虚部。

  9. 结果可视化: 使用plt.imshow()函数分别显示重构图像和处理后的频谱的对数幅值图像。

  10. 信息打印: 打印图像尺寸和低频分量的位置信息。

总结

这段代码演示了如何使用Python和OpenCV库对图像进行低频移中处理。通过理解傅里叶变换和频谱操作,可以更好地理解图像处理中的频率域分析方法

Python图像处理:低频移中实现与OpenCV代码解析

原文地址: https://www.cveoy.top/t/topic/r7b 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录