图像处理学习笔记-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=0∑M−1e−j2πux/My=0∑N−1f(x,y)e−j2πvy/N=x=0∑M−1F(x,v)e−j2πux/M=y=0∑N−1f(x,y)e−j2π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μ=0∑M−1v=0∑N−1F(μ,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=0∑M−1v=0∑N−1F∗(u,v)e−j2π(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=0∑M−1f(x)WMux,u=0,1,⋯,M−1
其中:
W
M
=
e
−
j
2
π
/
M
W_M = e^{-j2\pi/M}
WM=e−j2π/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=0∑2K−1f(x)W2Kux=x=0∑K−1f(2x)W2Ku(2x)+x=0∑K−1f(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=0∑K−1f(2x)WKux+x=0∑K−1f(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=0∑K−1f(2x)WKux,u=0,1,2,⋯,K−1=x=0∑K−1f(2x+1)WKux,u=0,1,⋯,K−1
得到下式:
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(n−1)+2n−1,n≥1a(n)=2a(n−1)+2n,n≥1m(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