图像处理学习笔记-04-频率域滤波04

图像处理领域的计算要求并不是微不足道的,需要一些基本方法简化傅里叶变换的计算,并加快计算速度

二维DFT的可分性

F ( u , v ) = ∑ x = 0 M − 1 e − j 2 π u x / M ∑ y = 0 N − 1 f ( x , y ) e − j 2 π v y / N = ∑ x = 0 M − 1 F ( x , v ) e − j 2 π u x / M F ( x , v ) = ∑ y = 0 N − 1 f ( x , y ) e − j 2 π v y / N \begin{aligned} F(u,v) &= \sum_{x = 0}^{M - 1}e^{-j2\pi u x / M}\sum_{y = 0}^{N - 1}f(x,y)e^{-j2\pi vy / N} \\ &= \sum_{x = 0}^{M - 1}F(x,v)e^{-j2\pi ux/M} \\ F(x,v) &= \sum_{y = 0}^{N - 1}f(x,y)e^{-j2\pi vy/N} \end{aligned} F(u,v)F(x,v)=x=0M1ej2πux/My=0N1f(x,y)ej2πvy/N=x=0M1F(x,v)ej2πux/M=y=0N1f(x,y)ej2πvy/N
过程基本如下:首先对 f ( x , y ) f(x,y) f(x,y)所有行计算一维DFT,然后沿着计算结果的每一列计算一维变换

用DFT算法计算IDFT

二维离散的反傅里叶变换
f ( x , y ) = 1 M N ∑ μ = 0 M − 1 ∑ v = 0 N − 1 F ( μ , v ) e j 2 π ( μ x / M + v y / N ) f(x,y) = \frac{1}{MN}\sum_{\mu = 0}^{M - 1}\sum_{v = 0}^{N - 1}F(\mu,v)e^{j2\pi(\mu x / M + vy / N)} f(x,y)=MN1μ=0M1v=0N1F(μ,v)ej2π(μx/M+vy/N)
取两边的复共轭:
M N f ∗ ( x , y ) = ∑ u = 0 M − 1 ∑ v = 0 N − 1 F ∗ ( u , v ) e − j 2 π ( u x / M + v y / N ) MNf^*(x,y) = \sum_{u = 0}^{M - 1}\sum_{v = 0}^{N - 1}F^*(u,v)e^{-j2\pi(ux/M + vy/N)} MNf(x,y)=u=0M1v=0N1F(u,v)ej2π(ux/M+vy/N)
所以基本过程是计算 F ∗ ( u , v ) F^*(u,v) F(u,v)的二维傅里叶正变换,得到 M N f ∗ ( x , y ) MNf^*(x,y) MNf(x,y),之后取其复共轭并将结果乘以 1 / M N 1/MN 1/MN,就得到了 F ( u , v ) F(u,v) F(u,v)的傅里叶反变换 f ( x , y ) f(x,y) f(x,y)

快速傅里叶变换FFT

快速傅里叶变换将乘法和加法的次数降低到 M N log ⁡ 2 M N MN\log_2MN MNlog2MN,因为二维傅里叶变换可以通过一维变换的方法来执行,所以只需要关注一个变量的FFT:
F ( u ) = ∑ x = 0 M − 1 f ( x ) W M u x , u = 0 , 1 , ⋯   , M − 1 F(u) = \sum_{x = 0}^{M - 1}f(x)W_M^{ux},u = 0,1,\cdots,M - 1 F(u)=x=0M1f(x)WMux,u=0,1,,M1
其中:
W M = e − j 2 π / M W_M = e^{-j2\pi/M} WM=ej2π/M
且假设 M M M有如下形式:
M = 2 n M = 2^n M=2n
M M M也可以表示为:
M = 2 K M = 2K M=2K
式子变为:
F ( u ) = ∑ x = 0 2 K − 1 f ( x ) W 2 K u x = ∑ x = 0 K − 1 f ( 2 x ) W 2 K u ( 2 x ) + ∑ x = 0 K − 1 f ( 2 x + 1 ) W 2 K u ( 2 x + 1 ) F(u) = \sum_{x = 0}^{2K - 1}f(x)W_{2K}^{ux} = \sum_{x = 0}^{K - 1}f(2x)W_{2K}^{u(2x)} + \sum_{x = 0}^{K - 1}f(2x + 1)W_{2K}^{u(2x + 1)} F(u)=x=02K1f(x)W2Kux=x=0K1f(2x)W2Ku(2x)+x=0K1f(2x+1)W2Ku(2x+1)
可以证明 W 2 K 2 u x = W K u x W_{2K}^{2ux} = W_K^{ux} W2K2ux=WKux,所以上式:
F ( u ) = ∑ x = 0 K − 1 f ( 2 x ) W K u x + ∑ x = 0 K − 1 f ( 2 x + 1 ) W K u x W 2 K u F(u) = \sum_{x = 0}^{K - 1}f(2x)W_K^{ux} + \sum_{x = 0}^{K - 1}f(2x + 1)W_K^{ux}W_{2K}^u F(u)=x=0K1f(2x)WKux+x=0K1f(2x+1)WKuxW2Ku
定义:
F e v e n ( u ) = ∑ x = 0 K − 1 f ( 2 x ) W K u x , u = 0 , 1 , 2 , ⋯   , K − 1 F o d d ( u ) = ∑ x = 0 K − 1 f ( 2 x + 1 ) W K u x , u = 0 , 1 , ⋯   , K − 1 \begin{aligned} F_{even}(u) &= \sum_{x = 0}^{K - 1}f(2x)W_K^{ux},u = 0,1,2,\cdots,K-1 \\ F_{odd}(u) &= \sum_{x = 0}^{K - 1}f(2x + 1)W_K^{ux},u = 0,1,\cdots,K - 1 \end{aligned} Feven(u)Fodd(u)=x=0K1f(2x)WKux,u=0,1,2,,K1=x=0K1f(2x+1)WKux,u=0,1,,K1
得到下式:
F ( u ) = F e v e n ( u ) + F o d d ( u ) W 2 K u F(u) = F_{even}(u) + F_{odd}(u)W_{2K}^{u} F(u)=Feven(u)+Fodd(u)W2Ku
W M u + M = W M u , W 2 M u + M = − W 2 M u W_{M}^{u + M} = W_M^u,W_{2M}^{u + M} = -W_{2M}^u WMu+M=WMu,W2Mu+M=W2Mu可得:
F ( u + K ) = F e v e n ( u ) − F o d d ( u ) W 2 K u F(u + K) = F_{even}(u) - F_{odd}(u)W_{2K}^u F(u+K)=Feven(u)Fodd(u)W2Ku
计算过程基本如下:首先完成 K K K个点的计算 F e v e n ( u ) , F o d d ( u ) F_{even}(u),F_{odd}(u) Feven(u),Fodd(u),另外的 K K K个点可以通过 F ( u + K ) F(u + K) F(u+K)直接得到,这个过程可以递归计算,假设 m ( n ) , a ( n ) m(n),a(n) m(n),a(n)分别代表实现算法所要求的复数乘法次数和加法次数,样本数目为 2 n 2^n 2n:
m ( n ) = 2 m ( n − 1 ) + 2 n − 1 , n ≥ 1 a ( n ) = 2 a ( n − 1 ) + 2 n , n ≥ 1 m ( 0 ) = 0 a ( 0 ) = 0 m(n) = 2m(n - 1) + 2^{n - 1} ,n \geq 1\\ a(n) = 2a(n - 1) + 2^n,n\geq 1 \\ m(0) = 0 \\ a(0) = 0 m(n)=2m(n1)+2n1,n1a(n)=2a(n1)+2n,n1m(0)=0a(0)=0
所以:
m ( n ) = 1 2 M log ⁡ 2 M a ( n ) = M log ⁡ 2 M m(n) = \frac{1}{2}M\log_2M \\ a(n) = M\log_2M m(n)=21Mlog2Ma(n)=Mlog2M

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值