【Opencv】图像傅里叶变换

1.DFT变换的基本原理

求一个简单连续函数的傅里叶变换:
f ( t ) = { A t ∈ [ − w / 2 , w / 2 ] 1 else f(t)= \begin{cases} A& t\in[-w/2, w/2]\\ 1& \text{else} \end{cases} f(t)={ A1t[w/2,w/2]else

F ( u ) = ∫ − w / 2 w / 2 A e − j 2 π u t d t = − A j 2 π u [ e − j 2 π u t ] − w / 2 w / 2 = − A j 2 π u [ e − j π u w − e j π u w ] \begin{align} F(u) =& \int_{-w/2} ^{w/2} Ae^{-j2\pi ut}dt \\ =& \frac{-A}{j2\pi u}[e^{-j2\pi ut}]_{-w/2} ^{w/2} \\ =&\frac{-A}{j2\pi u}[e^{-j\pi uw} - e^{j\pi uw}] \end{align} F(u)===w/2w/2Aej2πutdtj2πuA[ej2πut]w/2w/2j2πuA[euweuw]
又因为: sin ⁡ θ = ( e j θ − e − j θ ) / 2 j \sin \theta = (e^{j \theta} - e^{-j\theta}) /2j sinθ=(ejθejθ)/2j
F ( u ) = A w sin ⁡ ( π u w ) π u w F(u) = Aw\frac{\sin(\pi uw)}{\pi uw} F(u)=Awπuwsin(πuw)
图像为:
在这里插入图片描述
通常,傅里叶变换中包含复数项,为显示变换幅值的一种约定。这个幅值称为傅里叶频谱或频谱:
∣ F ( u ) ∣ = A W sin ⁡ ( π u w ) π u w |F(u)| = AW\frac{\sin(\pi uw)}{\pi u w} F(u)=AWπuwsin(πuw)
通过上图可以发现

  • F ( u ) F(u) F(u) ∣ F ( u ) ∣ |F(u)| F(u)都与盒子函数的宽度W成反比
  • 到原点距离越大,旁瓣的高度岁原点距离的增加而减小
  • 函数想u值得正方向和负方向无限延展

1.1 正变换:

F ( u , v ) = ∑ x = 0 M − 1 ∑ y = 0 N − 1 f ( x , y ) e − j 2 π ( μ x / M + v y / N ) (1.1) F(u,v) = \sum_{x=0}^{M-1}\sum_{y=0}^{N-1}f(x,y)e^{-j2\pi(\mu x/M + vy/N)} \tag{1.1} F(u,v)=x=0M1y=0N1f(x,y)ej2π(μx/M+vy/N)(1.1)

  • N N N 表示图像的行
  • M M M表示图像的列
  • f ( x , y ) f(x,y) f(x,y) 表示像素值

1.2 反变换:

f ( x , y ) = 1 M N ∑ u = 0 M − 1 ∑ v = 0 N − 1 F ( u , v ) e j 2 π ( u x / M + v y / N ) (1.2) f(x,y)=\frac{1}{MN}\sum_{u=0}^{M-1}\sum_{v=0}^{N-1}F(u,v)e^{j2\pi(ux/M+vy/N)} \tag{1.2} f(x,y)=MN1u=0M1v=0N1F(u,v)ej2π(ux/M+vy/N)(1.2)

1.3 欧拉公式:

e j θ = cos ⁡ θ + j sin ⁡ θ (1.3) e^{j\theta} = \cos \theta + j \sin\theta \tag{1.3} ejθ=cosθ+jsinθ(1.3)
利用欧拉公式对傅里叶变换变形,可以的到一个傅里叶变换的复数形式

1.4 频域分析

频域分析就是分析 F ( u , v ) F(u,v) F(u,v) 包括:

  • ∣ F ( u , v ) ∣ |F(u,v)| F(u,v): 幅值
  • e j θ ( u , v ) e^{j\theta(u,v)} ejθ(u,v) : 相角
  • R ( u , v ) R(u,v) R(u,v) : 实部
  • i I ( u , v ) iI(u,v) iI(u,v): 虚部

二维函数的f幅值谱:
∣ F ( u , v ) ∣ = [ R 2 ( u , v ) + I 2 ( u , v ) ] 1 / 2 (1.4) |F(u,v)| = [R^2(u,v) + I^2(u,v)]^{1/2} \tag{1.4} F(u,v)=[R2(u,v)+I2(u,v)]1/2(1.4)
傅里叶谱通过: lg ⁡ ( 1 + ∣ F ( u , v ) ∣ ) \lg(1+|F(u,v)|) lg(1+F(u,v))表示
相位:
φ ( u , v ) = tan ⁡ − 1 [ I ( u , v ) / R ( u , v ) ] (1.5) \varphi(u,v) = \tan^{-1}[I(u,v)/R(u,v)]\tag{1.5} φ(u,v)=tan1[I(u,v)/R(u,v)](1.5)
能量谱:
E ( u , v ) = R 2 ( u , v ) + I 2 ( u , v ) (1.6) E(u,v) = R^2(u, v) + I^2(u,v)\tag{1.6} E(u,v)=R2(u,v)+I2(u,v)(1.6)

1.5 共轭性质

2. OpenCV中实现DFT的函数

  • 当inputArray 为两个通道的形式时,输出也必须为两个通道。通道0表示实部,通道1表示虚部。因此如果为图像(灰度图像),则需要原图构造一个通道1全为0的两个通道的CV_32F2对象。
  • 当inputArray为单个通道的形式是,必须是一个实数组,此时输出也单个通道上ccs格式的复数组,此时可用

猜你喜欢

转载自blog.csdn.net/qq_30340349/article/details/129882753