精华内容
下载资源
问答
  • 一维连续傅里叶变换和逆变换公式的一种推导
    千次阅读
    2020-10-24 00:11:36

    条件确立

      首先,若函数 f ( t ) f\left( t \right) f(t) 2 T 2T 2T为周期且在 [ − T , T ] \left[ -T,T \right] [T,T]上可积,则
    a n = 1 T ∫ − T T f ( t ) cos ⁡ n π t T d t ,   n = 0 , 1 , ⋯ b n = 1 T ∫ − T T f ( t ) sin ⁡ n π t T d t ,   n = 1 , 2 , ⋯ \begin{aligned} & {{a}_{n}}=\frac{1}{T}\int_{-T}^{T}{f\left( t \right)\cos \frac{n\pi t}{T}dt},\text{ }n=0,1,\cdots \\ & {{b}_{n}}=\frac{1}{T}\int_{-T}^{T}{f\left( t \right)\sin \frac{n\pi t}{T}dt},\text{ }n=1,2,\cdots \\ \end{aligned} an=T1TTf(t)cosTnπtdt, n=0,1,bn=T1TTf(t)sinTnπtdt, n=1,2,
    存在,是 f ( t ) f\left( t \right) f(t)关于三角函数系的Fourier系数,
    f ∼ a 0 2 + ∑ n = 1 ∞ ( a n cos ⁡ n π t T + b n sin ⁡ n π t T ) f \sim \frac{{{a}_{0}}}{2}+\sum\limits_{n=1}^{\infty }{\left( {{a}_{n}}\cos \frac{n\pi t}{T}+{{b}_{n}}\sin \frac{n\pi t}{T} \right)} f2a0+n=1(ancosTnπt+bnsinTnπt)
    f ( t ) f\left( t \right) f(t)关于三角函数系的Fourier级数。


      其次,由Fourier级数的收敛定理,若 2 T 2T 2T为周期的函数 f ( t ) f\left( t \right) f(t) [ − T , T ] \left[ -T,T \right] [T,T]上按段光滑(① f ( t ) f\left( t \right) f(t) [ − T , T ] \left[ -T,T \right] [T,T]上至多有有限个第一类间断点;② f ′ ( t ) f'\left( t \right) f(t) [ − T , T ] \left[ -T,T \right] [T,T]上除了至多有限个点外都存在且连续,且在这些点上 f ′ ( t ) f'\left( t \right) f(t)的左右极限都存在),则在每一点 t ∈ [ − T , T ] t\in \left[ -T,T \right] t[T,T] f ( t ) f\left( t \right) f(t)的Fourier级数收敛于 f ( t ) f\left( t \right) f(t)在点 t t t的左右极限的算术平均值,即有
    f ( t + 0 ) + f ( t − 0 ) 2 = lim ⁡ Δ t → 0 +   f ( t + Δ t ) + lim ⁡ Δ t → 0 −   f ( t + Δ t ) 2 = a 0 2 + ∑ n = 1 ∞ ( a n cos ⁡ n π t T + b n sin ⁡ n π t T ) \begin{aligned} & \frac{f\left( t+0 \right)+f\left( t-0 \right)}{2} \\ & =\frac{\underset{\Delta t\to {{0}^{+}}}{\mathop{\lim }}\,f\left( t+\Delta t \right)+\underset{\Delta t\to {{0}^{-}}}{\mathop{\lim }}\,f\left( t+\Delta t \right)}{2} \\ & =\frac{{{a}_{0}}}{2}+\sum\limits_{n=1}^{\infty }{\left( {{a}_{n}}\cos \frac{n\pi t}{T}+{{b}_{n}}\sin \frac{n\pi t}{T} \right)} \\ \end{aligned} 2f(t+0)+f(t0)=2Δt0+limf(t+Δt)+Δt0limf(t+Δt)=2a0+n=1(ancosTnπt+bnsinTnπt)
    特别地, f ( t ) ∈ C 0 ( G )   ( G ⊆ [ − T , T ] ) f\left( t \right)\in {{C}^{0}}\left( G \right)\text{ }\left( G\subseteq \left[ -T,T \right] \right) f(t)C0(G) (G[T,T]),有
    f ( t + 0 ) + f ( t − 0 ) 2 = f ( t ) + f ( t ) 2 = f ( t ) ,   ∀ t ∈ G ⊆ [ − T , T ] \frac{f\left( t+0 \right)+f\left( t-0 \right)}{2}=\frac{f\left( t \right)+f\left( t \right)}{2}=f\left( t \right),\text{ }\forall t\in G\subseteq \left[ -T,T \right] 2f(t+0)+f(t0)=2f(t)+f(t)=f(t), tG[T,T]
    此时 f ( t ) f\left( t \right) f(t)的Fourier级数收敛到其本身,即有
    f ( t ) = a 0 2 + ∑ n = 1 ∞ ( a n cos ⁡ n π t T + b n sin ⁡ n π t T ) ,   ∀ t ∈ G ⊆ [ − T , T ] f\left( t \right)=\frac{{{a}_{0}}}{2}+\sum\limits_{n=1}^{\infty }{\left( {{a}_{n}}\cos \frac{n\pi t}{T}+{{b}_{n}}\sin \frac{n\pi t}{T} \right)},\text{ }\forall t\in G\subseteq \left[ -T,T \right] f(t)=2a0+n=1(ancosTnπt+bnsinTnπt), tG[T,T]


      由上面的讨论,任取一个时间信号 f ( t ) f\left( t \right) f(t),确立或要求以下条件:

    1. f ( t ) f\left( t \right) f(t)不具有周期,则令其周期为 ∞ = 2 T ( T → ∞ ) \infty =2T\left( T\to \infty \right) =2T(T);若 f ( t ) f\left( t \right) f(t)具有周期 2 T 0 2{{T}_{0}} 2T0,则 ∞ = 2 T ( T → ∞ ) \infty =2T\left( T\to \infty \right) =2T(T)也可视为 f ( t ) f\left( t \right) f(t)的一个周期。因此统一规定 f ( t ) f\left( t \right) f(t)的周期为
      ∞ = 2 T ( T → ∞ ) \infty =2T\left( T\to \infty \right) =2T(T)

    2. f ( t ) f\left( t \right) f(t)绝对可积,即
      ∫ − ∞ ∞ ∣ f ( t ) ∣ d t < ∞ \int_{-\infty }^{\infty }{\left| f\left( t \right) \right|dt}<\infty f(t)dt<
      这样 f ( t ) f\left( t \right) f(t) R \mathbb{R} R上也一定可积。

    3. f ( t ) f\left( t \right) f(t) R \mathbb{R} R上至多只有有限个间断点(当然也只有有限个第一类间断点)。

    4. f ( t ) f\left( t \right) f(t) R \mathbb{R} R上只有有限个极值点,且在除了所有间断点之外的其他点连续。这样 f ′ ( t ) f'\left( t \right) f(t) R \mathbb{R} R上除了至多有限个点外都存在且连续,且在这些点上 f ′ ( t ) f'\left( t \right) f(t)的左右极限都存在。

    推导阶段1(严格)

      首先,由欧拉公式 e i θ = cos ⁡ θ + i sin ⁡ θ {{e}^{i\theta }}=\cos \theta +i\sin \theta eiθ=cosθ+isinθ
    e − i θ = e i ( − θ ) = cos ⁡ ( − θ ) + i sin ⁡ ( − θ ) = cos ⁡ θ − i sin ⁡ θ {{e}^{-i\theta }}={{e}^{i\left( -\theta \right)}}=\cos \left( -\theta \right)+i\sin \left( -\theta \right)=\cos \theta -i\sin \theta eiθ=ei(θ)=cos(θ)+isin(θ)=cosθisinθ
    于是有
    cos ⁡ θ = e i θ + e − i θ 2 ,   sin ⁡ θ = e i θ − e − i θ 2 i \cos \theta =\frac{{{e}^{i\theta }}+{{e}^{-i\theta }}}{2},\text{ }\sin \theta =\frac{{{e}^{i\theta }}-{{e}^{-i\theta }}}{2i} cosθ=2eiθ+eiθ, sinθ=2ieiθeiθ
      至此,开始化简周期为 2 T 2T 2T的函数 f ( t ) f\left( t \right) f(t)的傅里叶级数 a 0 2 + ∑ n = 1 ∞ [ a n cos ⁡ n π t T + b n sin ⁡ n π t T ] \frac{{{a}_{0}}}{2}+\sum\limits_{n=1}^{\infty }{\left[ {{a}_{n}}\cos \frac{n\pi t}{T}+{{b}_{n}}\sin \frac{n\pi t}{T} \right]} 2a0+n=1[ancosTnπt+bnsinTnπt]
      a 0 2 + ∑ n = 1 ∞ [ a n cos ⁡ n π t T + b n sin ⁡ n π t T ] = 1 2 T ∫ − T T f ( t ) d t + ∑ n = 1 ∞ [ ( 1 T ∫ − T T f ( t ) cos ⁡ n π t T d t ) cos ⁡ n π t T ] + ∑ n = 1 ∞ [ ( 1 T ∫ − T T f ( t ) sin ⁡ n π t T d t ) sin ⁡ n π t T ] = 1 2 T ∫ − T T f ( t ) d t + 1 T ∑ n = 1 ∞ cos ⁡ n π t T ∫ − T T f ( t ) cos ⁡ n π t T d t + 1 T ∑ n = 1 ∞ sin ⁡ n π t T ∫ − T T f ( t ) sin ⁡ n π t T d t = 1 2 T ∫ − T T f ( t ) d t + 1 T ∑ n = 1 ∞ ( e i n π t T + e − i n π t T 2 ) ∫ − T T f ( t ) ( e i n π t T + e − i n π t T 2 ) d t + 1 T ∑ n = 1 ∞ ( e i n π t T − e − i n π t T 2 i ) ∫ − T T f ( t ) ( e i n π t T − e − i n π t T 2 i ) d t = 1 2 T ∫ − T T f ( t ) d t + 1 2 T ∑ n = 1 ∞ e i n π t T ∫ − T T f ( t ) e − i n π t T d t + 1 2 T ∑ n = 1 ∞ e − i n π t T ∫ − T T f ( t ) e i n π t T d t = 1 2 T [ ∑ n = 0 0 e i n π t T ∫ − T T f ( t ) e − i n π t T d t + ∑ n = 1 ∞ e i n π t T ∫ − T T f ( t ) e − i n π t T d t + ∑ n = − ∞ − 1 e i n π t T ∫ − T T f ( t ) e − i n π t T d t ] = 1 2 T ∑ n = − ∞   n ∈ Z ∞ e i n π t T ∫ − T T f ( t ) e − i n π t T d t \begin{aligned} & \text{ }\frac{{{a}_{0}}}{2}+\sum\limits_{n=1}^{\infty }{\left[ {{a}_{n}}\cos \frac{n\pi t}{T}+{{b}_{n}}\sin \frac{n\pi t}{T} \right]} \\ & =\frac{1}{2T}\int_{-T}^{T}{f\left( t \right)dt}+\sum\limits_{n=1}^{\infty }{\left[ \left( \frac{1}{T}\int_{-T}^{T}{f\left( t \right)\cos \frac{n\pi t}{T}dt} \right)\cos \frac{n\pi t}{T} \right]}+ \\ & \sum\limits_{n=1}^{\infty }{\left[ \left( \frac{1}{T}\int_{-T}^{T}{f\left( t \right)\sin \frac{n\pi t}{T}dt} \right)\sin \frac{n\pi t}{T} \right]} \\ & \\ & =\frac{1}{2T}\int_{-T}^{T}{f\left( t \right)dt}+\frac{1}{T}\sum\limits_{n=1}^{\infty }{\cos \frac{n\pi t}{T}\int_{-T}^{T}{f\left( t \right)\cos \frac{n\pi t}{T}dt}}+ \\ & \frac{1}{T}\sum\limits_{n=1}^{\infty }{\sin \frac{n\pi t}{T}\int_{-T}^{T}{f\left( t \right)\sin \frac{n\pi t}{T}dt}} \\ & \\ & =\frac{1}{2T}\int_{-T}^{T}{f\left( t \right)dt}+\frac{1}{T}\sum\limits_{n=1}^{\infty }{\left( \frac{{{e}^{i\frac{n\pi t}{T}}}+{{e}^{-i\frac{n\pi t}{T}}}}{2} \right)\int_{-T}^{T}{f\left( t \right)\left( \frac{{{e}^{i\frac{n\pi t}{T}}}+{{e}^{-i\frac{n\pi t}{T}}}}{2} \right)dt}}+ \\ & \frac{1}{T}\sum\limits_{n=1}^{\infty }{\left( \frac{{{e}^{i\frac{n\pi t}{T}}}-{{e}^{-i\frac{n\pi t}{T}}}}{2i} \right)\int_{-T}^{T}{f\left( t \right)\left( \frac{{{e}^{i\frac{n\pi t}{T}}}-{{e}^{-i\frac{n\pi t}{T}}}}{2i} \right)dt}} \\ & \\ & =\frac{1}{2T}\int_{-T}^{T}{f\left( t \right)dt}+\frac{1}{2T}\sum\limits_{n=1}^{\infty }{{{e}^{i\frac{n\pi t}{T}}}\int_{-T}^{T}{f\left( t \right){{e}^{-i\frac{n\pi t}{T}}}dt}}+\frac{1}{2T}\sum\limits_{n=1}^{\infty }{{{e}^{-i\frac{n\pi t}{T}}}\int_{-T}^{T}{f\left( t \right){{e}^{i\frac{n\pi t}{T}}}dt}} \\ & \\ & =\frac{1}{2T}\left[ \sum\limits_{n=0}^{0}{{{e}^{i\frac{n\pi t}{T}}}\int_{-T}^{T}{f\left( t \right){{e}^{-i\frac{n\pi t}{T}}}dt}}+\sum\limits_{n=1}^{\infty }{{{e}^{i\frac{n\pi t}{T}}}\int_{-T}^{T}{f\left( t \right){{e}^{-i\frac{n\pi t}{T}}}dt}}+\sum\limits_{n=-\infty }^{-1}{{{e}^{i\frac{n\pi t}{T}}}\int_{-T}^{T}{f\left( t \right){{e}^{-i\frac{n\pi t}{T}}}dt}} \right] \\ & \\ & =\frac{1}{2T}\sum\limits_{\begin{matrix} n=-\infty \\ \text{ }n\in \mathbb{Z} \end{matrix}}^{\infty }{{{e}^{i\frac{n\pi t}{T}}}\int_{-T}^{T}{f\left( t \right){{e}^{-i\frac{n\pi t}{T}}}dt}} \\ \end{aligned}  2a0+n=1[ancosTnπt+bnsinTnπt]=2T1TTf(t)dt+n=1[(T1TTf(t)cosTnπtdt)cosTnπt]+n=1[(T1TTf(t)sinTnπtdt)sinTnπt]=2T1TTf(t)dt+T1n=1cosTnπtTTf(t)cosTnπtdt+T1n=1sinTnπtTTf(t)sinTnπtdt=2T1TTf(t)dt+T1n=1(2eiTnπt+eiTnπt)TTf(t)(2eiTnπt+eiTnπt)dt+T1n=1(2ieiTnπteiTnπt)TTf(t)(2ieiTnπteiTnπt)dt=2T1TTf(t)dt+2T1n=1eiTnπtTTf(t)eiTnπtdt+2T1n=1eiTnπtTTf(t)eiTnπtdt=2T1[n=00eiTnπtTTf(t)eiTnπtdt+n=1eiTnπtTTf(t)eiTnπtdt+n=1eiTnπtTTf(t)eiTnπtdt]=2T1n= nZeiTnπtTTf(t)eiTnπtdt

      观察上面的推导,其实也有结果
    a 0 2 + ∑ n = 1 ∞ [ a n cos ⁡ n π t T + b n sin ⁡ n π t T ] = 1 2 T ∑ n = − ∞ ∞ e − i n π t T ∫ − T T f ( t ) e i n π t T d t \frac{{{a}_{0}}}{2}+\sum\limits_{n=1}^{\infty }{\left[ {{a}_{n}}\cos \frac{n\pi t}{T}+{{b}_{n}}\sin \frac{n\pi t}{T} \right]}=\frac{1}{2T}\sum\limits_{n=-\infty }^{\infty }{{{e}^{-i\frac{n\pi t}{T}}}\int_{-T}^{T}{f\left( t \right){{e}^{i\frac{n\pi t}{T}}}dt}} 2a0+n=1[ancosTnπt+bnsinTnπt]=2T1n=eiTnπtTTf(t)eiTnπtdt

      令 T → ∞ T\to \infty T,则得到周期为 ∞ \infty 的函数 f ( t ) f\left( t \right) f(t)的Fourier级数表达式(同样收敛于 f ( t ) f\left( t \right) f(t))为
    lim ⁡ T → ∞   [ 1 2 T ∑ n = − ∞ ∞ e i n π t T ∫ − T T f ( t ) e − i n π t T d t ] \underset{T\to \infty }{\mathop{\lim }}\,\left[ \frac{1}{2T}\sum\limits_{n=-\infty }^{\infty }{{{e}^{i\frac{n\pi t}{T}}}\int_{-T}^{T}{f\left( t \right){{e}^{-i\frac{n\pi t}{T}}}dt}} \right] Tlim[2T1n=eiTnπtTTf(t)eiTnπtdt]

      令 Δ T = 1 T → 0   ( T → ∞ ) \Delta T=\frac{1}{T}\to 0\text{ }\left( T\to \infty \right) ΔT=T10 (T),则有
    f ( t ) = lim ⁡ Δ T → 0   [ 1 2 Δ T ∑ n = − ∞ ∞ e i n π t ⋅ Δ T ∫ − 1 / Δ T 1 / Δ T f ( t ) e − i n π t ⋅ Δ T d t ] = lim ⁡ Δ T → 0   [ ∑ n = − ∞ ∞ ( 1 2 e i n π t ⋅ Δ T ∫ − 1 / Δ T 1 / Δ T f ( t ) e − i n π t ⋅ Δ T d t ) Δ T ] \begin{aligned} & f(t)=\underset{\Delta T\to 0}{\mathop{\lim }}\,\left[ \frac{1}{2}\Delta T\sum\limits_{n=-\infty }^{\infty }{{{e}^{in\pi t\centerdot \Delta T}}\int_{-1/\Delta T}^{1/\Delta T}{f\left( t \right){{e}^{-in\pi t\centerdot \Delta T}}dt}} \right] \\ & =\underset{\Delta T\to 0}{\mathop{\lim }}\,\left[ \sum\limits_{n=-\infty }^{\infty }{\left( \frac{1}{2}{{e}^{in\pi t\centerdot \Delta T}}\int_{-1/\Delta T}^{1/\Delta T}{f\left( t \right){{e}^{-in\pi t\centerdot \Delta T}}dt} \right)\Delta T} \right] \\ \end{aligned} f(t)=ΔT0lim[21ΔTn=einπtΔT1/ΔT1/ΔTf(t)einπtΔTdt]=ΔT0lim[n=(21einπtΔT1/ΔT1/ΔTf(t)einπtΔTdt)ΔT]

    h ( T , Δ T ) = 1 2 e i π t ⋅ T ∫ − 1 / Δ T 1 / Δ T f ( t ) e − i π t ⋅ T d t h\left( T,\Delta T \right)=\frac{1}{2}{{e}^{i\pi t\centerdot T}}\int_{-1/\Delta T}^{1/\Delta T}{f\left( t \right){{e}^{-i\pi t\centerdot T}}}dt h(T,ΔT)=21eiπtT1/ΔT1/ΔTf(t)eiπtTdt
    则有
    f ( t ) = lim ⁡ Δ T → 0   [ ∑ n = − ∞ ∞ h ( n Δ T , Δ T ) ⋅ Δ T ] f(t)=\underset{\Delta T\to 0}{\mathop{\lim }}\,\left[ \sum\limits_{n=-\infty }^{\infty }{h\left( n\Delta T,\Delta T \right)}\centerdot \Delta T \right] f(t)=ΔT0lim[n=h(nΔT,ΔT)ΔT]

    推导阶段2(不严格)

    视角一(将黎曼积分的思想推广到无穷积分上)
      在上述 f ( t ) f\left( t \right) f(t)的Fourier级数表达式中,可将
    ∑ n = − ∞ ∞ h ( n Δ T , Δ T ) ⋅ Δ T \sum\limits_{n=-\infty }^{\infty }{h\left( n\Delta T,\Delta T \right)\centerdot \Delta T} n=h(nΔT,ΔT)ΔT
    视为关于 h ( x , y ) h\left( x,y \right) h(x,y)的第一个变元 x x x的广义黎曼和。具体地说,上式的意义是将 ( − ∞ , + ∞ ) \left( -\infty ,+\infty \right) (,+)分割成无限个区间,每个区间的长度均为 Δ T \Delta T ΔT,且每个区间可表示为 k n = [ ( n − 1 ) Δ T , n Δ T ] ,   n ∈ Z {{k}_{n}}=\left[ \left( n-1 \right)\Delta T,n\Delta T \right],\text{ }n\in \mathbb{Z} kn=[(n1)ΔT,nΔT], nZ,函数 h ( T , Δ T ) h\left( T,\Delta T \right) h(T,ΔT) k n {{k}_{n}} kn上取点 T n = n Δ T {{T}_{n}}=n\Delta T Tn=nΔT处的函数值 h ( n Δ T , Δ T ) h\left( n\Delta T,\Delta T \right) h(nΔT,ΔT)
    f ( t ) = lim ⁡ Δ T → 0   [ ∑ n = − ∞ ∞ h ( n Δ T , Δ T ) ⋅ Δ T ] = ∑ n = − ∞ ∞ ( lim ⁡ Δ T → 0   h ( n Δ T , Δ T ) ⋅ Δ T ) = ∑ n = − ∞ ∞ ( lim ⁡ Δ T → 0   h ( n Δ T ,   0 ) ⋅ Δ T ) = ∫ − ∞ ∞ h ( T , 0 ) d T = ∫ − ∞ ∞ ( 1 2 e i π t ⋅ T ∫ − ∞ ∞ f ( t ) e − i π t ⋅ T d t ) d T \begin{aligned} & f\left( t \right)=\underset{\Delta T\to 0}{\mathop{\lim }}\,\left[ \sum\limits_{n=-\infty }^{\infty }{h\left( n\Delta T,\Delta T \right)\centerdot \Delta T} \right] \\ & =\sum\limits_{n=-\infty }^{\infty }{\left( \underset{\Delta T\to 0}{\mathop{\lim }}\,h\left( n\Delta T,\Delta T \right)\centerdot \Delta T \right)} \\ & =\sum\limits_{n=-\infty }^{\infty }{\left( \underset{\Delta T\to 0}{\mathop{\lim }}\,h\left( n\Delta T,\text{ }0 \right)\centerdot \Delta T \right)} \\ & =\int_{-\infty }^{\infty }{h\left( T,0 \right)dT} \\ & =\int_{-\infty }^{\infty }{\left( \frac{1}{2}{{e}^{i\pi t\centerdot T}}\int_{-\infty }^{\infty }{f\left( t \right){{e}^{-i\pi t\centerdot T}}dt} \right)dT} \\ \end{aligned} f(t)=ΔT0lim[n=h(nΔT,ΔT)ΔT]=n=(ΔT0limh(nΔT,ΔT)ΔT)=n=(ΔT0limh(nΔT, 0)ΔT)=h(T,0)dT=(21eiπtTf(t)eiπtTdt)dT
    部分疏漏之处
      第二步中求极限和求和运算交换需要根据。一个思路是判断级数 ∑ n = − ∞ ∞ h ( n Δ T , Δ T ) ⋅ Δ T \sum\limits_{n=-\infty }^{\infty }{h\left( n\Delta T,\Delta T \right)\centerdot \Delta T} n=h(nΔT,ΔT)ΔT关于 Δ T \Delta T ΔT Δ T = 0 \Delta T=0 ΔT=0的一个邻域 U ( 0 ; δ ) U\left( 0;\delta \right) U(0;δ)内一致收敛且每一项都连续。

    视角二
    f ( t ) = lim ⁡ Δ T → 0   [ ∑ n = − ∞ ∞ h ( n Δ T , Δ T ) ⋅ Δ T ] = lim ⁡ Δ T → 0 +   [ ∑ n = − log ⁡ 1 / 2 Δ T Δ T   n ∈ Z log ⁡ 1 / 2 Δ T Δ T h ( n Δ T , Δ T ) ⋅ Δ T ] = lim ⁡ Δ T → 0 +   ∫ − log ⁡ 1 / 2 Δ T − δ ( Δ T ) log ⁡ 1 / 2 Δ T − δ ( Δ T ) h ( T , Δ T ) d T   ( 0 ≤ δ ( Δ T ) ≤ Δ T ) = ∫ − ∞ ∞ h ( T , 0 ) d T = ∫ − ∞ ∞ ( 1 2 e i π t ⋅ T ∫ − ∞ ∞ f ( t ) e − i π t ⋅ T d t ) d T \begin{aligned} & f\left( t \right)=\underset{\Delta T\to 0}{\mathop{\lim }}\,\left[ \sum\limits_{n=-\infty }^{\infty }{h\left( n\Delta T,\Delta T \right)\centerdot \Delta T} \right] \\ & =\underset{\Delta T\to {{0}^{+}}}{\mathop{\lim }}\,\left[ \sum\limits_{\begin{matrix} n=-\frac{{{\log }_{1/2}}\Delta T}{\Delta T} \\ \text{ }n\in \mathbb{Z} \end{matrix}}^{\frac{{{\log }_{1/2}}\Delta T}{\Delta T}}{h\left( n\Delta T,\Delta T \right)\centerdot \Delta T} \right] \\ & =\underset{\Delta T\to {{0}^{+}}}{\mathop{\lim }}\,\int_{-{{\log }_{1/2}}\Delta T-\delta \left( \Delta T \right)}^{{{\log }_{1/2}}\Delta T-\delta \left( \Delta T \right)}{h\left( T,\Delta T \right)dT}\text{ }\left( 0\le \delta \left( \Delta T \right)\le \Delta T \right) \\ & =\int_{-\infty }^{\infty }{h\left( T,0 \right)dT} \\ & =\int_{-\infty }^{\infty }{\left( \frac{1}{2}{{e}^{i\pi t\centerdot T}}\int_{-\infty }^{\infty }{f\left( t \right){{e}^{-i\pi t\centerdot T}}dt} \right)dT} \\ \end{aligned} f(t)=ΔT0lim[n=h(nΔT,ΔT)ΔT]=ΔT0+limn=ΔTlog1/2ΔT nZΔTlog1/2ΔTh(nΔT,ΔT)ΔT=ΔT0+limlog1/2ΔTδ(ΔT)log1/2ΔTδ(ΔT)h(T,ΔT)dT (0δ(ΔT)ΔT)=h(T,0)dT=(21eiπtTf(t)eiπtTdt)dT
    部分疏漏之处
      第一步到第二步的推导缺乏依据,第一步中的式子蕴含类似于累次极限的思想(先扩展求和极限后求 Δ T \Delta T ΔT极限),而第二步中的式子蕴含类似于重极限的思想(同时进行扩展求和极限,求 Δ T \Delta T ΔT极限)。这一步推导需要细细雕琢。

    总结阶段

      由上面的推导可得
    f ( t ) = ∫ − ∞ ∞ ( 1 2 e i π t ⋅ T ∫ − ∞ ∞ f ( t ) e − i π t ⋅ T d t ) d T f\left( t \right)=\int_{-\infty }^{\infty }{\left( \frac{1}{2}{{e}^{i\pi t\centerdot T}}\int_{-\infty }^{\infty }{f\left( t \right){{e}^{-i\pi t\centerdot T}}dt} \right)dT} f(t)=(21eiπtTf(t)eiπtTdt)dT
    同理也有
    f ( t ) = ∫ − ∞ ∞ ( 1 2 e − i π t ⋅ T ∫ − ∞ ∞ f ( t ) e i π t ⋅ T d t ) d T f\left( t \right)=\int_{-\infty }^{\infty }{\left( \frac{1}{2}{{e}^{-i\pi t\centerdot T}}\int_{-\infty }^{\infty }{f\left( t \right){{e}^{i\pi t\centerdot T}}dt} \right)dT} f(t)=(21eiπtTf(t)eiπtTdt)dT
      在此基础上,以第一条为例,定义
    F ( T ) = ∫ − ∞ ∞ f ( t ) e − i π t ⋅ T d t F\left( T \right)=\int_{-\infty }^{\infty }{f\left( t \right){{e}^{-i\pi t\centerdot T}}dt} F(T)=f(t)eiπtTdt
    f ( t ) f\left( t \right) f(t)的Fourier变换,此时有
    f ( t ) = 1 2 ∫ − ∞ ∞ e i π t ⋅ T F ( T ) d T f\left( t \right)=\frac{1}{2}\int_{-\infty }^{\infty }{{{e}^{i\pi t\centerdot T}}F\left( T \right)dT} f(t)=21eiπtTF(T)dT
    f ( t ) f\left( t \right) f(t)的Fourier逆变换( F ( T ) F\left( T \right) F(T)也是可积的)。

      实际应用中,也可以采用下面的变换与逆变换公式
    变 换 : F ( T ) = c ∫ − ∞ ∞ f ( t ) e − i π t ⋅ T d t 逆 变 换 : f ( t ) = d ∫ − ∞ ∞ e i π t ⋅ T F ( T ) d T c d = 1 2 \begin{matrix} 变换:F\left( T \right)=c\int_{-\infty }^{\infty }{f\left( t \right){{e}^{-i\pi t\centerdot T}}dt} \\ \\ 逆变换:f\left( t \right)=d\int_{-\infty }^{\infty }{{{e}^{i\pi t\centerdot T}}F\left( T \right)dT} \\ \\ cd=\frac{1}{2} \\ \end{matrix} :F(T)=cf(t)eiπtTdt:f(t)=deiπtTF(T)dTcd=21

    其他参考博文

      傅里叶变换一步步详细推导

    更多相关内容
  • 傅里叶变换和逆傅里叶变换numpy

    千次阅读 2020-02-20 16:20:37
    理论基础 时域:以时间为横坐标 频域:以频率的倒数为横坐标,可以看出,频域更加简单。 相位:与时间差有关的一个概念。...1. 傅里叶变换 numpy.fft.fft2 1 实现傅里叶变换。 返回一个复数数组。...

    理论基础
    时域:以时间为横坐标
    频域:以频率的倒数为横坐标,可以看出,频域更加简单。

    相位:与时间差有关的一个概念。

    傅里叶说,任何连续周期信号,可以由一组适当的正弦曲线组合而成。我们知道,正弦曲线可以转换为频域信号,所以:任何连续周期信号,都可以转换成频域信号。并且这个过程是可逆的。


    程序实现
    1. 傅里叶变换

    numpy.fft.fft2
    1
    实现傅里叶变换。
    返回一个复数数组。
    numpy.fft.fftshift    效果如图所示
    将零频率分量移到频谱中心。    
    20*np.log( np.abs( fshift ) )
    1
    将傅里叶变换的计算结果映射到【0,255】这个区间内。

    import cv2
    import numpy as np
    import matplotlib.pyplot as plt

    o=cv2.imread('image\\equ2.bmp',0)
    f=np.fft.fft2(o)                              #傅里叶变换
    fshift=np.fft.fftshift(f)                     #零频率移到中心
    result= 20 * np.log(np.abs(fshift))           #阈值转换
    plt.subplot(121),plt.imshow(o,cmap='gray'),plt.title('original'),plt.axis('off')
    plt.subplot(122),plt.imshow(result,cmap='gray'),plt.title('result'),plt.axis('off')
    plt.show()

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12

    2. 逆傅里叶变换

    numpy.fft.ifft2
    1
    实现逆傅里叶变换。
    返回一个复数数组。
    numpy.fft.ifftshift
    1
    fftshift的逆函数,将低频从中心移到左上角。

    iimg=np.abs( 逆傅里叶变换结果)
    1
    设置值得范围

    将图像进行傅里叶变换后,再进行逆傅里叶变换,与原图片对比。

    import cv2
    import numpy as np
    import matplotlib.pyplot as plt

    o=cv2.imread('image\\boat.bmp',0)
    f=np.fft.fft2(o)
    fshift=np.fft.fftshift(f)                     #傅里叶变换
    ishift=np.fft.ifftshift(fshift)
    io=np.fft.ifft2(ishift)
    io=np.abs(io)                                 #逆傅里叶变换
    plt.subplot(121),plt.imshow(o,cmap='gray'),plt.title('original'),plt.axis('off')
    plt.subplot(122),plt.imshow(io,cmap='gray'),plt.title('result'),plt.axis('off')
    plt.show()

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14

     

    展开全文
  • 同时,希望观看本专栏的小伙伴可以理解到OpenCv进行图像处理的强大哦,如有转载,请注明出处(原文链接作者署名),感谢各位小伙伴啦! 前文参考: 《OpenCv视觉之眼》Python图像处理一 :Opencv-python的简介及...

    本专栏主要介绍如果通过OpenCv-Python进行图像处理,通过原理理解OpenCv-Python的函数处理原型,在具体情况中,针对不同的图像进行不同等级的、不同方法的处理,以达到对图像进行去噪、锐化等一系列的操作。同时,希望观看本专栏的小伙伴可以理解到OpenCv进行图像处理的强大哦,如有转载,请注明出处(原文链接和作者署名),感谢各位小伙伴啦!

    前文参考:
    《OpenCv视觉之眼》Python图像处理一 :Opencv-python的简介及Python环境搭建
    《OpenCv视觉之眼》Python图像处理二 :Opencv图像读取、显示、保存基本函数原型及使用
    《OpenCv视觉之眼》Python图像处理三 :Opencv图像属性、ROI区域获取及通道处理
    《OpenCv视觉之眼》Python图像处理四 :Opencv图像灰度处理的四种方法及原理
    《OpenCv视觉之眼》Python图像处理五 :Opencv图像去噪处理之均值滤波、方框滤波、中值滤波和高斯滤波

    上次博客,我们讲解了OpenCV图像去噪的几种基本方法,包括均值滤波、中值滤波、高斯滤波等,也就是在图像时域上进行去噪的方法,其中,高斯滤波和中值滤波是需要重点掌握的图像去噪方法,因为对图像的高斯噪声和椒盐噪声去除的效果比较好;除了以上时域上的去噪方法之外,OpenCV也提供了对图像频域上的去噪的函数方法,例如高通滤波和低通滤波,通常用作图像除噪、图像增强和锐化等,因此,高通滤波和低通滤波也是我们学习OpenCV需要掌握的两种图像去噪的方法,但由于高通和低通滤波的实现原理是通过傅里叶变换后进行处理,然后通过傅里叶逆变换进行实现的,所以首先我们需要了解图像傅里叶变换和傅里叶逆变换的原理。

    本次博客,林君学长将带大家了解OpenCV图像的傅里叶变换和逆变换原理,通过原理编写傅里叶变换和逆变换的功能函数,并同时介绍OpenCV傅里叶变换和逆变换的库函数使用方法,一起学习吧!

    在进行傅里叶变换学习时,我们必须要明白为什么要在频率域研究图像增强?

    • 可以利用频率成分和图像外表之间的对应关系。一些在空间域表述困难的增强任务,在频率域中变得非常普通
    • 滤波在频率域更为直观,它可以解释空间域滤波的某些性质
    • 可以在频率域指定滤波器,做反变换,然后在空间域使用结果滤波器作为空间域滤波器的指导
    • 一旦通过频率域试验选择了空间滤波,通常实施都在空间域进行

    提示:傅里叶变换是为后面低通滤波或者说是高通滤波做准备哦,一般来说,处理的是灰度图像,通过上面的介绍我们也可以看出,但下面的原理我们通过处理彩色图像编写的,而OpenCV库函数是在处理灰度图像基础上实现的

    一、傅里叶变换

    • 傅里叶变换(Fourier Transform,FT)后,对同一事物的观看角度随之改变,可以从频域里发现一些从时域里不易察觉的特征。某些在时域内不好处理的地方,在频域内可以容易地处理。

    1、傅里叶变换原理

    1)、什么是傅里叶变换?
    能将满足一定条件的某个函数表示成三角函数(正弦和/或余弦函数)或者它们的积分的线性组合。在不同的研究领域,傅立叶变换具有多种不同的变体形式,如连续傅立叶变换和离散傅立叶变换。傅里叶变换是一种分析信号的方法,它可分析信号的成分,也可用这些成分合成信号。许多波形可作为信号的成分,比如正弦波、方波、锯齿波等,傅里叶变换用正弦波作为信号的成分。
    傅里叶变换的实质是将一个信号分离为无穷多多正弦/复指数信号的加成,也就是说,把信号变成正弦信号相加的形式——既然是无穷多个信号相加,那对于非周期信号来说,每个信号的加权应该都是零——但有密度上的差别,你可以对比概率论中的概率密度来思考一下——落到每一个点的概率都是无限小,但这些无限小是有差别的所以,傅里叶变换之后,横坐标即为分离出的正弦信号的频率,纵坐标对应的是加权密度。
    在这里插入图片描述
    2)、傅里叶变换作用?
    傅里叶变换可以将一个时域信号转换成在不同频率下对应的振幅及相位,其频谱就是时域信号在频域下的表现,而反傅里叶变换可以将频谱再转换回时域的信号。最简单最直接的应用就是时频域转换。将图像时域处理上面复杂的特征转为频域实现简单化,对简单化的特征进行处理,然后再通过傅里叶逆变换回到原来的图像,如下所示:
    在这里插入图片描述
    3)、图像进行傅里叶变换原理
    我们知道,灰度图像是由二维的离散的点构成的。二维离散傅里叶变换(Two-Dimensional Discrete Fourier Transform)常用于图像处理中,对图像进行傅里叶变换后得到其频谱图。频谱图中频率高低表征图像中灰度变化的剧烈程度。图像中边缘和噪声往往是高频信号,而图像背景往往是低频信号。我们在频率域内可以很方便地对图像的高频或低频信息进行操作,完成图像去噪,图像增强,图像边缘提取等操作,因此,对图像进行傅里叶变换的原理如下公式:
    F ( u , v ) = ∑ x = 0 H − 1 ∑ y = 0 W − 1 f ( x , y ) e − 2 j π ( u x / H + v y / W ) 图 像 高 H , 宽 W 。 F ( u , v ) 表 示 频 域 图 像 , f ( x , y ) 表 示 时 域 图 像 。 u 的 范 围 为 [ 0 , H − 1 ] , v 的 范 围 为 [ 0 , W − 1 ] ↑ F(u,v)=\sum_{x=0}^{H-1}\sum_{y=0}^{W-1}f(x,y)e^{-2j\pi(ux/H+vy/W)} \\\\ 图像高H,宽W。F(u,v)表示频域图像,f(x,y)表示时域图像。u的范围为[0,H-1],v的范围为[0,W-1] ↑ F(u,v)=x=0H1y=0W1f(x,y)e2jπ(ux/H+vy/W)HWF(u,v)f(x,y)u[0,H1]v[0,W1]
    那么怎么将上面的二维公式转为我们可以理解的二维图像呢?其实很简单, f ( x , y ) f(x,y) f(x,y)表示在(x,y)点上的图像的像素值,该像素值乘以后面的在(u,v)点的 e − 2 j π ( u x / H + v y / W ) e^{-2j\pi(ux/H+vy/W)} e2jπ(ux/H+vy/W)处理出来的一个数,然后对图像所有像素进行遍历,最后求和,就得到在频域上该(u,v)点对应的值,通过该原理,我们就可以自己写出傅里叶变换的功能函数了,来看吧

    2、自定义傅里叶变换功能函数

    1)、自定义傅里叶变换函数

    import cv2
    import numpy as np
    import matplotlib.pyplot as plt
    plt.rcParams['font.sans-serif'] = ['SimHei'] #显示中文
    #自定义傅里叶变换功能函数
    def dft(img):
        #获取图像属性
        H,W,channel=img.shape
        #定义频域图,从公式可以看出为求出结果为复数,因此,需要定义为复数矩阵
        F = np.zeros((H, W,channel), dtype=np.complex)
        # 准备与原始图像位置相对应的处理索引
        x = np.tile(np.arange(W), (H, 1))
        y = np.arange(H).repeat(W).reshape(H, -1)
        #通过公式遍历
        for c in range(channel):#对彩色的3通道数进行遍历
            for u in range(H):
                for v in range(W):
                    F[u, v, c] = np.sum(img[..., c] * np.exp(-2j * np.pi * (x * u / W + y * v / H))) / np.sqrt(H * W)
        return F
    

    2)、读取图像,进行傅里叶变化并显示变换后的结果

    #读取图像
    img=cv2.imread("my.jpg")
    #进行图像裁剪,加快傅里叶运算速率。将原始尺寸缩放为100*100的尺寸
    img = cv2.resize(img, (100, 100), interpolation=cv2.INTER_CUBIC)
    #BGR转换为RGB显示格式,方便通过matplotlib进行图像显示
    img=cv2.cvtColor(img,cv2.COLOR_BGR2RGB)
    #调用傅里叶变换函数
    result =dft(img)
    #将傅里叶频谱图从左上角移动到中心位置
    fshift = np.fft.fftshift(result)
    #将复数转为浮点数进行傅里叶频谱图显示
    fimg = np.log(np.abs(fshift))
    #图像显示
    plt.subplot(121), plt.imshow(img), plt.title('原图像')
    plt.axis('off')
    plt.subplot(122), plt.imshow(fimg), plt.title('傅里叶变换')
    plt.axis('off')
    plt.show()
    

    在这里插入图片描述
    上图是将原图进行缩放之后进行傅里叶变换的,只为了降低函数运行时间,尽快的得出结果;当然,OpenCV中也提供了图像傅里叶变换的库函数,接下,我们介绍OpenCV中傅里叶库函数的使用!

    3、OpenCV库函数实现傅里叶变换

    OpenCV 中相应的函数是cv2.dft()和用Numpy输出的结果一样,但是是双通道的。第一个通道是结果的实数部分,第二个通道是结果的虚数部分,并且输入图像要首先转换成 np.float32 格式。
    1)、函数原型:img=cv2.dft(src, flags=None, nonzeroRows=None)

    • src表示输入图像,需要通过np.float32转换格式
    • flags表示转换标记,其中DFT _INVERSE执行反向一维或二维转换,而不是默认的正向转换;DFT _SCALE表示缩放结果,由阵列元素的数量除以它;DFT _ROWS执行正向或反向变换输入矩阵的每个单独的行,该标志可以同时转换多个矢量,并可用于减少开销以执行3D和更高维度的转换等;DFT _COMPLEX_OUTPUT执行1D或2D实数组的正向转换,这是最快的选择,默认功能;DFT _REAL_OUTPUT执行一维或二维复数阵列的逆变换,结果通常是相同大小的复数数组,但如果输入数组具有共轭复数对称性,则输出为真实数组
    • nonzeroRows表示当参数不为零时,函数假定只有nonzeroRows输入数组的第一行(未设置)或者只有输出数组的第一个(设置)包含非零,因此函数可以处理其余的行更有效率,并节省一些时间;这种技术对计算阵列互相关或使用DFT卷积非常有用

    注意,由于输出的频谱结果是一个复数,需要调用cv2.magnitude()函数将傅里叶变换的双通道结果转换为0到255的范围
    2)、cv2.magnitude()函数原型:cv2.magnitude(x, y)

    • x表示浮点型X坐标值,即实部
    • y表示浮点型Y坐标值,即虚部

    最终输出结果为幅值,即:

    i m g ( I ) = x ( I ) 2 + y ( I ) 2 img(I)=\sqrt{x(I)^2+y(I)^2} img(I)=x(I)2+y(I)2
    3)、傅里叶库函数使用

    #傅里叶库函数使用
    import cv2
    import numpy as np
    import matplotlib.pyplot as plt
    plt.rcParams['font.sans-serif'] = ['SimHei'] #显示中文
    #读取图像
    img=cv2.imread("my.jpg",0)
    #进行图像裁剪,加快傅里叶运算速率。将原始尺寸缩放为100*100的尺寸
    #OpneCV傅里叶变换函数
    result =cv2.dft(np.float32(img),flags = cv2.DFT_COMPLEX_OUTPUT)#需要将图像进行一次float转换
    #将频谱低频从左上角移动至中心位置
    dft_shift = np.fft.fftshift(result)
    #频谱图像双通道复数转换为0-255区间
    result1 = 20*np.log(cv2.magnitude(dft_shift[:,:,0], dft_shift[:,:,1]))
    #图像显示
    plt.subplot(121), plt.imshow(img,'gray'), plt.title('原图像')
    plt.axis('off')
    plt.subplot(122), plt.imshow(result1,'gray'), plt.title('傅里叶变换')
    plt.axis('off')
    plt.show()
    

    在这里插入图片描述
    使用OpenCV函数需要先将图像转为灰度图,然后才能进行处理,这里林君学长再介绍一个Numpy库的傅里叶变换处理,给出相关代码,小伙伴们自己理解哈,不做说明哦!
    4)、扩展:Numpy库的图像傅里叶变换

    #Numpy傅里叶变换
    import cv2 as cv
    import numpy as np
    from matplotlib import pyplot as plt
    plt.rcParams['font.sans-serif'] = ['SimHei'] #显示中文
    #读取图像灰度图像
    img = cv.imread('my.jpg',0)
    #快速傅里叶变换算法得到频率分布
    f = np.fft.fft2(img)
    #默认结果中心点位置是在左上角,
    #调用fftshift()函数转移到中间位置
    fshift = np.fft.fftshift(f)       
    #fft结果是复数, 其绝对值结果是振幅
    fimg = np.log(np.abs(fshift))
    #展示结果
    plt.subplot(121), plt.imshow(img,'gray'), plt.title('原图像')
    plt.axis('off')
    plt.subplot(122), plt.imshow(fimg,'gray'), plt.title('傅里叶变换')
    plt.axis('off')
    plt.show()
    

    在这里插入图片描述

    二、傅里叶逆变换

    1、傅里叶逆变换原理

    1)、傅里叶反变换原理就是将图像频域还原为图像时域,具体原理公式如下所示:
    f ( x , y ) = ∑ u = 0 H − 1 ∑ v = 0 W − 1 F ( u , v ) e 2 j π ( u x / H + v y / W ) 图 像 高 H , 宽 W 。 f ( x , y ) 表 示 时 域 图 像 , F ( u , v ) 表 示 频 域 图 像 。 x 的 范 围 为 [ 0 , H − 1 ] , y 的 范 围 为 [ 0 , W − 1 ] ↑ f(x,y)=\sum_{u=0}^{H-1}\sum_{v=0}^{W-1} F(u,v)e^{2j\pi(ux/H+vy/W)} \\\\ 图像高H,宽W。f(x,y)表示时域图像,F(u,v)表示频域图像。x的范围为[0,H-1],y的范围为[0,W-1] ↑ f(x,y)=u=0H1v=0W1F(u,v)e2jπ(ux/H+vy/W)HWf(x,y),F(u,v)x[0,H1]y[0,W1]
    对于公式的理解,和上面傅里叶变换公式理解一致

    2、自定义傅里叶逆变换功能函数

    1)、自定义傅里叶逆变换功能函数

    import cv2 as cv
    import numpy as np
    from matplotlib import pyplot as plt
    plt.rcParams['font.sans-serif'] = ['SimHei'] #显示中文
    #傅里叶反变换
    def idft(G):
        H, W, channel = G.shape
        #定义空白时域图像
        out = np.zeros((H, W, channel), dtype=np.float32)
        # 准备与原始图像位置相对应的处理索引
        x = np.tile(np.arange(W), (H, 1))
        y = np.arange(H).repeat(W).reshape(H, -1)
        #通过公式遍历
        for c in range(channel):
            for u in range(H):
                for v in range(W):
                    out[u, v, c] = np.abs(np.sum(G[..., c] * np.exp(2j * np.pi * (x * u / W + y * v / H)))) / np.sqrt(W * H)
        # 剪裁
        out = np.clip(out, 0, 255)
        out = out.astype(np.uint8)
        return out
    

    2)、调用函数,先进行傅里叶变换,然后进行傅里叶逆变换并显示结果

    #读取图像
    img=cv2.imread("my.jpg")
    #进行图像裁剪,加快傅里叶运算速率。将原始尺寸缩放为100*100的尺寸
    img = cv2.resize(img, (100, 100), interpolation=cv2.INTER_CUBIC)
    #BGR转换为RGB显示格式,方便通过matplotlib进行图像显示
    img=cv2.cvtColor(img,cv2.COLOR_BGR2RGB)
    #调用傅里叶变换函数,先将图像进行傅里叶变换,该函数上面我们通过原理写出了哦!
    result =dft(img)
    #将傅里叶频谱图从左上角移动到中心位置
    fshift = np.fft.fftshift(result)
    #将复数转为浮点数进行傅里叶频谱图显示
    fimg = np.log(np.abs(fshift))
    #调用傅里叶逆变换函数
    result2=idft(result)
    #图像显示
    plt.subplot(131), plt.imshow(img), plt.title('原图像')
    plt.axis('off')
    plt.subplot(132), plt.imshow(fimg), plt.title('傅里叶变换')
    plt.axis('off')
    plt.subplot(133), plt.imshow(result2), plt.title('傅里叶逆变换')
    plt.axis('off')
    plt.show()
    

    在这里插入图片描述
    最后我们可以看出,我们通过原理书写的傅里叶变换和傅里叶逆变换是没有问题的,因此,而且傅里叶反变换的结果是和之前的图像一模一样的,几乎没有什么损失,后面我们将会讲到在傅里叶变换的基础上实现高通或者说是低通滤波,来对图像去噪,记得收看啦!

    3、OpenCV库函数实现傅里叶逆变换

    OpenCV中也提供了傅里叶逆变换的库函数,我们一起看一下函数原型吧
    1)、函数原型img=cv2.idft(src,flags,nonzeroRows)

    • src表示输入图像,包括实数或复数
    • flags表示转换标记
    • nonzeroRows表示要处理的img行数,其余行的内容未定义

    2)、OpenCV库函数实现傅里叶逆变换的完整代码如下所示:

    #OpenCV实现傅里叶逆变换
    import cv2 as cv
    import numpy as np
    from matplotlib import pyplot as plt
    plt.rcParams['font.sans-serif'] = ['SimHei'] #显示中文
    
    #读取图像
    img = cv2.imread('my.jpg', 0)
    #傅里叶变换
    dft = cv2.dft(np.float32(img), flags = cv2.DFT_COMPLEX_OUTPUT)#傅里叶变换库函数调用
    dftshift = np.fft.fftshift(dft)#将傅里叶频域从左上角移动到中间
    res1= 20*np.log(cv2.magnitude(dftshift[:,:,0], dftshift[:,:,1]))#双通道结果转换为0到255的范围用于图像显示
    #傅里叶逆变换
    ishift = np.fft.ifftshift(dftshift)#将频域从中间移动到左上角
    iimg = cv2.idft(ishift)#傅里叶逆变换库函数调用
    res2 = cv2.magnitude(iimg[:,:,0], iimg[:,:,1])#双通道结果转换为0到255的范围
    #显示图像
    plt.subplot(131), plt.imshow(img, 'gray'), plt.title('原图像')
    plt.axis('off')
    plt.subplot(132), plt.imshow(res1, 'gray'), plt.title('傅里叶变换')
    plt.axis('off')
    plt.subplot(133), plt.imshow(res2, 'gray'), plt.title('傅里叶逆变换')
    plt.axis('off')
    plt.show()
    

    在这里插入图片描述
    3)、扩展:Numpy库也提供图像了傅里叶变换,完整代码如下所示:

    #Numpy库的傅里叶变换
    import cv2 as cv
    import numpy as np
    from matplotlib import pyplot as plt
    plt.rcParams['font.sans-serif'] = ['SimHei'] #显示中文
    #读取图像
    img = cv.imread('my.jpg',0)
    #傅里叶变换
    f = np.fft.fft2(img) #Numpy的库函数傅里叶变换
    fshift = np.fft.fftshift(f)
    res = np.log(np.abs(fshift))
    #傅里叶逆变换
    ishift = np.fft.ifftshift(fshift)
    iimg = np.fft.ifft2(ishift) #Numpy的库函数傅里叶逆变换
    iimg = np.abs(iimg)#将复数变为实数
    #展示结果
    plt.subplot(131), plt.imshow(img,'gray'), plt.title('原图像')
    plt.axis('off')
    plt.subplot(132), plt.imshow(res,'gray'), plt.title('傅里叶变换')
    plt.axis('off')
    plt.subplot(133), plt.imshow(iimg,'gray'), plt.title('Inverse Fourier Image')
    plt.axis('off')
    plt.show()
    

    在这里插入图片描述

    以上就是本次博客的全部内容,遇到问题的小伙伴记得留言评论,学长看到会为大家进行解答的,这个学长不太冷!

    任何的收获不是巧合,而是每天的努力与坚持得来的。人生因有梦想,而充满动力。
    不怕你每天迈一小步,只怕你停滞不前;不怕你每天做一点事,只怕你无所事事。 坚持,是生命的一种毅力!执行,是努力的一种坚持!

    陈一月的又一天编程岁月^ _ ^

    展开全文
  • 傅立叶变换是将时域的函数转换成频域上的函数,是对于同一个函数的不同视角,数学定义如下: F(w)=F(f(t))=∫f(t)e−iwtdt(1) F(w)=F(f(t))=\int{f(t)e^{-iwt}}dt \quad\quad\quad (1) F(w)=F(f(t))=∫f(t)e...

    原文首发于个人站点 图卷积网络GCN(Graph Convolution Network)(二)图上的傅里叶变换和逆变换
    公众号:【DreamHub】

    由于文章篇幅较长,因此将其分解为三部分:

    背景知识

    如要了解谱图卷积,首先需要学习图理论基础和图中如何进行傅里叶变换。

    对于傅里叶变换,本文不再赘述。详细内容可以参考:

    图上的傅立叶变换

    傅立叶变换是将时域的函数转换成频域上的函数,是对于同一个函数的不同视角,数学定义如下:
    F ( w ) = F ( f ( t ) ) = ∫ f ( t ) e − i w t d t ( 1 ) \mathcal{F}(w)=\mathcal{F}(f(t))=\int{f(t)e^{-iwt}}dt \quad\quad\quad (1) F(w)=F(f(t))=f(t)eiwtdt(1)
    公式(1)表示的意义是傅立叶变换是时域信号 f ( t ) f(t) f(t) 与基函数 e − i w t e^{-iwt} eiwt 的积分。

    为什么选择 e − i w t e^{-iwt} eiwt作为基函数?原因有二:

    • e − i w t e^{-iwt} eiwt是正交函数系。
    • e − i w t e^{-iwt} eiwt是拉普拉斯算子 Δ \Delta Δ的特征函数。

    至于 e − i w t e^{-iwt} eiwt由何种推导得来的请参考: 理解傅里叶变换 | 隐舍

    先解释下拉普拉斯算子 Δ \Delta Δ的定义

    在数学中,拉普拉斯算子(Laplacian)是由欧几里得空间中的一个函数的梯度的散度给出的微分算子,记为 Δ f = ∇ 2 f = ∇ ⋅ ∇ f \Delta f=\nabla^{2} f=\nabla \cdot \nabla f Δf=2f=f,表示 n n n维空间笛卡尔坐标系 x i x_i xi中所有非混合二阶偏导数之和,其数学定义为
    Δ = ∑ i = 1 n ∂ 2 ∂ 2 x i ( 2 ) \Delta=\sum_{i=1}^n\frac{\partial^2}{\partial{^2x_{i}}} \quad\quad\quad(2) Δ=i=1n2xi2(2)
    这表达式什么意思呢?以二维空间为例:
    Δ f ( x , y ) = ∂ 2 f ∂ x 2 + ∂ 2 f ∂ y 2 = [ f ( x + 1 , y ) + f ( x − 1 , y ) − 2 f ( x , y ) ] + [ f ( x , y + 1 ) + f ( x , y − 1 ) − 2 f ( x , y ) ] = f ( x + 1 , y ) + f ( x − 1 , y ) + f ( x , y + 1 ) + f ( x , y − 1 ) − 4 f ( x , y ) \begin{aligned} \Delta f(x, y) &=\frac{\partial^{2} f}{\partial x^{2}}+\frac{\partial^{2} f}{\partial y^{2}} \\ &=[f(x+1, y)+f(x-1, y)-2 f(x, y)]+[f(x, y+1)+f(x, y-1)-2 f(x, y)] \\ &=f(x+1, y)+f(x-1, y)+f(x, y+1)+f(x, y-1)-4 f(x, y) \end{aligned} Δf(x,y)=x22f+y22f=[f(x+1,y)+f(x1,y)2f(x,y)]+[f(x,y+1)+f(x,y1)2f(x,y)]=f(x+1,y)+f(x1,y)+f(x,y+1)+f(x,y1)4f(x,y)
    上式中每一项的系数就是拉普拉斯在二维图像中的卷积核:

    再解释下 e − i w t e^{-iwt} eiwt为何拉普拉斯算子 Δ \Delta Δ的特征函数

    拉普拉斯算子的特征方程为:
    Δ g = λ g ( 3 ) \Delta g=\lambda g \quad\quad\quad (3) Δg=λg(3)

    代入函数 e − i w t e^{-iwt} eiwt可得:

    Δ e − i w t = ∂ 2 ∂ 2 x i e − i w t = ∂ 2 ∂ 2 t e − i w t = − w 2 e − i w t ( 4 ) \Delta e^{-iwt}=\frac{\partial ^2}{\partial^2 x_i}e^{-iwt}=\frac{\partial ^2}{\partial^2 t}e^{-iwt}=-w^2e^{-iwt} \quad\quad\quad(4) Δeiwt=2xi2eiwt=2t2eiwt=w2eiwt(4)

    其中特征值 λ = − w 2 \lambda=-w^2 λ=w2 ,即 w w w 和特征值 λ \lambda λ 密切相关。

    由上述证明可得结论:傅立叶变换是时域信号与拉普拉斯算子特征函数的积分。

    从整体推特殊,将以上的结论推广到(离散)图中可知:图上的傅立叶变换就是时域信号与图拉普拉斯算子特征函数的求和!

    对于傅里叶变换式(1),将特征函数转换为特征向量(特征函数可以认为是无限维的特征向量),将积分转换为求和,那么 N N N个顶点图上的傅立叶变化表达式为:
    F ( λ l ) = f ^ ( λ l ) = ∑ i = 1 N f ( i ) ∗ u l ( i ) ( 5 ) \mathcal{F}(\lambda_l)=\widehat f(\lambda_l)=\sum_{i=1}^N f(i)*u_l(i) \quad\quad\quad(5) F(λl)=f (λl)=i=1Nf(i)ul(i)(5)

    其中, λ l \lambda_l λl 为图拉普拉斯算子第 l l l 个特征值, u l u_{l} ul 为第 l l l 个特征值对应的特征向量,公式(5)是
    λ l \lambda_{l} λl 对应的傅立叶变换,对于图拉普拉斯算子,具有 N N N个特征值,将式 (5) 全部分量展开可得:
    ( f ^ ( λ 1 ) f ^ ( λ 2 ) ⋮ f ^ ( λ N ) ) = ( u 1 ( 1 ) u 1 ( 2 ) … u 1 ( N ) u 2 ( 1 ) u 2 ( 2 ) … u 2 ( N ) ⋮ ⋮ ⋱ ⋮ u N ( 1 ) u N ( 2 ) … u N ( N ) ) ( f ( 1 ) f ( 2 ) ⋮ f ( N ) ) ( 6 ) \left(\begin{array}{c} \hat{f}\left(\lambda_{1}\right) \\ \hat{f}\left(\lambda_{2}\right) \\ \vdots \\ \hat{f}\left(\lambda_{N}\right) \end{array}\right)=\left(\begin{array}{cccc} u_{1}(1) & u_{1}(2) & \dots & u_{1}(N) \\ u_{2}(1) & u_{2}(2) & \dots & u_{2}(N) \\ \vdots & \vdots & \ddots & \vdots \\ u_{N}(1) & u_{N}(2) & \dots & u_{N}(N) \end{array}\right)\left(\begin{array}{c} f(1) \\ f(2) \\ \vdots \\ f(N) \end{array}\right) \quad\quad\quad(6) f^(λ1)f^(λ2)f^(λN)=u1(1)u2(1)uN(1)u1(2)u2(2)uN(2)u1(N)u2(N)uN(N)f(1)f(2)f(N)(6)

    将公式(6)写成矩阵形式即为:
    f ^ = U T f ( 7 ) \widehat f=U^{T}f \quad\quad\quad (7) f =UTf(7)
    此处 U U U为拉普拉斯谱分解的正交矩阵。

    最后再来看看图中拉普拉斯算子的定义:
    L = D − W ( 8 ) L=D-W \quad\quad\quad (8) L=DW(8)
    其中 W W W是邻接矩阵, D D D是度矩阵, D i , i D_{i,i} Di,i等于 W W W矩阵的第 i i i行的和,非对角线上元素为0, D D D是个对角矩阵,这个图谱理论关于图拉普拉斯算子的的定义。详细推到过程参考:图拉普拉斯算子为何定义为D-W

    拉普拉斯矩阵是实对称矩阵,实对称矩阵一定可以用正交矩阵进行正交相似对角化(特征分解):

    L = U ( λ 1 ⋱ λ N ) U − 1 = U ( λ 1 ⋱ λ N ) U T ( 9 ) L=U\left(\begin{array}{ccc} \lambda_{1} & & \\ & \ddots & \\ & & \lambda_{N} \end{array}\right) U^{-1} =U\left(\begin{array}{ccc} \lambda_{1} & & \\ & \ddots & \\ & & \lambda_{N} \end{array}\right) U^{T} \quad\quad\quad (9) L=Uλ1λNU1=Uλ1λNUT(9)

    U U U 为特征向量构成的正交矩阵,而正交矩阵的逆等于正交矩阵的转置: U − 1 = U T U^{-1}=U^T U1=UT

    假定 λ 1 , ⋯   , λ n \lambda_{1},\cdots,\lambda_{n} λ1,,λn 从小到大排序,其对应的特征向量为 u 1 , ⋯   , u n u_1,\cdots, u_n u1,,un,特征值越小,对应的特征向量越平稳,这和傅立叶变换中频率的定义是类似的。下图是对 random sensor network 做特征值分解后的特征向量分布展示,可以看到特征值越小,对应的特征向量越平滑。

    图上傅里叶逆变换

    有了傅立叶变换,如何将频率函数变换为时域函数呢?这是傅立叶逆变换需要干的事情,公式如下:

    F − 1 [ F ( w ) ] = 1 2 π ∫ F ( w ) e − i w t d w ( 10 ) \mathcal{F}^{-1}[\mathcal{F}(w)]=\frac{1}{2\pi}\int \mathcal{F}(w)e^{-iwt}dw \quad\quad\quad(10) F1[F(w)]=2π1F(w)eiwtdw(10)

    公式(10)和公式(1)类似,差一个常数系数。公式(1)积分之后是一个关于 w w w 的函数,公式(10) 对 w w w 积分后是关于 t t t 的函数,从频域变换到了时域,图上傅立叶变换类似为:
    ( f ( λ 1 ) f ( λ 2 ) ⋯ f ( λ N ) ) = ( u 1 ( 1 ) u 1 ( 2 ) … u 1 ( N ) u 1 ( 1 ) u 1 ( 2 ) … u 1 ( N ) ⋯ … … u 1 ( 1 ) u 1 ( 2 ) … u 1 ( N ) ) ( f ^ ( λ 1 ) f ^ ( λ 2 ) … f ^ ( λ N ) ) ( 11 ) \left(\begin{array}{c} f\left(\lambda_{1}\right) \\ f\left(\lambda_{2}\right) \\ \cdots \\ f\left(\lambda_{N}\right) \end{array}\right)=\left(\begin{array}{cccc} u_{1}(1) & u_{1}(2) & \dots & u_{1}(N) \\ u_{1}(1) & u_{1}(2) & \dots & u_{1}(N) \\ \cdots & \dots & & \dots \\ u_{1}(1) & u_{1}(2) & \dots & u_{1}(N) \end{array}\right)\left(\begin{array}{c} \hat{f}\left(\lambda_{1}\right) \\ \hat{f}\left(\lambda_{2}\right) \\ \dots \\ \hat{f}\left(\lambda_{N}\right) \end{array}\right) \quad\quad\quad (11) f(λ1)f(λ2)f(λN)=u1(1)u1(1)u1(1)u1(2)u1(2)u1(2)u1(N)u1(N)u1(N)f^(λ1)f^(λ2)f^(λN)(11)

    写成矩阵形式:
    f = U U − 1 f = U U T f = U f ^ ( 12 ) f=\mathbf{U} \mathbf{U}^{-1} f=\mathbf{U} \mathbf{U}^{T} f=\mathbf{U} \hat{f}\quad\quad\quad (12) f=UU1f=UUTf=Uf^(12)

    上述内容详述了如何在图中进行傅里叶变换和逆变换,下面就是主角图卷积网络GCN上场了!

    下篇更新的文章将讲述三代图卷积网络的前世今生!

    关注作者

    展开全文
  • 在网上看到很多关于傅里叶变换的内容, 但是没找到具体工程上完整的一个例子例如把一个纹理转化为频谱图相位 然后利用频谱相位在转化回来于是就自己做一个好了如果有不对之处请使劲喷然后如果你比较熟悉只想看...
  • C语言做快速傅里叶变换和快速逆傅里叶变换 快速傅里叶变换(FFT)快速逆傅里叶变换(IFFT)要求做傅里叶变换的数据点数只能是2的整数次幂,比如2,4,8,16,32,64,128,256,512,1024,2048,.......如果是2000...
  • 文章目录(1)傅里叶变换(2)Graph上的傅里叶变换(3)Graph上的傅里叶逆变换总结二、为什么拉普拉斯矩阵的特征向量可以作为傅里叶变换的基?特征值表示频率?(1)为什么拉普拉斯矩阵的特征向量可以作为傅里叶变换的基?(2...
  • 使用python 进行音频信号处理 <1> 本篇文章主要记录了使用python进行短时傅里叶变换,...在这篇文章中我们主要运用了短时傅里叶变换,要想清楚地理解短时傅里叶变换,首先必须要了解离散傅里叶变换(Discret...
  • Matlba实现傅里叶变换及其逆变换

    千次阅读 2019-07-30 17:14:23
    傅立叶变换是一种分析信号的方法,它可分析信号的成分,也可用这些成分合成信号。许多波形可作为信号的成分,比如正弦波、方波、锯齿波等,傅立叶变换用正弦波作为信号的成分。此处用matlab进行实现。 1.其变换与...
  • 二维离散傅里叶变换与逆变换的原理与实现(Matlab)

    万次阅读 多人点赞 2020-03-20 20:52:30
    我们已经知道一维噪声可以用一维傅里叶变换到频域滤波,同理二维噪声也可以用二维傅里叶变换到"频率滤波"。 二维傅里叶变换的原理 笔者很讨厌一上来就看到一连串复杂的公式!因此当我看懂一个原理后,我就会用最好...
  • 我们已经知道一维噪声可以用一维傅里叶变换到频域滤波,同理二维噪声也可以用二维傅里叶变换到"频率滤波"。二维傅里叶变换的原理笔者很讨厌一上来就看到一连串复杂的公式!因此当我看懂一个原理后,我就会用最好...
  • 用MATLAB实现图像的傅里叶变换.ppt

    千次阅读 2021-04-18 14:46:18
    用MATLAB实现图像的傅里叶变换3.1 二维离散傅里叶变换(DFT) 3.1.1 二维连续傅里叶变换 二维连续函数 f (x, y)的傅里叶变换定义如下: 设 是独立变量 的函数,且在 上绝对可积,则定义积分 为二维连续函数 的付里叶...
  • 傅立叶变换和逆变换

    万次阅读 2019-08-06 15:03:18
    参考 https://blog.csdn.net/Eastmount/article/details/89645301 ... 1.cv2.dft(进行傅里叶变化) cv2.dft(img, cv2.DFT_COMPLEX_OUTPUT) 进行傅里叶变化 参数说明: img表示输入的图片, ...
  • 图像傅里叶变换与逆变换OpenCV实现

    千次阅读 2018-03-13 21:10:57
    傅里叶逆变换-&gt;读取图像 int main() { cv::Mat img = cv::imread("lena.jpg"); DFTtransform(img); cv::imshow("DFT img", img); cv::waitKey(); system("pause"); ...
  • 看到论坛有一个朋友提问为什么傅里叶变换可以将时域变为频域? 这个问题真是问到了灵魂深处。 在这我只能简单讲讲我的理解,要深刻理解翻信号处理教科书是最好的方法。 1. 如何描述信号 我们常常用数学模型去抽象...
  • 傅里叶变换 ~ 什么是傅里叶变换

    千次阅读 2019-10-07 13:11:37
    2、傅里叶变换的逆变换容易求出,而且形式与正变换非常类似; 3、正弦基函数是微分运算的本征函数,从而使得线性微分方程的求解可以转化为常系数的代数方程的求解.在线性时不变杂的卷积运算为简单的乘积运算,从而...
  • 接下来我们验证一下离散傅里叶逆变换的正确性 F − 1 F f ‾ [ n ] = 1 N ∑ m = 0 N − 1 F f ‾ [ m ] e 2 π i m n N = 1 N ∑ m = 0 N − 1 ∑ k = 0 N − 1 f ‾ [ k ] e − 2 π i m k N e 2 π i m n N = 1...
  • 从一维连续Fouier变换和逆变换公式推导一维离散Fourier变换和逆变换公式,并对得到的公式进行系数修正。
  • 一、序列傅里叶变换与反变换、 二、序列绝对可 与 存在傅里叶变换之间的关系、 三、序列傅里叶变换性质
  • 卷积定理:函数卷积的傅里叶变化是函数傅里叶变化的乘积,即对于函数f(t)与h(t)两者的卷积是其函数傅里叶变换乘积的逆变换: 类比到Graph上并把傅里叶变换的定义带入,f与卷积核h在Graph上的卷积可以由下面步骤得到...
  • 快速傅里叶变换(FFT)和逆快速傅里叶变换(IFFT)

    万次阅读 多人点赞 2019-03-09 01:12:28
    傅里叶变换中所有的 n 都为 2 的整数次幂 我们的目标是将系数表示法转换成点值表示法,如果随机选取 n n n 个点,再计算出它对应的 f ( x ) f(x) f ( x ) ,时间复杂度为 O(n 2 ),因为对每个点都需要求 n n n ...
  • 本文主要介绍了傅里叶变换在机器视觉方面上的原理以及应用实例
  • 这时候我们就需要拿出来我们的黑科技——傅里叶变换。一、傅里叶级数的推广当然这东西肯定不是凭空脑补出来的,而是将傅里叶级数进一步推广到非周期函数上。现在已经得到了周期函数的情况,一种很自然的想法就是将非...
  • 序列的Z变换和逆Z变化

    千次阅读 2019-07-27 22:53:05
    序列的Z变化针对的是非周期发散的序列或者收敛性不确定的序列,序列x(n)的双边z变换为n从负无穷到正无穷对x(n)*z的-n次方求和,单边z变换是从0到正无穷积分...z变换的存在条件是级数绝对可,书上49页上面有公式 ...
  • 傅里叶变换的意义理解(通俗易懂)

    千次阅读 多人点赞 2021-02-21 16:53:01
    傅里叶分析不仅仅是一个数学工具,更是一种可以彻底颠覆一个人以前世界观的思维模式。但不幸的是,傅里叶分析的公式看起来太复杂了,所以很多大一新生上来就懵圈并从此对它深恶痛绝。老实说,这么有意思的东西居然成...
  • 点击上方蓝字关注我吧傅里叶变换是将图像从空间域转换到频率域,首先把图像波段转换成一系列不同频率的二维正弦波傅里叶图像;然后,在频率域内对傅里叶图像进行滤波、掩膜等各种操作,减少或者消除部分高频或低频...
  • 今天复习了一下连续傅里叶变换和离散傅里叶变换的关系。 定义一个间隔为a的无限冲激序列串函数S(ta)=∑n=−∞∞δ(na−t)=∑n=−∞∞δ(a(n−ta))=∑n=−∞∞1aδ(n−ta)S(\frac{t}{a})=\sum_{n=-\infty}^{\infty}\...
  • 刚刚写过一篇用MATLAB实现离散傅里叶级数的博文,如下:离散傅里叶变换不是一种神奇的东西,它离散傅里叶级数关系很紧密,紧密到使用MATLAB编写离散傅里叶变换以及逆变换的函数一模一样,只需改个名字即可。...
  • 傅里叶逆变换常用的就可以了 问题是我找不到教材书了啊 大概最常用的输10个左右就ok了连续傅里叶变换 一般情况下,若“傅立叶变换”一词的前面未加任何限定语,则指的是“连续傅里叶变换”。“连续傅里叶变换”将...
  • 关于傅里叶级数(一般、指数、广义)、傅里叶变换、离散时间傅里叶变换傅里叶变换的一个补充说明 傅里叶级数 傅里叶级数定义式为: 这个定义是我们在大学里学的。你们还记得这个级数什么时候收敛吗?比如说,一...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 5,962
精华内容 2,384
关键字:

傅里叶变换和逆变换定义是

友情链接: stereo-matching.zip