Python实现FFT及IFFT

article/2025/8/28 1:15:26

运行环境及编译工具

  • Windows
  • VS Code

编程语言及库版本

版本
Python3.7.0
copy
numpy1.19.2
opencv3.4.2
PIL8.1.0
matplotlib3.4.3

可执行文件

  • HW_2.py
  • HW_2.ipynb
  • 在HW_2.ipynb中执行,详细程序信息在HW_2.py中

问题 1 通过计算一维傅里叶变换实现图像二维快速傅里叶变换(10 分)

实现一个函数 F=dft2D(f), 其中 f 是一个灰度源图像,F 是其对应的二维快速傅里叶变换 (FFT)图像. 具体实现要求按照课上的介绍通过两轮一维傅里叶变换实现。也就是首先计算 源图像每一行的一维傅里叶变换,然后对于得到的结果计算其每一列的一维傅里叶变换。 如果实现采用 MATLAB, 可以直接调用函数 fft 计算一维傅里叶变换。如果采用其他语言, 请选择并直接调用相应的一维傅里叶变换函数。

基本思路

FFT与IFFT算法主要是利用了函数“值表示”的思想和傅里叶正交的性质,依靠递归的方法可以大大缩减程序量。一维变换的编程基本思路如下图所示,对二维图像来说,先进行每行的变换,再在行变换的基础上进行列变换。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9P2jH7X7-1642676557251)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20211026225526745.png)]

如何运行

问题一包含两个函数,均在HW_2.py文件中,在HW_2.ipynb中调试执行

from HW_2 import *
# 递归实现一维fft算法
oned_fft(arr):
# 对图像的fft
dft2D(f):

问题2 图像二维快速傅里叶逆变换 (10 分)

实现一个函数 f=idft2D(F), 其中 F 是一个灰度图像的傅里叶变换,f 是其对应的二维快速傅 里叶逆变换 (IFFT)图像,也就是灰度源图像. 具体实现要求按照课上的介绍通过类似正向变 换的方式实现。

基本思路

基本思路与上相同,需要注意的是最后得到的结果需除去图像尺寸 M × N M\times N M×N

如何运行

from HW_2 import *
# 递归实现一维fft算法
oned_ifft(arr):
# 对图像的fft
idft2D(f):

问题3 测试图像二维快速傅里叶变换与逆变换 (8 分)

对于给定的输入图像 rose512.tif, 首先将其灰度范围通过归一化调整到[0,1]. 将此归一化的 图像记为 f. 首先调用问题 1 下实现的函数 dft2D 计算其傅里叶变换,记为 F。然后调用问题 2 下的函数 idft2D 计算 F 的傅里叶逆变换,记为 g. 计算并显示误差图像 d = f-g.

基本思路

基本思路为:读图f - 归一化f - FFT变换F - IFFT变换g - 误差图像d

如何运行

from HW_2 import *
Q_3()

运行结果

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qhtUx82f-1642676510871)(F:\研究生课程\图像处理\作业\第二次作业\作业02_梁奥\Q_4.png)]

问题4 计算图像的中心化二维快速傅里叶变换与谱图像 (12 分)

我们的目标是复现下图中的结果。首先合成矩形物体图像,建议图像尺寸为 512×512,矩形位于图像中心,建议尺寸为 60 像素长,10 像素宽,灰度假设已归一化设为 1. 对于输入图像 f 计算其中心化二维傅里叶变换 F。然后计算对应的谱图像 S=log(1+abs(F)). 显示该谱图像。

基本思路

  • 创建空白图像f,像素值均为0
  • 将空白图像中心 10 × 60 10\times 60 10×60区域的像素值置为1
  • 中心化f,得到f_shift: f _ s h i f t ( x , y ) = ( − 1 ) x + y f ( x , y ) f\_shift(x,y)=(-1)^{x+y}f(x,y) f_shift(x,y)=(1)x+yf(x,y)
  • 分别对f,和f_shift进行fft变换得到F,和F_shift
  • 对F_shift计算谱图像

如何运行

from HW_2 import *
Q_4()

运行结果

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qhtUx82f-1642676510871)(F:\研究生课程\图像处理\作业\第二次作业\作业02_梁奥\Q_4.png)]

选做题 测试更多图像的二维快速傅里叶变换 (10 分)

计算其他 5 幅图像的二维快速傅里叶变换: house.tif, house02.tif, lena_gray_512.tif, lunar_surface.tif, characters_test_pattern.tif。注意,有些图像的尺寸不是 2 的整数次幂,需要 进行相应的像素填补处理。如果图像有多个通道可以选择其中的一个通道进行计算。

基本思路

  • 判断图像尺寸是否为二次幂,并返回最近的二次幂值
  • 以上述返回的二次幂值为尺寸创建zero图像,并原图大小的范围内用原图像素填充
  • 对每张图像进行Q3的操作

如何运行

from HW_2 import *
Q_5("./house.tif")
Q_5("./house02.tif")
Q_5("./lena_gray_512.tif")
Q_5("./lunar_surface.tif")
Q_5("./characters_test_pattern.tif")

运行结果

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-raLAVlsb-1642676510878)(F:\研究生课程\图像处理\作业\第二次作业\作业02_梁奥\Q_5_house.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-T6U5OuBT-1642676510879)(F:\研究生课程\图像处理\作业\第二次作业\作业02_梁奥\Q_5_house02.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-pl4mGZCM-1642676510881)(F:\研究生课程\图像处理\作业\第二次作业\作业02_梁奥\Q_5_lena_gray_512.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6T7tGhFu-1642676510882)(F:\研究生课程\图像处理\作业\第二次作业\作业02_梁奥\Q_5_lunar_surface.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9PaTMuLB-1642676510885)(F:\研究生课程\图像处理\作业\第二次作业\作业02_梁奥\Q_5_characters_test_pattern.png)]6510879)]


http://chatgpt.dhexx.cn/article/cCwrqmVW.shtml

相关文章

matlab FFT 和IFFT

代码: fs100;N128; n0:N-1;tn/fs; xsin(2*pi*40*t)sin(2*pi*15*t); subplot(221);plot(n,x,b); xlabel(时间/s);ylabel(x);title(原始信号); grid on;yfft(x,N); magabs(y); fn*fs/N; subplot(222);plot(f(1:N/2),mag(1:N/2)*2/N,b); xlabel(频率/Hz);ylabel(振幅)…

基于vivado实现FFT/IFFT

文章目录 前言一、基本过程二、vivado配置1.新建工程2.调用DDS的IP核2.调用FFT的IP核 三、编写Verilog程序1.顶层文件fft.v2.仿真文件fft_tb.v 四、运行仿真1. 运行仿真设置2. 仿真波形设置3. 结果分析 前言 使用vivado2018.3实现FFT/IFFT,过程比较详细…

python fft ifft

文章目录 条件代码实例 条件 任何一个满足狄利克雷条件的函数都可以通过傅里叶基数展开。 numpy和scipy中都有fft变换,且效果都是一样的。 代码 import numpy as np from scipy.fftpack import fft,ifft import matplotlib.pyplot as plt from matplotlib.pylab …

FFT专题:IFFT后信号如何重建

ifft(outFFTData, g_fft_temp, inFFTData, g_twiddle_ifft, twiddle_stride, F_WLEN);//思考ifft输出的复数结果怎么给到硬件输出 之前一直关注FFT后信号奔赴到频域处理,那么频域处理完后,怎么重建信号呢? 给出一段FFT和IFFT函数源码 int nFrameRunCount 0;#pragma section…

数字信号处理基础(二):FFT和IFFT的使用以及详细分析代码书写思路

目录 1. fft和ifft的原理1.1 fft1.2 ifft 2. 书写代码思路3. 完整代码4. 结果图 1. fft和ifft的原理 1.1 fft fft是快速傅里叶变换,是MATLAB中计算信号频谱的函数,使用方法是fft(x),直接对信号x进行fft计算。 由于fft函数计算信号的频谱是0…

信号处理中的反傅里叶变换(IFFT)原理

信号处理中,经常需要将信号转换到频域进行分析,有时候还会从频域转回时域,用到FFT和IFFT函数。 FFT变换是将信号从时域转换到频域,在时域看起来复杂的信号转换到频域看起来就方便容易了很多。但有时候也需要将频域信号转换到时域…

adb下载、安装、环境配置

一:adb安装 adb下载链接:https://pan.baidu.com/s/1Vd6KyZ6vT2Qtmhazwre4OQ 提取码:3dx1 安装: 1.双击adb.exe文件,并运行。 2.添加环境变量: 右击计算机–属性—高级系统设置—高级—环境变量—新建&…

windows下载安装adb(极其简单)

单独安装adb,不安装sdk 下载adb Google很好的心,直接放出ADB的档案供人下载。下档路径如下: Windows版本:https://dl.google.com/android/repository/platform-tools-latest-windows.zip Mac版本:https://dl.google…

ADB-adb命令安装app

下载adb 安装adb 将名称中含有adb的文件,和fastboot.exe复制到 c:/windows/system32目录将名称中含有adb的所有文件复制到 c:/windows/system目录将adb.exe和AdbWinApi.dll复制到c:/windows/SysWoW64目录 有线安装apk 连接上数据线,然后把手机开发者模…

adb详细教程(一)-下载安装与环境变量配置

对于Android开发来说,adb是再熟悉不过的调试工具 但其实对于移动端的测试来说,adb也是一个十分重要的、能够提高测试工作效率的工具。 文章目录 一、介绍二、下载地址三、安装四、配置环境变量 一、介绍 全称 adb全称全称为Android Debug Bridge&#x…

mac下载安装adb环境

目录 方法一1、下载安装包2、下载完成后进行解压,目录路径注意不得包含中文3、配置环境变量4、验证安装是否成功 方法二1、安装homebrew2、安装adb3、运行adb 方法一 1、下载安装包 安装包下载地址 :https://developer.android.com/studio/releases/pl…

adb工具下载安装

一、adb环境配置 adb即Android Debug Bridge,就是可以通过窗口命令,使在pc端可以调试安卓移动端的一个工具包 我这里是默认电脑已经安装SDK的,如果没有也没关系,直接网上下载一个adb工具包一样的https://developer.android.goo…

adb环境配置

adb环境配置 1.下载工具包 工具包:platform-tools_r30.0.4-windows.zip 获取途径1:链接: https://pan.baidu.com/s/17BiARFlgsQa2wDETmoJIvQ?pwddsd2 提取码: dsd2 获取途径2:https://developer.android.google.cn/studio/releases/plat…

android adb驱动官方下载,adb驱动下载

这里给你简单的介绍一下adb驱动:adb驱动就是电脑与android设备的通信的客户端驱动程序。使用它可以直接操作管理android模拟器或者真实的andriod设备。 adb驱动百科介绍: Android设备(如手机)连接PC时所需要的驱动程序,一般Android设备连接WinXP是无需安装驱动的。 adb的全称…

windows ——adb下载与安装

一、adb下载 链接:https://pan.baidu.com/s/1D3eOkHsuAnZd6WoFEVC7xQ 提取码:sc94 二、adb安装 双击 adb-setup-1.3.exe 安装 可以查看此安装教程[转载]:http://m.mz6.net/detail/4506-13.html 三、adb安装成功验证 键盘快捷键:Wi…

adb下载安装教程(已安装Android studio)

adb下载安装教程(已安装Android studio) ①找到adb.exe的绝对路径如下: ②将绝对路径放入环境变量path中(绝对路径不带入adb.exe) 右击“此电脑”>“属性”>”高级系统设置“>”环境变量“>”path“ 双…

ADB下载及常用命令

ADB,即 Android Debug Bridge,它是 Android 开发/测试人员不可替代的强大工具 文章目录 预先准备adb的平台工具软件包下载配置环境变量 连接设备确认连接状态\查询已连设备USB 连接无线连接(Android11 及以上) 应用管理查看应用列…

ADB 下载地址

adbshell 点击ADBkit下载

mac os adb下载

一 adb安装: 打开终端,输入命令 1.安装homebrew: 方式一:ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)" 方式二:/bin/zsh -c "$(curl -fsSL https:/…

小知识·adb安装和使用方法

目录 一、adb是什么? 二、adb有什么作用 三、如何启用adb调试 四 如何判断设备连接正常 五 如何下载安装adb 1、adb下载地址: 2、按装步骤 六、adb命令大全 1.查看设备 2.Adb应用管理 3.安装APK 4.卸载APK 5.查看设备信息 5.使用 Monkey 进…