千家信息网

如何基于Python实现图像的傅里叶变换

发表于:2026-11-01 作者:千家信息网编辑
千家信息网最后更新 2026年11月01日,这篇文章主要介绍了如何基于Python实现图像的傅里叶变换,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。前言首先是本文总体代码,改一下
千家信息网最后更新 2026年11月01日如何基于Python实现图像的傅里叶变换

这篇文章主要介绍了如何基于Python实现图像的傅里叶变换,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。

前言

首先是本文总体代码,改一下图像的读取路径就可以运行了,但我还是建议大家先看后面的步骤一行行敲代码,这样效果更好:

"""Author:XiaoMadate:2021/11/7"""import cv2import matplotlib.pyplot as pltimport numpy as np #读取图像信息from numpy.fft import ifftshift img0 = cv2.imread("E:\From Zhihu\For the desk\cvthirteen2.jpg")img1 = cv2.resize(img0, dsize = None, fx = 0.5, fy = 0.5)img2 = cv2.cvtColor(img1, cv2.COLOR_BGR2GRAY)               #转化为灰度图h, w = img1.shape[:2]print(h, w)cv2.namedWindow("W0")cv2.imshow("W0", img2)cv2.waitKey(delay = 0)#将图像转化到频域内并绘制频谱图##numpy实现plt.rcParams['font.family'] = 'SimHei'       #将全局中文字体改为黑体f = np.fft.fft2(img2)fshift = np.fft.fftshift(f)   #将0频率分量移动到图像的中心magnitude_spectrum0 = 20*np.log(np.abs(fshift))#傅里叶逆变换#Numpy实现ifshift = np.fft.ifftshift(fshift)# 将复数转为浮点数进行傅里叶频谱图显示ifimg = np.log(np.abs(ifshift))if_img = np.fft.ifft2(ifshift)origin_img = np.abs(if_img)imggroup = [img2, magnitude_spectrum0, ifimg, origin_img]titles0 = ['原始图像', '经过移动后的频谱图', '逆变换得到的频谱图', '逆变换得到的原图']for i in range(4):    plt.subplot(2, 2, i + 1)    plt.xticks([])                               #除去刻度线    plt.yticks([])    plt.title(titles0[i])    plt.imshow(imggroup[i], cmap = 'gray')plt.show()##OpenCV实现dft = cv2.dft(np.float32(img2), flags = cv2.DFT_COMPLEX_OUTPUT)dft_shift = np.fft.fftshift(dft)magnitude_spectrum1 = 20*np.log(cv2.magnitude(dft_shift[:, :, 0], dft_shift[:, :, 1]))plt.subplot(121), plt.imshow(img2, cmap = 'gray')plt.title('原图'), plt.xticks([]), plt.yticks([])plt.subplot(122), plt.imshow(magnitude_spectrum1, cmap = 'gray')plt.title('频谱图'), plt.xticks([]), plt.yticks([])plt.show()

(1)基本概念

一般我们观察信号是直接在时域内(声音信号)或者空间内(图像)对其进行分析,这样虽然符合常理,但信号中的一些有用的条件就不会被我们考虑进去,从而达不到分析的效果,所以我们要将信号转化到其他的一些变换域中进行分析。

(2)读取图像信息

本系列文章经典操作:

"""Author:XiaoMadate:2021/11/7"""import cv2import matplotlib.pyplot as pltimport numpy as np #读取图像信息img0 = cv2.imread("E:\From Zhihu\For the desk\cvthirteen2.jpg")img1 = cv2.resize(img0, dsize = None, fx = 0.5, fy = 0.5)img2 = cv2.cvtColor(img1, cv2.COLOR_BGR2GRAY)               #转化为灰度图h, w = img1.shape[:2]print(h, w)cv2.namedWindow("W0")cv2.imshow("W0", img1)cv2.waitKey(delay = 0)

得到图像信息如下:

540 960

1. 傅里叶变换

代码参考:OpenCV官网

(1)基本概念

当我们描述一段声音时,我们不仅会说它的音量的大小如何,还有可能会说它的频率是高的还是低的,那么我们该怎么理解频率这个概念呢?以前学习三角函数时我们被告知每一个正弦信号有它的固定的频率,就是它的周期的倒数。那么什么是频域呢?我们也接触过其他形状的波形,比如方波、三角波等等,而这些不同形状的波呢,就是用一个个频率不相同的正弦波组成的,如果我们将那些不同频率的正弦波按照它们的频率大小排列起来,就得到了一个频率轴(这是一维的),然后我们将各个频率对应的幅度值给它们对应起来(就像xoy平面一样)得到的二维的平面,就是频域了。傅里叶变换就是将信号从时域转化到频域的一个工具。对于傅里叶变换中的的理解可以参考下面的图片:

当然如果你想更加深入的了解傅里叶变换,你可以按照图片上的水印去搜索,他那里讲的非常清晰。

(2)numpy实现

#将图像转化到频域内并绘制频谱图plt.rcParams['font.family'] = 'SimHei'       #将全局中文字体改为黑体f = np.fft.fft2(img2)fshift = np.fft.fftshift(f)       #将0频率分量移动到中心magnitude_spectrum = 20*np.log(np.abs(fshift))plt.xticks([])                               #除去刻度线plt.yticks([])plt.title("频谱图")plt.imshow(magnitude_spectrum, cmap = 'gray')plt.show()

(3)OpevCV实现

#OpenCV实现dft = cv2.dft(np.float32(img2), flags = cv2.DFT_COMPLEX_OUTPUT)dft_shift = np.fft.fftshift(dft)magnitude_spectrum1 = 20*np.log(cv2.magnitude(dft_shift[:, :, 0], dft_shift[:, :, 1]))plt.subplot(121), plt.imshow(img2, cmap = 'gray')plt.title('原图'), plt.xticks([]), plt.yticks([])plt.subplot(122), plt.imshow(magnitude_spectrum1, cmap = 'gray')plt.title('频谱图'), plt.xticks([]), plt.yticks([])plt.show()

2. 傅里叶逆变换

(1)基本概念

前面提到,经过傅里叶变换图像可以转化到频域内,那么经过傅里叶逆变换,图像肯定能从频域内转化到时域中,所以傅里叶逆变换就是将信号从频域转化到时域的工具。

(2)代码实现

此处的代码接上面的使用 Numpy 进行傅里叶变换

#傅里叶逆变换#Numpy实现ifshift = np.fft.ifftshift(fshift)# 将复数转为浮点数进行傅里叶频谱图显示ifimg = np.log(np.abs(ifshift))if_img = np.fft.ifft2(ifshift)origin_img = np.abs(if_img)imggroup = [img2, magnitude_spectrum0, ifimg, origin_img]titles0 = ['原始图像', '经过移动后的频谱图', '逆变换得到的频谱图', '逆变换得到的原图']for i in range(4):    plt.subplot(2, 2, i + 1)    plt.xticks([])                               #除去刻度线    plt.yticks([])    plt.title(titles0[i])    plt.imshow(imggroup[i], cmap = 'gray')plt.show()

感谢你能够认真阅读完这篇文章,希望小编分享的"如何基于Python实现图像的傅里叶变换"这篇文章对大家有帮助,同时也希望大家多多支持,关注行业资讯频道,更多相关知识等着你来学习!

变换 图像 频谱 频率 信号 代码 就是 信息 原图 时域 概念 篇文章 移动 刻度 正弦 分析 参考 不同 原始 中文字体 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 手磨咖啡 广州为想互联网科技有限公司 互联网科技公司华为 互联网核心科技是什么 丰台科技园 互联网 联恩商钥互联网科技有限公司 互联网科技股午盘股票涨跌 华脉科技工业互联网产品 创业天下互联网科技有限公司 互联网科技创新服务 福建科技产业互联网发展 广西互联网科技孵化中心 洛阳共同富裕互联网科技有限公司 朱啸虎曾投资哪些互联网科技企业 中国互联网有什么科技 江苏互联网智能科技软件 兰石爱特工业互联网科技分公司 保山互联网科技靠谱吗 科技互联网专业工作会议发言稿 互联网科技创业计划的风险分析 互联网巨头科技公司 港股互联网科技股 华宇互联网科技 电子科技大学互联网 顺网科技2021年互联网排名 互联网科技实习生岗位职责 速维有品互联网信息科技(苏州)有限公司 高科技互联网发展前景如何 中国科技和美国互联网 互联网科技职业技能培训学校
0