dft

本文深入探讨了二维傅里叶变换的基本概念及其在图像处理中的应用,包括常见变换对、滤波方法及离散变换的特性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在一维信号处理中,我们利用傅里叶变换实现信号从时域到频域的变换。现在在二维图像信号中,我们学习了空间频率的概念,自然可以想到,可以利用二维傅里叶变换实现空间到空间频率的转换。注意关于频谱中心化可视化在文末有提及到。

 

1. 1D Fourier Transform

回顾一下一维傅里叶变换: \[
\begin {aligned}
X(j \omega) &= \int_{-\infty}^{\infty} x(t) e^{-j \omega t}dt \\
X(t) &= \cfrac {1} {2 \pi} \int_{-\infty}^{\infty} X(j \omega) e^{j \omega x} d\omega
\end {aligned}
\] 在实际计算中,我们一般没有用上面的模拟角频率 \(\omega\) ,单位为 radians/second ,而是用频率 \(f = \omega / 2\pi\) 表示 (单位为 : cycles/seconds),如下图所示,非常完美的对称性,除了符号的不同。 \[
\begin {aligned}
X(f) &= \int_{-\infty}^{\infty} x(t) e^{-j2\pi ft}dt \\
x(t) &= \int_{-\infty}^{\infty} X(f) e^{j 2 \pi ft} df
\end {aligned}
\]

2. 2D Fourier Transform

\[
\begin {aligned}
F(u, v) &= \int_{-\infty}^{\infty} \int_{-\infty}^{\infty} f(x, y) e^{-j2\pi (ux + vy)} dx dy \\
f(x, y) &= \int_{-\infty}^{\infty} \int_{-\infty}^{\infty} F(u, v) e^{j 2 \pi (ux + vy)} du dv
\end {aligned}
\]

这里 \(u, v​\) 均为空间频率 (spatial frequency)

利用 \(\delta(x, y) = \delta(x) \delta(y)\) 以及 \(\delta\) 函数的欧拉公式积分表达 证明:

\[
\begin {aligned}
f(x, y) &= \int_{-\infty}^{\infty} \int_{-\infty}^{\infty} F(u, v) e^{j 2 \pi (ux + vy)} du dv \\
& = \int_{-\infty}^{\infty} \int_{-\infty}^{\infty} \big ( \int_{-\infty}^{\infty} \int_{-\infty}^{\infty} f(m, n) e^{-j2\pi (um + vn)} dm dn \big )e^{j 2 \pi (ux + vy)} du dv \\
&= \int_{-\infty}^{\infty} \int_{-\infty}^{\infty} f(m, n) \big ( \int_{-\infty}^{\infty} \int_{-\infty}^{\infty} e^{j 2 \pi [u(x-m)+v(y-n)]} du dv \big ) dm dn \\
&= \int_{-\infty}^{\infty} \int_{-\infty}^{\infty} f(m, n) \big ( \int_{-\infty}^{\infty} e^{j 2 \pi u(x-m)}du \int_{-\infty}^{\infty} e^{j 2\pi v(y-n)} dv \big ) dm dn \\
&= \int_{-\infty}^{\infty} \int_{-\infty}^{\infty} f(m, n) \delta(x-m) \delta(y-n)dm dn \\
&= \int_{-\infty}^{\infty} \int_{-\infty}^{\infty} f(m, n) \delta(x-m, y-n)dm dn
\end {aligned}
\] 性质:

  1. \(F(u, v)\) 通常为复数,即 \(F(u, v) = F_R(u, v) + j F_I(u, v)\)

     

  2. \(|F(u, v)| = \sqrt {F_R^2(u, v) + F_I^2(u, v)}\) 是幅值频谱 (magnitude spectrum)

  3. \(\arctan(F_I(u, v)/F_R(u, v))\) 是相位频谱 (phase spectrum)

  4. 功率谱 (power spectrum): \(P(u, v) = |F(u, v)|^2 = F_R^2(u, v) + F_I^2(u, v)\)

  5. 共轭 (conjugacy ): \(f^{\ast}(x, y) \Leftrightarrow F(-u, -v)\)
    \(F(u, v) = F^{\ast}(-u, -v)\)

  6. 线性 (linearity) \[
    \alpha f(x, y) + \beta g(x, y) \Leftrightarrow \alpha F(u, v) + \beta G(u, v)
    \]

  7. 伸缩特性 (scaling) \[
    f(ax, by) \Leftrightarrow \cfrac {1}{|ab|} F(\cfrac {u}{a}, \cfrac {v}{b})
    \]

  8. 平移特性 (shift) \[
    f(x-a, y-b) \Leftrightarrow e^{j 2\pi (au + bv)} F(u, v) \\
    f(x, y) e^{j 2 \pi (u_0 x + v_0 y)} \Leftrightarrow F(u-u_0, v- v_0)
    \]

  9. 旋转 (rotation)
    二维傅里叶变换和一维相比,最大的不同就是二维坐标 \((x, y)\) 可以旋转
    利用极坐标系,可以获得一个优良性质: \[
    x = r \cos \theta \qquad y=r \sin \theta \\
    u = w \cos \varphi \qquad v = w \sin \varphi
    \] 则: \(f(r, \theta + \theta_0) \Leftrightarrow F(w, \varphi + \theta_0)\)
    原始二维空间信号绕中心旋转 \(\theta_0\) 角度,则对应傅里叶变换后的空间频率信号绕相同方向旋转 \(\theta_0\) 角度
    证明时只需要注意 积分 \(dxdy = r dr d\theta\)

  10. 微分 (differentiation) \[
    \cfrac {\partial ^n f(x, y)} {\partial x^n} \Leftrightarrow (ju)^n F(u, v) \\
    (jx)^n f(x,y) \Leftrightarrow \cfrac{\partial ^n F(u, v)} {\partial u^n}
    \] 由此到处著名的 拉普拉斯算子 (laplacian) \[
    \nabla^2 f(x, y) = \cfrac {\partial ^2 f(x, y)} {\partial x^2} + \cfrac {\partial ^2 f(x, y)} {\partial y^2}
    \] 则: \(\nabla^2 f(x, y) \Leftrightarrow -(u^2+v^2) F(u, v)\)

2.1 常见的 FT 变换对

  1. rectangle centered at origin with sides of length \(X\) and \(Y\)
    主要利用可分性 \[
    \begin {aligned}
    F(u, v) &= \int_{-\infty}^{\infty} \int_{-\infty}^{\infty} f(x, y) e^{-j2\pi (ux + vy)} dx dy \\
    &= \int_{-X/2}^{X/2} e^{-j2 \pi ux}dx \int_{-Y/2}^{Y/2} e^{-j2 \pi vy}dy \\
    &= \bigg [\cfrac {e^{-j 2\pi ux}} {-j 2 \pi u} \bigg ] ^{X/2}_{-X/2} \bigg [\cfrac {e^{-j 2\pi vy}} {-j 2 \pi v} \bigg ] ^{Y/2}_{-Y/2} \\
    &= \cfrac {1} {-j 2 \pi u} [e^{-j \pi uX} – e^{j \pi uX} ] \cfrac {1} {-j 2 \pi v} [e^{-j \pi vY} – e^{j \pi uY} ] \\
    &= XY \bigg[ \cfrac {sin(\pi Xu)} {\pi Xu} \bigg] \bigg[ \cfrac {sin(\pi Yv)} {\pi Yv} \bigg] \\
    &= XY \hbox{sinc}(\pi Xu) \hbox{sinc}(\pi Yv)
    \end {aligned}
    \] 

  2. Gaussian centered on origin \[
    f(x, y) = \cfrac {1} {2 \pi \sigma^2} e^{- (x^2+y^2)/ 2 \sigma^2}
    \] 可以计算得到傅里叶变换对: \[
    F(u, v) = F(\rho) = e^{-2 \pi^2 \rho^2 \sigma^2}
    \] 这里 \(\rho^2 = u^2 + v^2\)
    高斯函数的一维和二维傅里叶变换仍然是高斯函数
    但我们需要注意尺度的反比关系 (inverse scale relation)。

  3. Circular disk unit height and radius centered on origin \[
    f(x, y) =
    \begin{cases}
    1, & |r| \lt a, \\
    0, & |r| \ge a.
    \end{cases}
    \]
    \[
    F(u ,v) = F(\rho) = a J_1(\pi a \rho)/ \rho
    \]
    这里 \(J_1(x)\) 是 Bessel function

  4. \(\delta(x, y)\) 函数 \[
    f(x, y) = \delta(x, y) = \delta(x) \delta(y) \\
    F(u, v) = \int_{-\infty}^{\infty} \int_{-\infty}^{\infty} \delta(x, y) e^{-j2\pi (ux + vy)} dx dy =1
    \] 如果: \(f(x, y) = \frac {1}{2} (\delta(x, y-a) + \delta(x , y +a))\)
    则: \[
    \begin {aligned}
    F(u, v) &=\cfrac {1}{2} \int_{-\infty}^{\infty} \int_{-\infty}^{\infty} (\delta(x, y-a) + \delta(x , y +a))e^{-j2\pi (ux + vy)} dx dy \\
    &= \cfrac {1}{2} (e^{-j 2\pi av} + e^{j 2\pi av}) = \cos 2\pi av
    \end {aligned}
    \] 

2.3 二维傅里叶变换用于滤波的例子

基本流程如下图所示:

和传统的数字信号处理非常类似。

上图展示了

  • 低通滤波,图片模糊 (blur),空间频域只剩下低频成分;
  • 高通滤波,图片边缘 (edge),空间频域将低频成分消除。

下面这幅图非常重要,展示了图像处理中常见的 5 种滤波方法: mean filter, gaussian filter, laplacian filter, soble filter, scharr filter 的频域分布:

下面是经验结论:

Image with periodic structure, FT has peaks at spatial frequencies of repeated texture.

应用上面的结论,我们可以用于消除背景的 periodic structure

  1. Forensic application

     

  2. Lunar image

3. 2D Discrete Fourier Transform

对于大小为 \(M \times N\) 的2D DFT,如下: \[
\begin {aligned}
F[k, l] &= \cfrac {1}{MN} \sum_{m =0}^{M-1} \sum_{n=0}^{N-1} f[m, n] e^{-j 2 \pi ( {k \over M} m + {l \over N}n ) } \\
f[m, n] &= \sum_{k =0}^{M-1} \sum_{l=0}^{N-1} F[k, l] e^{-j 2 \pi ( {m \over M} k + {n \over N}l ) }
\end {aligned}
\] (Note: spatial coordinates = \(k,l​\), frequency coordinates: \(u,v​\))

3.1 性质

FT 的性质,DFT 基本都有,这里介绍几个重要的性质:

  1. 周期性,一个 \(M \times N\) 矩阵的 2D DFT 的周期性为 \([M, N]\) \[
    \begin {aligned}
    F[k+M, l+N] &= \cfrac {1}{MN} \sum_{m =0}^{M-1} \sum_{n=0}^{N-1} f[m, n] e^{-j 2 \pi ( {k+M \over M} m + {l+N \over N}n ) } \\
    &= \cfrac {1}{MN} \sum_{m =0}^{M-1} \sum_{n=0}^{N-1} f[m, n] e^{-j 2 \pi ( {k \over M} m + {l \over N}n ) } e^{-j 2 \pi ( {M \over M} m + {N \over N}n ) } \\
    &= F[k, l]
    \end {aligned}
    \]

     

  2. 可分性 (separability) \[
    \begin {aligned}
    F[k, l] &= \cfrac {1}{MN} \sum_{m =0}^{M-1} \sum_{n=0}^{N-1} f[m, n] e^{-j 2 \pi ( {km \over M} + {ln \over N} ) } \\
    &= \cfrac {1}{N} \sum_{n=0}^{N-1} e^{-j 2\pi {ln \over N}} \Big [\sum_{m =0}^{M-1} \cfrac {1}{M} f[m, n] e^{-j 2 \pi {km \over M}} \Big ] \\
    \end {aligned}
    \] 定义: \[
    w_M[m, k] \triangleq \cfrac {1}{M}e^{-j 2 \pi {mk \over M}}; \quad w_N[n, l] \triangleq \cfrac {1}{N}e^{-j 2 \pi {nl \over N}}
    \] 进一步定义: \[
    F'[k, n] \triangleq \sum_{m =0}^{M-1} f[m, n] w_M[m, k] \quad (k=0, 1, \ldots, M-1)
    \] 则上面的 2D 转换为: \[
    F[k, l] = \sum_{n =0}^{N-1} F'[k, n] w_N[n,l], \quad (l=0, 1, \ldots, N-1)
    \] 解释上面的步骤:

    1. column transform
      考虑表达式 \(F'[k, n]\) ,我们将列索引 \(n\) 是为参数,那么这个表达式其实是在对列向量进行 1D DFT 计算 \[
      \begin {bmatrix}
      F'[0, n] \\
      \vdots \\
      F'[M-1, n]
      \end {bmatrix}_{M \times 1} =
      \begin {bmatrix}
      \cdots & \cdots & \cdots \\
      \cdots & w_M[m, k] & \cdots \\
      \cdots & \cdots & \cdots
      \end {bmatrix}_{M \times M}
      \begin {bmatrix}
      f[0, n] \\
      \vdots \\
      f[M-1, n]
      \end {bmatrix}_{M \times 1}
      \] 更简洁些: \(\mathbf {F}'\) 的第 \(n\) 列向量是 \(\mathbf {f}\) 的第 \(n\) 列向量进行 1D DFT 计算的结果,即: \[
      \mathbf {F}'_n = \mathbf {W}_M \mathbf {f}_n, \quad (n =0, \cdots, N-1)
      \] 将所有 \(N\) 列合并起来: \[
      \begin {bmatrix} \mathbf {F}'_0 & \cdots & \mathbf {F}'_{N-1} \end {bmatrix} = \mathbf {W}_M \begin {bmatrix} \mathbf {f}_0 & \cdots & \mathbf {f}_{N-1} \end {bmatrix}
      \] 即:
      \[
      \mathbf {F}' = \mathbf {W}_M \mathbf {f}
      \]

       

    2. row transform
      和上面类似,我们按行划分计算 \[
      \begin {bmatrix}
      F[k, 0] & \cdots & F[k, N-1]
      \end {bmatrix} =
      \begin {bmatrix}
      F'[k, 0] & \cdots & F'[k, N-1]
      \end {bmatrix}
      \begin {bmatrix}
      \cdots & \cdots & \cdots \\
      \cdots & w_N[n, l] & \cdots \\
      \cdots & \cdots & \cdots
      \end {bmatrix}
      \] \(\mathbf {F}\) 的第 \(k\) 行向量是 \(\mathbf {F}'\) 的第 \(k\) 行向量进行 \(N\) 点 DFT 运算得到的

    如果我们直接计算 \(M \times N\) 像素点的图片的 DFT,时间复杂度为 \(\mathcal {O}(M^2N^2)\), 现在只需要 \(N\) 次 \(M\) 点DFT,以及 \(M\) 次 \(N\) 点 DFT 就可以, 复杂度为 \(\mathcal {O}(NM^2 + MN^2)\)

3.3 频谱中心化 (spectrum centralization)

在 数字信号处理中聊过 DFT的频谱搬移问题 ,这里同样存在这个问题

DC 分量位于 \(F[0, 0]\) (左上角),最高频分量位于 \(F[M/2, N/2]\) (位于中心)。也就是说: 高频分量在中心,低频分量在四个角落。

这并不符合我们的认知习惯。因为我们喜欢把中心原点放在图片的中心,而不是左上角。我们通常会将频谱中心化,将频谱垂直移动 \(M/2\) ,水平移动 \(N/2\) 。

和 1D DFT 类似,利用 2D DFT 的平移特性 (上面有提到过) \[
x[m, n] e^{j 2\pi (mM/2M + nN/2N) } \Leftrightarrow X[k-M/2, l – N/2]
\] 即: \[
x[m, n] (-1)^{m+n} \Leftrightarrow X[k-M/2, l – N/2]
\] 如下面所示: \[
\begin {bmatrix}
x[0,0] & -x[0,1] & x[0,2] & \cdots \\
-x[1,0] &x[1,1] & -x[1,2] & \cdots \\
x[2,0] & -x[2,1] & x[2,2] & \cdots \\
\cdots & \cdots & \cdots & \cdots
\end {bmatrix}
\] 

3.4 频谱可视化

前面放了很多张图的例子,是不是觉得频谱图片很好看 ?

但是如果你现在调用 OpenCV 中的 fft 函数,并且将幅频图中心化,可能得到的效果并没有我们显示的那么好。

一个重要原因就是我们并没有考虑 幅频值的范围, 或者说低频对应的值可能是高频对应的值的 1000 倍,如果在非常大的范围内显示幅频图,那么由于低频强度太高,会导致大部分区域是黑色的 (相比之下,值接近 0)

我们通常会对数化处理,即: \[
F'[k ,l] = \log (1 + F[k, l])
\] 此时效果就很棒了。

如下图所示,效果对比非常鲜明:

05-13
### 关于离散傅里叶变换(DFT) 离散傅里叶变换是一种用于分析信号频谱特性的工具,在工程学和计算机科学领域具有广泛应用。它能够将时间域上的连续信号转换为频率域表示形式,从而便于进一步处理和分析。 #### DFT 的基本理论 离散傅里叶变换的概念最早可以追溯到法国数学家约瑟夫·傅里叶的工作,他的研究成果如今已成为现代工程技术中的基础语言之一[^3]。具体而言,DFT 将有限长度的序列 \(x[n]\) 转换为其对应的频域表示 \(X[k]\),其定义如下: \[ X[k] = \sum_{n=0}^{N-1} x[n] e^{-j 2 \pi k n / N} \] 其中 \(k\) 表示第 \(k\) 个频率分量,\(N\) 是输入序列的总长度。 #### 编程实现方式 在编程环境中,Python 提供了强大的库来支持快速傅里叶变换(FFT),这是 DFT 的一种高效算法实现。SciPy 库中的 `scipy.fft` 模块提供了全面的功能集,超越了 NumPy 中的基础 FFT 实现[^4]。下面是一个简单的 Python 示例代码展示如何计算并绘制一个信号的 DFT 结果: ```python import numpy as np import matplotlib.pyplot as plt from scipy.fft import fft, fftfreq # 定义采样参数 sample_rate = 1000 # Hz duration = 1 # 秒 t = np.linspace(0, duration, int(sample_rate * duration), endpoint=False) # 创建测试信号 frequency = 5 # 频率成分 signal = np.sin(2 * np.pi * frequency * t) # 计算DFT yf = fft(signal) xf = fftfreq(len(t), 1/sample_rate)[:len(t)//2] # 绘制结果 plt.plot(xf, 2.0/len(t) * np.abs(yf[:len(t)//2])) plt.title('Magnitude Spectrum') plt.xlabel('Frequency [Hz]') plt.ylabel('|Amplitude|') plt.grid() plt.show() ``` 此代码片段展示了如何通过 SciPy 和 Matplotlib 来完成对正弦波形的频谱分析,并可视化其幅度响应。 #### 卷积定理的应用 卷积定理指出两个函数的卷积等于它们各自傅里叶变换乘积后再逆变换的结果。这一性质使得利用 FFT 进行大尺寸数据的卷积运算变得非常有效[^5]。例如,对于两组多项式的系数向量 \(\alpha_j\) 和 \(\beta_j\) ,可以通过先分别求取各自的 FFT 值相乘再做 IFFT 得到最后结果。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值