二维傅里叶变换的矩阵表示

二维傅里叶变换的矩阵表示

      • 二维傅里叶变换公式
      • 二维傅里叶矩阵公式表达
        • 1. F ( v , u ) F(v,u) F(v,u) R 1 × 1 R^{1\times1} R1×1
        • 2. F ( v , u ) F(v,u) F(v,u) R N v × M u R^{N_v\times M_u} RNv×Mu

说明: 做完了图像处理的实验报告,老师要求自己编二维傅里叶变换的算法,故不能用 Matlab 内置的 fft2 函数。循环求解会消耗大量的时间,考虑到 Matlab 的优势就在于矩阵运算,故有如下思考。
(如有笔误,欢迎指正;转载请通知作者并注明来源,谢谢亲噢~)

二维傅里叶变换公式

离散时间变量二维傅里叶变换(DFT)的原始公式为:
F ( u , v ) = ∑ x = 0 M − 1 ∑ y = 0 N − 1 f ( x , y ) e − j 2 π ( x M u + y N v ) F(u,v) = \sum_{x=0}^{M-1}\sum_{y=0}^{N-1}f(x,y)e^{-j2\pi(\frac{x}{M}u+\frac{y}{N}v)} F(u,v)=x=0M1y=0N1f(x,y)ej2π(Mxu+Nyv)
傅里叶变换具有可分性,所以我们有
F ( u , v ) = ∑ y = 0 N − 1 e − j 2 π y N v ∑ x = 0 M − 1 f ( x , y ) e − j 2 π x M u F(u,v) = \sum_{y=0}^{N-1}e^{-j2\pi\frac{y}{N}v}\sum_{x=0}^{M-1}f(x,y)e^{-j2\pi\frac{x}{M}u} F(u,v)=y=0N1ej2πNyvx=0M1f(x,y)ej2πMxu

二维傅里叶矩阵公式表达

我们可以将该式转换为矩阵表达的形式,这样可以方便我们进行代码编程(特别是 Matlab 编程)
由于 Matlab 显示图像的方式为:竖直向下为y轴正方向,而 f ( x , y ) f(x,y) f(x,y) 当中 x x x 的取值是对纵坐标进行检索,表示行的行数----这与我们潜意识认为的横轴,即水平方向为 x x x 轴方向的惯性思维不一致,故我做出如下改动
F ( v , u ) = ∑ y = 0 N − 1 e − j 2 π y N v ∑ x = 0 M − 1 f ( y , x ) e − j 2 π x M u F(v,u) = \sum_{y=0}^{N-1}e^{-j2\pi\frac{y}{N}v}\sum_{x=0}^{M-1}f(y,x)e^{-j2\pi\frac{x}{M}u} F(v,u)=y=0N1ej2πNyvx=0M1f(y,x)ej2πMxu
即简单的调换一下变元的表达方式,本质计算上没有改变。

1. F ( v , u ) F(v,u) F(v,u) R 1 × 1 R^{1\times1} R1×1

假设当 F ( v , u ) F(v,u) F(v,u) R 1 × 1 R^{1\times1} R1×1 时,有如下推导
F ( v , u ) = ∑ y = 0 N − 1 e − j 2 π y N v [ f ( y , 0 ) f ( y , 1 ) … f ( y , M − 1 ) ] ⋅ [ 1 e − j 2 π 1 M u e − j 2 π 2 M u ⋮ e − j 2 π M − 1 M u ] F(v,u) =\sum_{y=0}^{N-1}e^{-j2\pi\frac{y}{N}v}\begin{bmatrix}f(y,0)&f(y,1)&\dots&f(y,M-1)\end{bmatrix} ·\begin{bmatrix}1\\e^{-j2\pi\frac{1}{M}u}\\e^{-j2\pi\frac{2}{M}u}\\\vdots\\e^{-j2\pi\frac{M-1}{M}u}\end{bmatrix} F(v,u)=y=0N1ej2πNyv[f(y,0)f(y,1)f(y,M1)]1ej2πM1uej2πM2uej2πMM1u
其中
[ f ( y , 0 ) f ( y , 1 ) … f ( y , M − 1 ) ] ⋅ [ 1 e − j 2 π 1 M u e − j 2 π 2 M u ⋮ e − j 2 π M − 1 M u ] = R 1 × M ⋅ R M × 1 = R 1 × 1 \begin{bmatrix}f(y,0)&f(y,1)&\dots&f(y,M-1)\end{bmatrix} ·\begin{bmatrix}1\\e^{-j2\pi\frac{1}{M}u}\\e^{-j2\pi\frac{2}{M}u}\\\vdots\\e^{-j2\pi\frac{M-1}{M}u}\end{bmatrix}=R^{1\times M}·R^{M\times 1}=R^{1\times1 } [f(y,0)f(y,1)f(y,M1)]1ej2πM1uej2πM2uej2πMM1u=R1×MRM×1=R1×1
故我们可以知道
f ( y , x ) ⋅ [ 1 e − j 2 π 1 M u e − j 2 π 2 M u ⋮ e − j 2 π M − 1 M u ] = R N y × M x ⋅ R M x × 1 = R N y × 1 f (y,x)·\begin{bmatrix}1\\e^{-j2\pi\frac{1}{M}u}\\e^{-j2\pi\frac{2}{M}u}\\\vdots\\e^{-j2\pi\frac{M-1}{M}u}\end{bmatrix}=R^{N_y\times M_x}·R^{M_x\times 1}=R^{N_y\times1 } f(y,x)1ej2πM1uej2πM2uej2πMM1u=RNy×MxRMx×1=RNy×1
所以,后续可推导为
∑ y = 0 N − 1 e − j 2 π y N v = R 1 × N y \sum_{y=0}^{N-1}e^{-j2\pi\frac{y}{N}v}=R^{1\times N_y} y=0N1ej2πNyv=R1×Ny
即可完成当 F ( u , v ) F(u,v) F(u,v) R 1 × 1 R^{1\times1} R1×1 时的累加

2. F ( v , u ) F(v,u) F(v,u) R N v × M u R^{N_v\times M_u} RNv×Mu

我们此时可以直接通过矩阵乘法的维度准则来推导,这里采取的是逆向思维
R N v × M u = R N v × ? 1 ⋅ R N y × M x ⋅ R ? 2 × M u R^{N_v\times M_u}=R^{N_v\times ?1}·R^{N_y\times M_x}·R^{?2\times M_u} RNv×Mu=RNv×?1RNy×MxR?2×Mu
很明显 ? 1 = N y ?1=N_y ?1=Ny ? 2 = M x ?2=M_x ?2=Mx
分别将
R N v × N y = [ 1 1 1 … 1 1 e − j 2 π 1 N 1 e − j 2 π 2 N 1 … e − j 2 π N − 1 N 1 1 e − j 2 π 1 N 2 e − j 2 π 2 N 2 … e − j 2 π N − 1 N 2 ⋮ ⋮ ⋮ e − j 2 π y N v ⋮ 1 e − j 2 π 1 N ( N − 1 ) e − j 2 π 2 N ( N − 1 ) … e − j 2 π N − 1 N ( N − 1 ) ] R^{N_v\times N_y}=\begin{bmatrix} 1&1&1&\dots&1\\ 1&e^{-j2\pi\frac{1}{N}1}&e^{-j2\pi\frac{2}{N}1}&\dots&e^{-j2\pi\frac{N-1}{N}1}\\ 1&e^{-j2\pi\frac{1}{N}2}&e^{-j2\pi\frac{2}{N}2}&\dots&e^{-j2\pi\frac{N-1}{N}2}\\ \vdots&\vdots&\vdots&e^{-j2\pi\frac{y}{N}v}&\vdots\\ 1&e^{-j2\pi\frac{1}{N}(N-1)}&e^{-j2\pi\frac{2}{N}(N-1)}&\dots&e^{-j2\pi\frac{N-1}{N}(N-1)} \end{bmatrix} RNv×Ny=11111ej2πN11ej2πN12ej2πN1(N1)1ej2πN21ej2πN22ej2πN2(N1)ej2πNyv1ej2πNN11ej2πNN12ej2πNN1(N1)
R M x × M u = [ 1 1 1 … 1 1 e − j 2 π 1 M 1 e − j 2 π 1 M 2 … e − j 2 π 1 M ( M − 1 ) 1 e − j 2 π 2 M 1 e − j 2 π 2 M 2 … e − j 2 π 2 M ( M − 1 ) ⋮ ⋮ ⋮ e − j 2 π x M u ⋮ 1 e − j 2 π M − 1 M 1 e − j 2 π M − 1 M 2 … e − j 2 π M − 1 M ( M − 1 ) ] R^{M_x\times M_u}=\begin{bmatrix} 1&1&1&\dots&1\\ 1&e^{-j2\pi\frac{1}{M}1}&e^{-j2\pi\frac{1}{M}2}&\dots&e^{-j2\pi\frac{1}{M}(M-1)}\\ 1&e^{-j2\pi\frac{2}{M}1}&e^{-j2\pi\frac{2}{M}2}&\dots&e^{-j2\pi\frac{2}{M}(M-1)}\\ \vdots&\vdots&\vdots&e^{-j2\pi\frac{x}{M}u}&\vdots\\ 1&e^{-j2\pi\frac{M-1}{M}1}&e^{-j2\pi\frac{M-1}{M}2}&\dots&e^{-j2\pi\frac{M-1}{M}(M-1)} \end{bmatrix} RMx×Mu=11111ej2πM11ej2πM21ej2πMM111ej2πM12ej2πM22ej2πMM12ej2πMxu1ej2πM1(M1)ej2πM2(M1)ej2πMM1(M1)
然后通过 Matlab 特有的矩阵乘法进行编程即可。

你可能感兴趣的:(图像处理[笔记])