图像处理领域的计算要求并不是微不足道的,需要一些基本方法简化傅里叶变换的计算,并加快计算速度
二维DFT的可分性
F(u,v)=M−1∑x=0e−j2πux/MN−1∑y=0f(x,y)e−j2πvy/N=M−1∑x=0F(x,v)e−j2πux/MF(x,v)=N−1∑y=0f(x,y)e−j2πvy/N
过程基本如下:首先对f(x,y)所有行计算一维DFT,然后沿着计算结果的每一列计算一维变换
用DFT算法计算IDFT
二维离散的反傅里叶变换
f(x,y)=1MNM−1∑μ=0N−1∑v=0F(μ,v)ej2π(μx/M+vy/N)
取两边的复共轭:
MNf∗(x,y)=M−1∑u=0N−1∑v=0F∗(u,v)e−j2π(ux/M+vy/N)
所以基本过程是计算F∗(u,v)的二维傅里叶正变换,得到MNf∗(x,y),之后取其复共轭并将结果乘以1/MN,就得到了F(u,v)的傅里叶反变换f(x,y)
快速傅里叶变换FFT
快速傅里叶变换将乘法和加法的次数降低到MNlog2MN,因为二维傅里叶变换可以通过一维变换的方法来执行,所以只需要关注一个变量的FFT:
F(u)=M−1∑x=0f(x)WuxM,u=0,1,⋯,M−1
其中:
WM=e−j2π/M
且假设M有如下形式:
M=2n
M也可以表示为:
M=2K
式子变为:
F(u)=2K−1∑x=0f(x)Wux2K=K−1∑x=0f(2x)Wu(2x)2K+K−1∑x=0f(2x+1)Wu(2x+1)2K
可以证明W2ux2K=WuxK,所以上式:
F(u)=K−1∑x=0f(2x)WuxK+K−1∑x=0f(2x+1)WuxKWu2K
定义:
Feven(u)=K−1∑x=0f(2x)WuxK,u=0,1,2,⋯,K−1Fodd(u)=K−1∑x=0f(2x+1)WuxK,u=0,1,⋯,K−1
得到下式:
F(u)=Feven(u)+Fodd(u)Wu2K
有Wu+MM=WuM,Wu+M2M=−Wu2M可得:
F(u+K)=Feven(u)−Fodd(u)Wu2K
计算过程基本如下:首先完成K个点的计算Feven(u),Fodd(u),另外的K个点可以通过F(u+K)直接得到,这个过程可以递归计算,假设m(n),a(n)分别代表实现算法所要求的复数乘法次数和加法次数,样本数目为2n:
m(n)=2m(n−1)+2n−1,n≥1a(n)=2a(n−1)+2n,n≥1m(0)=0a(0)=0
所以:
m(n)=12Mlog2Ma(n)=Mlog2M
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异