-
2021-04-01 15:00:56
傅里叶变换
傅氏变换的目的是讲函数整体从空域变换到频域,以便于作分析。它本身是一种线性变换。
F ( μ ) = ∫ − ∞ + ∞ f ( t ) ∗ e − 2 π μ t d t F(\mu)=\int_{-\infty}^{+\infty} f(t)*e^{-2\pi\mu t}dt F(μ)=∫−∞+∞f(t)∗e−2πμtdt
或者说
F ( μ ) = ∫ − ∞ + ∞ f ( t ) e 2 π μ t d t F(\mu)=\int_{-\infty}^{+\infty} \frac{f(t)}{e^{2\pi\mu t}}dt F(μ)=∫−∞+∞e2πμtf(t)dt
很形象的说明了是讲函数整体,积分区域 ( − ∞ , + ∞ ) (-\infty ,+\infty) (−∞,+∞),分配到了频域上的单位圆 e 2 π μ t e^{2\pi\mu t} e2πμt
傅里叶反变换就很容易得出是
f ( t ) = ∫ − ∞ + ∞ F ( μ ) ∗ e 2 π μ t d μ f(t)=\int _{-\infty}^{+\infty} F(\mu)*e^{2\pi \mu t}d \mu f(t)=∫−∞+∞F(μ)∗e2πμtdμ二维的傅里叶变换通过控制变量将二维空间的计算转化为一维的傅里叶变换。
在计算机中只能使用离散的傅里叶变换。通常离散傅里叶变换都通过信号采样引入,而信号采样的原理又迈不开冲激函数和香浓定理。
冲激函数
冲击函数是一个无限长而又无限窄的函数,它只在 f ( 0 ) f(0) f(0)处不等于 0 0 0而在其他地方为 0 0 0
它具有 ∫ − ∞ + ∞ f ( x ) d x = 1 \int _{-\infty}^{+\infty}f(x)dx=1 ∫−∞+∞f(x)dx=1的特性。很显然用冲击函数去对一个函数做内积只会得到函数在冲击点的值。冲击串
关于函数的取样,使用一个冲激函数获取一个冲击点的函数值。要对整个函数进行取样自然要采用一系列的冲激函数。通过对冲激函数进行一系列的等间隔平移操作,我们可以得到一个冲击串。
对函数取样时需要遵循香农定理,否则不能保证取样的函数能进行复原。对于没有周期的函数可以看做该函数的周期为无限大
离散傅里叶变换
离散傅里叶变换处理的是经过冲击串处理的一系列离散值,此刻积分符号不再适用应该改为累加符号。
F ( μ ) = ∑ i = 0 N − 1 f ( i ) ∗ e − 2 π μ i F(\mu)=\sum _{i=0}^{N-1}f(i)*e^{-2\pi \mu i} F(μ)=∑i=0N−1f(i)∗e−2πμi
二维离散傅里叶变换的处理思路与二维连续傅里叶变换相同,不再赘述。卷积公式
一维连续: f ⋆ h ( x ) = ∫ − ∞ ∞ f ( τ ) h ( τ − x ) d τ f\star h(x)=\int_{-\infty}^{\infty}f(\tau)h(\tau-x)d\tau f⋆h(x)=∫−∞∞f(τ)h(τ−x)dτ
一维离散: f ⋆ h ( x ) = ∑ m = 0 M − 1 f ( m ) h ( x − m ) , x = 0 , 1 , 2 , . . . M − 1 f\star h(x)=\sum_{m=0}^{M-1}f(m)h(x-m),\quad x=0,1,2,...M-1 f⋆h(x)=m=0∑M−1f(m)h(x−m),x=0,1,2,...M−1
二维离散: f ⋆ h ( x , y ) = ∑ m = 0 M − 1 ∑ n = 0 N − 1 f ( m , n ) h ( x − m , y − n ) f\star h(x,y)=\sum_{m=0}^{M-1}\sum_{n=0}^{N-1}f(m,n)h(x-m,y-n) f⋆h(x,y)=m=0∑M−1n=0∑N−1f(m,n)h(x−m,y−n)
x = 0 , 1 , 2... M − 1 x=0,1,2...M-1 x=0,1,2...M−1
y = 0 , 1 , 2... N − 1 y=0,1,2...N-1 y=0,1,2...N−1这里补充一下卷积定理,以及部分的推导。
卷积定理
连续 离散 f ⋆ h ( t ) ↔ F ∗ H ( μ ) f\star h(t) \leftrightarrow F*H(\mu) f⋆h(t)↔F∗H(μ) f ⋆ h ( t ) ↔ F ∗ H ( μ ) f\star h(t) \leftrightarrow F*H(\mu) f⋆h(t)↔F∗H(μ) F ⋆ H ( μ ) ↔ f ∗ h ( t ) F\star H(\mu) \leftrightarrow f*h(t) F⋆H(μ)↔f∗h(t) f ∗ h ( t ) ↔ F ⋆ H ( μ ) 1 M f*h(t) \leftrightarrow F\star H(\mu)\frac{1}{M} f∗h(t)↔F⋆H(μ)M1 f ⋆ h ( x , y ) ↔ F ∗ H ( u , v ) f\star h(x,y)\leftrightarrow F*H(u,v) f⋆h(x,y)↔F∗H(u,v) f ⋆ h ( x , y ) ↔ F ∗ H ( u , v ) f\star h(x,y) \leftrightarrow F*H(u,v) f⋆h(x,y)↔F∗H(u,v) F ⋆ H ( u , v ) ↔ f ∗ h ( x , y ) F\star H(u,v) \leftrightarrow f*h(x,y) F⋆H(u,v)↔f∗h(x,y) f ∗ h ( x , y ) ↔ F ⋆ H ( u , v ) 1 M N f*h(x,y) \leftrightarrow F\star H(u,v)\frac{1}{MN} f∗h(x,y)↔F⋆H(u,v)MN1 F { f ⋆ h ( x ) } \mathfrak{F}\lbrace f\star h(x)\rbrace F{f⋆h(x)}
= ∑ x = 0 M − 1 ∑ t = 0 M − 1 f ( t ) h ( x − t ) e − j 2 π x / m =\sum_{x=0}^{M-1}\sum_{t=0}^{M-1}f(t)h(x-t)e^{-j2\pi x/m} =∑x=0M−1∑t=0M−1f(t)h(x−t)e−j2πx/m
= ∑ t = 0 M − 1 f ( t ) H ( u ) e − j 2 π t / m =\sum_{t=0}^{M-1}f(t)H(u)e^{-j2\pi t/m} =∑t=0M−1f(t)H(u)e−j2πt/m
= F ( u ) H ( u ) =F(u)H(u) =F(u)H(u)更多相关内容 -
图像傅里叶变换:从空域转换到频域(包含频谱图分析、简单带阻滤波器理解)
2021-10-21 10:27:101、图像空域到频域的转换 以下内容来自BILIBILI的一个非常棒的视频:《P04 图像的快速傅里叶变换及其应用,作者:flybirdAI》 说明:图像和公式来自此视频中的截图,此视频讲的非常的好,清晰明了,对于空域到频域...2021年10月21日10:24:05
占坑,这周五图像处理课讲完PPT后填。
2021年10月22日21:07:55 -> 讲课完毕数字图像处理、图像恢复,噪声去除PPT
图像处理课课件,包含图像恢复、噪声去除部分内容及相关注解 链接: https://pan.baidu.com/s/1wBfXM0ZrSw3O221GUShVtw 密码: 424w --来自百度网盘超级会员V5的分享
分割线
说明:在准备课件上台讲解的时候,为去除周期性噪声,需在频域上进行操作;所以在网上查看了许多视频博客知乎等,有了初步的理解,现在将收集的资料整理出来,并发布到博客,在网上参考的地方,我会一一给出参考,方便其它同学快速理解将图像从空域到频域转换的这个过程,也提供一些比较好的博文及视频,希望能对你有参考作用!
1、图像空域到频域的转换以下内容来自BILIBILI的一个非常棒的视频:《P04 图像的快速傅里叶变换及其应用,作者:flybirdAI》
说明:图像和公式来自此视频中的截图,此视频讲的非常的好,清晰明了,对于空域到频域的转换,不涉及代码的话看前28分钟就足够了!
频域变换一般过程:
原图->DFT/FFT(正变换)->中心化->频域显示(处理)->去中心化->IDFT/IFFT(反变换)->原图
图像高频:亮度或灰度变化激烈的部分,如边缘和轮廓
图像低频:变化不大或变化较为平缓的地方,如大块的结构DFT(离散傅里叶变换):Discrete Fourier transform
FFT(快速傅里叶变换):Fast Fourier transform二维图像(M行N列)
正变换:
F ( u , v ) = ∑ x = 0 M − 1 ∑ y = 0 N − 1 f ( x , y ) e − j 2 π ( u x / M + v y / N ) F(u, v)=\sum_{x=0}^{M-1} \sum_{y=0}^{N-1} f(x, y) e^{-j 2 \pi(u x / M+v y / N)} F(u,v)=x=0∑M−1y=0∑N−1f(x,y)e−j2π(ux/M+vy/N)反变换: 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 ) f(x, y)=\frac{1}{M N} \sum_{u=0}^{M-1} \sum_{v=0}^{N-1} F(u, v) e^{j 2 \pi(u x / M+v y / N)} f(x,y)=MN1u=0∑M−1v=0∑N−1F(u,v)ej2π(ux/M+vy/N)
其中下式为欧拉公式:
e j θ = cos ( θ ) + j sin ( θ ) e^{j \theta}=\cos (\theta)+j \sin (\theta) ejθ=cos(θ)+jsin(θ)频域分析就是对F(u,v)进行操作:
由于共轭对称性:可对FFT变换的结果再进行FFT变换得到IFFT(I指的是反变换,IFFT反快速傅里叶变换,将图像从频域转换到空域)注:傅里叶谱通过对log(1+F|(u,v)|)表示,另外自行频率分析时,也往往将频率窗口移动窗口中心处。
FFT还可以做卷积:
- 将图像和卷积模板都进行正变换到频率域
- 将两者在再频域直接进行相乘运算
- 再反变换到空间域作为输出
频域变换过程时刻牢记下图:
分割线如果深入理解后,可以观看3Blue1Brown的视频:【官方双语】形象展示傅里叶变换
2、代码实现傅里叶变换代码:【原文博客:python的numpy库和cv2库实现图像傅里叶变换】
# writer:wojianxinygcl@163.com # date : 2020.3.30 # 原文地址 : https://www.cnblogs.com/wojianxin/p/12530172.html import cv2 import numpy as np from matplotlib import pyplot as plt def fft_cv(img): """ 用cv进行傅里叶变换 :param img: :return: """ # 傅里叶变换 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])) # 傅里叶逆变换 ishift = np.fft.ifftshift(dftshift) iimg = cv2.idft(ishift) res2 = cv2.magnitude(iimg[:, :, 0], iimg[:, :, 1]) # 显示图像 plt.subplot(131), plt.imshow(img, 'gray'), plt.title('Original Image') plt.axis('off') plt.subplot(132), plt.imshow(res1, 'gray'), plt.title('Fourier Image') plt.axis('off') plt.subplot(133), plt.imshow(res2, 'gray'), plt.title('Inverse Fourier Image') plt.axis('off') plt.show() def fft_numpy(img): """ 用numpy对图像进行傅里叶变换 """ # 傅里叶变换 f = np.fft.fft2(img) fshift = np.fft.fftshift(f) res = np.log(np.abs(fshift)) # 傅里叶逆变换 ishift = np.fft.ifftshift(fshift) iimg = np.fft.ifft2(ishift) iimg = np.abs(iimg) # 展示结果 plt.subplot(131), plt.imshow(img, 'gray'), plt.title('Original Image') plt.axis('off') plt.subplot(132), plt.imshow(res, 'gray'), plt.title('Fourier Image') plt.axis('off') plt.subplot(133), plt.imshow(iimg, 'gray'), plt.title('Inverse Fourier Image') plt.axis('off') plt.show() if __name__ == '__main__': # 读取图像 img = cv2.imread('LENA256.BMP', 0) # 读取灰度图 fft_numpy(img) # 使用numpy进行变换 # fft_cv(img) # 使用cv进行变化
Lena标准测试图: https://pan.baidu.com/s/1FGAYFsNaPR7XuKbL6aTnhQ 密码: m19a --来自百度网盘超级会员V5的分享
结果:
3、如何分析频谱图,知识点总结:参考以下博客:
我的总结:
1.图2是转换到频域二维可视化的结果,称作频谱图
2.由于频谱动态范围很大,所以用log变换降低频谱的动态范围
3.图1为空域:f(x, y) , 图2为频域:H(u, v),中心化之后的结果,频谱图的正中心点为H(0,0),图像大小与原图相同
4.图1和图2相同位置的点没啥直接的对应关系,右边的每一个点可以理解为所描述的是一种平面波,它是构成左边图无数个波面中的一个,它与左边的每一个点都相关
一个曲面可以有很多个正弦平面波组成,二维正弦平面波,可以用以下4个参数来描述它:频率、幅度、相位、方向
所有波都可以用多个正弦波叠加;波又可以通过频率、幅值和方向来表示(频谱图中相位信息被舍弃)
5.图2中的每一个点:
它到中点的距离描述的是频率
中点到它的方向是构成平面波的方向
那一点的灰度值描述的是它的幅值6.频谱图里面描述的信息有:频率f,振幅A,方向n
7.每一个频谱图中的点它不是实数,是一个虚数,a+bi,为二维可视化,计算的是它的绝对值
8.点点越亮代表这个数值越大,点点越暗代表这个数值越小(幅值的大小)
2021年11月02日16:35:09===========================带通/带阻滤波器===========================带通/带阻滤波器
如下图所示,左图是被周期性正弦噪声所污染的图像,右图是去噪后的结果,想要在空域去除这样的噪声是很困难的,但是在频域上确能很轻松的进行操作。
带阻滤波器可以移除图像中特定的频率范围,从而很轻松的去除周期性噪声。
简单解释带阻滤波器以及带通滤波器:
- 带阻滤波器:带阻,阻就是阻止,阻止特定的频率范围通过
- 带通滤波器:带通,通就是通过,只允许特定的频率范围通过
由上简单的定义可知,带阻滤波器和带通滤波器可以相互转换,是一种互补的关系,带阻滤波器取反就是带通滤波器,带通滤波器取反就是带阻滤波器。
理想的带阻滤波器定义如下:
H ( u , v ) = { 1 if D ( u , v ) < D 0 − W 2 0 if D 0 − W 2 ≤ D ( u , v ) ≤ D 0 + W 2 1 if D ( u , v ) > D 0 + W 2 H(u, v)=\left\{\begin{array}{ll} 1 & \text { if } D(u, v)<D_{0}-\frac{W}{2} \\ 0 & \text { if } D_{0}-\frac{W}{2} \leq D(u, v) \leq D_{0}+\frac{W}{2} \\ 1 & \text { if } D(u, v)>D_{0}+\frac{W}{2} \end{array}\right. H(u,v)=⎩⎨⎧101 if D(u,v)<D0−2W if D0−2W≤D(u,v)≤D0+2W if D(u,v)>D0+2W
【参考博客】:数字图像处理与python实现-带通滤波器
带阻滤波器,如下图3(第二排第一个),理想的带阻滤波器的定义如上,D(u,v)为频域中任意一点到中心点的距离,D0代表带阻滤波器的半径(从中心到带阻滤波器第一个内圈和第一个外圈之间的中间位置),W代表带阻滤波器的带宽(内圈到外圈的距离),上述公式代表的就是带阻滤波器,含义就是带阻滤波器带宽范围内的部分:不允许它通过,带阻滤波器带宽范围外的地方保持不变,可视化的结果如下图3。
图像从上到下,从左到右分别表示图1:周期性正弦噪声污染的图像;图2:图1转换的频域的结果;图3:理想带阻滤波器;图4:在频域去除周期性噪声后转换到空域的结果如何使用带阻滤波器
- 将图像1转换到频域,如图2,图1周期性正弦噪声在频域可视化的结果,表现在图2上就是围绕中心一圈分布均匀亮亮的8个小点点
- 去掉周期性噪声,就是去掉这些小点点
- 设计合适的带阻滤波器,如图3,黑色部分设为0,白色部分设为1,与图2的大小相同,两幅图像进行哈达玛积(对应点相乘)->得到结果(带阻滤波器带宽上的点都被置为0了,周期性噪声点在带宽内也被置为0,消除掉了)
- 然后将第三步去噪后的结果,通过IFFT反快速傅里叶变换还原到空域,得到最终结果图4
-
Opencv实现傅里叶变换
2020-12-25 20:47:22傅里叶变换将图像分解成其正弦和余弦分量,它将图像由空域转换为时域。任何函数都可以近似的表示为无数正弦和余弦函数的和,傅里叶变换就是实现这一步的,数学上一个二维图像的傅里叶变换为: 公式中,f是图像... -
最详细的图像傅里叶变换
2022-05-04 10:41:50图像傅里叶变换的理解1. 傅里叶变换理论层面理解2. 常见频谱图3. 傅里叶变换在图像中的应用 1. 傅里叶变换理论层面理解 数学意义:傅里叶变换将一个任意的周期函数分解成为无穷个正弦函数的和的形式 物理效果:傅里叶...图像傅里叶变换的理解
1. 傅里叶变换理论层面理解
数学意义:
傅里叶变换将一个任意的周期函数分解成为无穷个正弦函数的和的形式
物理效果:
傅里叶变换实现了将信号从空间域到频率域的转换
信号分析:
一维傅里叶变换(将杂乱的信号由时域转化到频域中)一维傅里叶变化是将信号分解为正弦波的和的形式时域
横轴是时间,纵轴是振幅
频域
横轴是频率,纵轴是振幅
对一个信号做时域到频域的变换,能够清除看到该信号主要由两个正弦波以及一些噪声混合,如下图所示:
将有效的信号频率提取并分离拟合出信号信息,然后将噪声过滤掉,得到滤波结果
频谱图:
二维傅里叶变换 (原图中的像素值是x,y坐标轴下的(即空间域),而傅立叶变换后的像素值是u,v坐标轴下的(即频域)),二维傅里叶变换可以将一个二维信号(图像)分解为三角平面波之和的形式
二维信号的离散傅里叶变换所得到的结果的频率成分的分布如下所示:
在经过频谱居中后的频谱中,中间最亮的点是最低频率,属于直流分量(DC分量)。越往边外走,频率越高。所以,频谱图中的四个角和X,Y轴的尽头都是高频(未经过频谱居中的相反)
二维离散傅里叶变换的作用:可以将空间域(二维灰度数表)的图像转换到频域(频率数表),使得更直观地观察和处理图像,也更有利于进行频域滤波等操作。一副图像(不论是灰度的图像还是彩色图像)所提供的信息都是显而易见的(排除一些本身就很抽象的图片,不搞艺术哈哈哈)。然而,一副图像的傅里叶频谱图,却常常让人难以理解,满脸问号,一脸蒙B。
2. 常见频谱图
单色图
只有一种颜色
正弦波
分析:频率越低对称的频点越靠近频谱中心,随着频率增加远离中心(因为中心是低频,两端为高频)灰度变化
分析:图像灰度变化方向体现在频谱图的方向中根据上面两个信息可以得到下面结果:
常见几何形状
分析:还是和上面讲解的一样,频谱图的绘制规律是朝着梯度变化的方向改变的这边可以这样理解傅里叶变换:
第一种理解:
二维图像进行傅里叶变化得到的频谱图(图像梯度的分布图),当然频谱图上的各点与原图像各点并不存在一一对应关系,即使在不移频的情况下也不对应。傅里叶频谱图上看到的明亮不一的亮点,实际上图像上某一点的像素灰度值与它的邻域点差异的强弱,即梯度的大小,也即该点的频率的大小(也可以这么理解,低频部分指低梯度的点,高频部分指高梯度的点)。
另一种理解:
图像二维频谱图通过对输入图像进行水平和竖直两个方向的所有扫描线的一维傅立叶变换进行叠加得到,用来表示输入图像的频率分布。
频谱图以图像的中心为圆心,圆的相位对应原图中频率分量的相位,半径对应频率高低。低频部分半径小,高频对应的半径较大,中心为直流分量(图像灰度的平均值),某点的灰度值对应该频率的能量高低。3. 傅里叶变换在图像中的应用
Opencv中的
傅里叶变换
实现
实现步骤:- getOptimalDFTSize()函数得到DFT变换后结果的最优尺寸大小
- 根据得到的尺寸大小,使用copyMakeBorder()函数填充图像,得到填充后的Mat
- 根据新生成的Mat,使用merge()函数得到一个双通道的Mat,命名为planes
- 使用dft()函数进行傅里叶变换,得到通道1为实部,通道2为虚部
实现代码如下所示:
image.convertTo(image, CV_32F); vector<Mat> channels; split(image, channels); //分离RGB通道 Mat image_B = channels[0]; //选取最适合做fft的宽和高 int m1 = getOptimalDFTSize(image_B.rows); int n1 = getOptimalDFTSize(image_B.cols); Mat padded; //填充 copyMakeBorder(image_B, padded, 0, m1 - image_B.rows, 0, n1 - image_B.cols, BORDER_CONSTANT, Scalar::all(0)); Mat planes[] = { Mat_<float>(padded), Mat::zeros(padded.size(), CV_32F) }; Mat complexI; merge(planes, 2, complexI); //planes[0], planes[1]是实部和虚部 dft(complexI, complexI, DFT_SCALE | DFT_COMPLEX_OUTPUT); split(complexI, planes); //定义幅度谱和相位谱 Mat ph, mag, idft; phase(planes[0], planes[1], ph); magnitude(planes[0], planes[1], mag); //由实部planes[0]和虚部planes[1]得到幅度谱mag和相位谱ph //重新排列傅里叶图像中的象限,使得原点位于图像中心 int cx = mag.cols / 2; int cy = mag.rows / 2; Mat q0(mag, Rect(0, 0, cx, cy)); //左上角图像划定ROI区域 Mat q1(mag, Rect(cx, 0, cx, cy)); //右上角图像 Mat q2(mag, Rect(0, cy, cx, cy)); //左下角图像 Mat q3(mag, Rect(cx, cy, cx, cy)); //右下角图像 //变换左上角和右下角象限 Mat tmp; q0.copyTo(tmp); q3.copyTo(q0); tmp.copyTo(q3); //变换右上角和左下角象限 q1.copyTo(tmp); q2.copyTo(q1); tmp.copyTo(q2); imshow("mag", mag);
实现结果如下所示:
傅里叶逆变换:
//傅里叶逆变换 polarToCart(mag, ph, planes[0], planes[1]); //由幅度谱mag和相位谱ph恢复实部planes[0]和虚部planes[1] merge(planes, 2, idft); dft(idft, idft, DFT_INVERSE | DFT_REAL_OUTPUT); image_B = idft(Rect(0, 0, image.cols & -2, image.rows & -2)); image_B.copyTo(channels[0]); merge(channels, image); image.convertTo(image, CV_8U);
傅里叶逆变换实现结果:
低通滤波
实现机制:将高频的信号舍去;(通低频,阻高频)//低通滤波 for (int i = 0; i < mag.cols; i++){ for (int j = 0; j < mag.rows; j++){ if (abs(i - mag.cols / 2) > mag.cols / 10 || abs(j - mag.rows / 2) > mag.rows / 10) mag.at<float>(j, i) = 0; } }
低通滤波实现结果:
高通滤波
实现机制:将低频的信号舍去;(通高频,阻低频)//高通滤波 for (int i = 0; i < mag.cols; i++){ for (int j = 0; j < mag.rows; j++){ if (abs(i - mag.cols / 2) < mag.cols / 30 && abs(j - mag.rows / 2) < mag.rows / 30) mag.at<float>(j, i) = 0; } }
高通滤波实现结果
-
形象易懂的傅里叶变换、短时傅里叶变换和小波变换
2021-01-21 11:40:00作者丨咚懂咚懂咚@知乎(已授权)来源丨https://zhuanlan.zhihu.com/p/22450818转载丨极市平台导读想要正确的认识小波变换就必须先了解傅里叶变换,本文作...作者丨咚懂咚懂咚@知乎(已授权)
来源丨https://zhuanlan.zhihu.com/p/22450818
转载丨极市平台
导读
想要正确的认识小波变换就必须先了解傅里叶变换,本文作者按照傅里叶-短时傅里叶变换-小波变换的顺序,由浅到深的解释小波变换的缘由以及思路。帮助初学者们深入理解傅里叶变换和小波变换。
从傅里叶变换到小波变换,并不是一个完全抽象的东西,可以讲得很形象。小波变换有着明确的物理意义,如果我们从它的提出时所面对的问题看起,可以整理出非常清晰的思路。
下面我就按照傅里叶-->短时傅里叶变换-->小波变换的顺序,讲一下为什么会出现小波这个东西、小波究竟是怎样的思路。(反正题主要求的是通俗形象,没说简短,希望不会太长不看。。)
一、傅里叶变换
关于傅里叶变换的基本概念在此我就不再赘述了,默认大家现在正处在理解了傅里叶但还没理解小波的道路上。(在第三节小波变换的地方我会再形象地讲一下傅里叶变换)
下面我们主要讲傅里叶变换的不足。即我们知道傅里叶变化可以分析信号的频谱,那么为什么还要提出小波变换?答案就是@方沁园所说的,“对非平稳过程,傅里叶变换有局限性”。看如下一个简单的信号:
做完FFT(快速傅里叶变换)后,可以在频谱上看到清晰的四条线,信号包含四个频率成分。
一切没有问题。但是,如果是频率随着时间变化的非平稳信号呢?
如上图,最上边的是频率始终不变的平稳信号。而下边两个则是频率随着时间改变的非平稳信号,它们同样包含和最上信号相同频率的四个成分。
做FFT后,我们发现这三个时域上有巨大差异的信号,频谱(幅值谱)却非常一致。尤其是下边两个非平稳信号,我们从频谱上无法区分它们,因为它们包含的四个频率的信号的成分确实是一样的,只是出现的先后顺序不同。
可见,傅里叶变换处理非平稳信号有天生缺陷。它只能获取一段信号总体上包含哪些频率的成分,但是对各成分出现的时刻并无所知。因此时域相差很大的两个信号,可能频谱图一样。
然而平稳信号大多是人为制造出来的,自然界的大量信号几乎都是非平稳的,所以在比如生物医学信号分析等领域的论文中,基本看不到单纯傅里叶变换这样naive的方法。
上图所示的是一个正常人的事件相关电位。对于这样的非平稳信号,只知道包含哪些频率成分是不够的,我们还想知道各个成分出现的时间。知道信号频率随时间变化的情况,各个时刻的瞬时频率及其幅值——这也就是时频分析。
二、短时傅里叶变换(Short-time Fourier Transform, STFT)
一个简单可行的方法就是——加窗。我又要套用方沁园同学的描述了,“把整个时域过程分解成无数个等长的小过程,每个小过程近似平稳,再傅里叶变换,就知道在哪个时间点上出现了什么频率了。”这就是短时傅里叶变换。
看图:
时域上分成一段一段做FFT,不就知道频率成分随着时间的变化情况了吗!
用这样的方法,可以得到一个信号的时频图了:
——此图像来源于“THE WAVELET TUTORIAL”
图上既能看到10Hz, 25 Hz, 50 Hz, 100 Hz四个频域成分,还能看到出现的时间。两排峰是对称的,所以大家只用看一排就行了。
是不是棒棒的?时频分析结果到手。但是STFT依然有缺陷。
使用STFT存在一个问题,我们应该用多宽的窗函数?
窗太宽太窄都有问题:
窗太窄,窗内的信号太短,会导致频率分析不够精准,频率分辨率差。窗太宽,时域上又不够精细,时间分辨率低。
(这里插一句,这个道理可以用海森堡不确定性原理来解释。类似于我们不能同时获取一个粒子的动量和位置,我们也不能同时获取信号绝对精准的时刻和频率。这也是一对不可兼得的矛盾体。我们不知道在某个瞬间哪个频率分量存在,我们知道的只能是在一个时间段内某个频带的分量存在。所以绝对意义的瞬时频率是不存在的。)
看看实例效果吧:
——此图像来源于“THE WAVELET TUTORIAL”
上图对同一个信号(4个频率成分)采用不同宽度的窗做STFT,结果如右图。用窄窗,时频图在时间轴上分辨率很高,几个峰基本成矩形,而用宽窗则变成了绵延的矮山。但是频率轴上,窄窗明显不如下边两个宽窗精确。
所以窄窗口时间分辨率高、频率分辨率低,宽窗口时间分辨率低、频率分辨率高。对于时变的非稳态信号,高频适合小窗口,低频适合大窗口。然而STFT的窗口是固定的,在一次STFT中宽度不会变化,所以STFT还是无法满足非稳态信号变化的频率的需求。
三、小波变换
那么你可能会想到,让窗口大小变起来,多做几次STFT不就可以了吗?!没错,小波变换就有着这样的思路。
但事实上小波并不是这么做的(关于这一点,方沁园同学的表述“小波变换就是根据算法,加不等长的窗,对每一小部分进行傅里叶变换”就不准确了。小波变换并没有采用窗的思想,更没有做傅里叶变换。)
至于为什么不采用可变窗的STFT呢,我认为是因为这样做冗余会太严重,STFT做不到正交化,这也是它的一大缺陷。于是小波变换的出发点和STFT还是不同的。STFT是给信号加窗,分段做FFT;而小波直接把傅里叶变换的基给换了——将无限长的三角函数基换成了有限长的会衰减的小波基。这样不仅能够获取频率,还可以定位到时间了~
【解释】
来我们再回顾一下傅里叶变换吧,没弄清傅里叶变换为什么能得到信号各个频率成分的同学也可以再借我的图理解一下。
傅里叶变换把无限长的三角函数作为基函数:
这个基函数会伸缩、会平移(其实本质并非平移,而是两个正交基的分解)。缩得窄,对应高频;伸得宽,对应低频。然后这个基函数不断和信号做相乘。某一个尺度(宽窄)下乘出来的结果,就可以理解成信号所包含的当前尺度对应频率成分有多少。于是,基函数会在某些尺度下,与信号相乘得到一个很大的值,因为此时二者有一种重合关系。那么我们就知道信号包含该频率的成分的多少。
仔细体会可以发现,这一步其实是在计算信号和三角函数的相关性。
看,这两种尺度能乘出一个大的值(相关度高),所以信号包含较多的这两个频率成分,在频谱上这两个频率会出现两个峰。
以上,就是粗浅意义上傅里叶变换的原理。
如前边所说,小波做的改变就在于,将无限长的三角函数基换成了有限长的会衰减的小波基。
这就是为什么它叫“小波”,因为是很小的一个波嘛~
从公式可以看出,不同于傅里叶变换,变量只有频率ω,小波变换有两个变量:尺度a(scale)和平移量 τ(translation)。尺度a控制小波函数的伸缩,平移量 τ控制小波函数的平移。尺度就对应于频率(反比),平移量 τ就对应于时间。
当伸缩、平移到这么一种重合情况时,也会相乘得到一个大的值。这时候和傅里叶变换不同的是,这不仅可以知道信号有这样频率的成分,而且知道它在时域上存在的具体位置。
而当我们在每个尺度下都平移着和信号乘过一遍后,我们就知道信号在每个位置都包含哪些频率成分。
看到了吗?有了小波,我们从此再也不害怕非稳定信号啦!从此可以做时频分析啦!
做傅里叶变换只能得到一个频谱,做小波变换却可以得到一个时频谱!
↑:时域信号
↑:傅里叶变换结果
——此图像来源于“THE WAVELET TUTORIAL”
↑:小波变换结果小波还有一些好处,比如,我们知道对于突变信号,傅里叶变换存在吉布斯效应,我们用无限长的三角函数怎么也拟合不好突变信号:
然而衰减的小波就不一样了:
以上,就是小波的意义。
-----------------------------------------------------------------------------------------------------------
以上只是用形象地给大家展示了一下小波的思想,希望能对大家的入门带来一些帮助。毕竟如果对小波一无所知,直接去看那些堆砌公式、照搬论文语言的教材,一定会痛苦不堪。
在这里推荐几篇入门读物,都是以感性介绍为主,易懂但并不深入,对大家初步理解小波会很有帮助。文中有的思路和图也选自于其中:
1. THE WAVELET TUTORIAL (强烈推荐,点击链接:Ihttp://users.rowan.edu/~polikar/WTtutorial.html)
2. WAVELETS:SEEING THE FOREST AND THE TREES
3. A Really Friendly Guide to Wavelets
4. Conceptual wavelets但是真正理解透小波变换,这些还差得很远。比如你至少还要知道有一个“尺度函数”的存在,它是构造“小波函数”的关键,并且是它和小波函数一起才构成了小波多分辨率分析,理解了它才有可能利用小波做一些数字信号处理;你还要理解离散小波变换、正交小波变换、二维小波变换、小波包……这些内容国内教材上讲得也很糟糕,大家就一点一点啃吧~
------
一些问题的回答:
1. 关于海森堡不确定性原理
不确定性原理,或者叫测不准原理,最早出自量子力学,意为在微观世界,粒子的位置与动量不可同时被确定。但是这个原理并不局限于量子力学,有很多物理量都有这样的特征,比如能量和时间、角动量和角度。体现在信号领域就是时域和频域。不过更准确一点的表述应该是:一个信号不能在时空域和频域上同时过于集中;一个函数时域越“窄”,它经傅里叶变换的频域后就越“宽”。
如果有兴趣深入研究一下的话,这个原理其实非常耐人寻味。信号处理中的一些新理论在根本上也和它有所相连,比如压缩感知。如果你剥开它复杂的数学描述,最后会发现它在本质上能实现其实和不确定性原理密切相关。而且大家不觉得这样一些矛盾的东西在哲学意义上也很奇妙吗?
2. 关于正交化
什么是正交化?为什么说小波能实现正交化是优势?
简单说,如果采用正交基,变换域系数会没有冗余信息,变换前后的信号能量相等,等于是用最少的数据表达最大的信息量,利于数值压缩等领域。JPEG2000压缩就是用正交小波变换。
比如典型的正交基:二维笛卡尔坐标系的(1,0)、(0,1),用它们表达一个信号显然非常高效,计算简单。而如果用三个互成120°的向量表达,则会有信息冗余,有重复表达。
但是并不意味着正交一定优于不正交。比如如果是做图像增强,有时候反而希望能有一些冗余信息,更利于对噪声的抑制和对某些特征的增强。
3. 关于瞬时频率
原问题:图中时刻点对应一频率值,一个时刻点只有一个信号值,又怎么能得到他的频率呢?
很好的问题。如文中所说,绝对意义的瞬时频率其实是不存在的。单看一个时刻点的一个信号值,当然得不到它的频率。我们只不过是用很短的一段信号的频率作为该时刻的频率,所以我们得到的只是时间分辨率有限的近似分析结果。这一想法在STFT上体现得很明显。小波用衰减的基函数去测定信号的瞬时频率,思想也类似。(不过到了Hilbert变换,思路就不一样了,以后有机会细讲)
4. 关于小波变换的不足
这要看和谁比了。
A.作为图像处理方法,和多尺度几何分析方法(超小波)比:
对于图像这种二维信号的话,二维小波变换只能沿2个方向进行,对图像中点的信息表达还可以,但是对线就比较差。而图像中最重要的信息恰是那些边缘线,这时候ridgelet(脊波), curvelet(曲波)等多尺度几何分析方法就更有优势了。B. 作为时频分析方法,和希尔伯特-黄变换(HHT)比:
相比于HHT等时频分析方法,小波依然没脱离海森堡测不准原理的束缚,某种尺度下,不能在时间和频率上同时具有很高的精度;以及小波是非适应性的,基函数选定了就不改了。5. 关于文中表述的严谨性
评论中有不少朋友提到,我的一些表述不够精准。这是肯定的,并且我也是知道的。比如傅里叶变换的理解部分,我所说的那种“乘出一个大的值”的表述肯定是不够严谨的。具体我也在评论的回答中做了解释。我想说的是通俗易懂和精确严谨实在难以兼得,如果要追求严谨,最好的就是教科书上的数学表达,它们无懈可击,但是对于初学者来说,恐怕存在门槛。如果要通俗解释,必然只能侧重一个关键点,而出现漏洞。我想这也是教科书从来不把这些通俗解释写出来的原因吧——作者们不是不懂,而是怕写错。所以想深入理解傅里叶变换和小波变换的朋友还请认真学习教材,如果这篇文章能给一些初学者一点点帮助,我就心满意足了。
-
傅里叶变换(二维离散傅里叶变换)
2018-06-15 22:22:35离散二维傅里叶变换一常用性质: 可分离性、周期性和共轭对称性、平移性、旋转性质、卷积与相关定理;(1)可分离性: 二维离散傅里叶变换DFT可分离性的基本思想是DFT可分离为两次一维DFT。因此可以用通过计算两次... -
第14章:傅里叶变换
2022-01-23 06:20:05第14章:傅里叶变换一、理论基础:二、Numpy实现傅里叶变换:1. 实现傅里叶变换:2. 逆傅里叶变换:3. 高通滤波示例:三、OpenCV实现傅里叶变换:1. 实现傅里叶变换:2. 实现逆傅里叶变换:3. 低通滤波示例: 图像... -
scipy之傅里叶变换
2022-05-08 00:00:29本篇文章主要介绍了傅里叶变换,说明了什么是傅里叶变换?以及傅里叶变换的应用有哪些?并且通过scipy来详细介绍了,如何通过傅里叶变换来移除信号中的噪声。 -
第三章+傅里叶变换.pptx
2020-04-28 15:15:03信号与系统 傅里叶变换 傅立叶变换是一种线性的积分变换,常在将信号在时域(或空域)和频域之间变换时使用,在物理学和工程学中有许多应用。因其基本思想首先由法国学者约瑟夫·傅里叶系统地提出,所以以其名字来... -
图像处理--图像在傅里叶变化中的时域、空域和频域
2020-11-11 20:25:03通过傅立叶变换后,得到的是图像的频谱。表示图像的能量梯度。 2,频率域: 频率域(frequency domain。)任何一个波形都可以分解成多个正弦波之和。每个正弦波都有自己的频率和振幅。所以任意一个波形信号有自己... -
傅里叶变换 卷积定理 空域模板转换为频域模板
2021-01-12 20:45:24拉普拉斯锐化的模板为 ... 由傅里叶卷积定理我们可以知道,空域模板中有一个频域模板与之相对应,现在空域中 左右两边同时进行傅里叶变换可得: 原理为: 结果为: (计算结果可能有错,错了麻烦指出~) ... -
傅里叶变换深入浅出
2017-09-16 12:04:12傅立叶变换是线性系统分析的一个有力工具,是信号处理中最重要、应用最广泛的变换,但遗憾的是很多人可能还是不习惯在频域中思考问题,尤其是面对图像时,空间域、频率域都是二维的,更是对空域、频域的对应关系不甚... -
【新星计划】Matlab-傅里叶变换隐藏水印
2021-06-20 20:59:31相对于空域方法,频域加盲水印的方法隐匿性更强,抵抗攻击能力更强。这类算法解水印困难,你不知道水印加在那个频段,而且受到攻击往往会破坏图像原本内容。 所谓盲水印,是指人感知不到的水印,包括看不到或听不见... -
图像傅里叶变换
2018-04-27 16:14:261. 图像的傅里叶变换傅里叶变换可以看成是时域和频域的转换。一维图像傅里叶变换公式(空间域->频域):一维傅里叶变换逆变换公式(频域->空间域):M×N图像的二维离散傅里叶变换:M×N图像的傅里叶... -
傅里叶变换
2021-10-23 22:38:02无从从频域到空域,还是空域到频域,其变换都是没有损失的 一维傅里叶变换 一维连续傅里叶变换 函数中f(x)为取值为:从负无穷到正无穷的所有取值 如果u等于0,就表示函数f(x)在 负无穷到正无穷之间的累加求和 ... -
有关傅里叶变换知识
2021-03-16 12:12:25傅里叶变换是一种函数在空间域和频率域的变化,从空间域到频率域的变换时傅里叶变换,而从频率域到空间域的变换是傅里叶的反变化。 频域:是指在对函数或信号进行分析时,分析其和频率有关 部分,而不是和时间有关... -
opencv 傅里叶变换(python)
2022-06-04 16:01:05图像处理一般分为空间域处理和频率域处理。空间域处理是直接对图像内的像素进行处理。空间域处理主要划分为灰度变换和空间滤波两种形式。...因此,显示傅里叶变换的结果需要使用实数图像(real image)加虚 -
如何学会傅里叶变换?
2021-02-06 14:36:44在数学中,傅里叶级数(Fourier series)是把类似波的函数表示成简单正弦波的方式。更正式地说法是,它能将任何周期性函数或周期信号分解成一个(可能由无穷个元素组成的)简单振荡函数的集合,即正弦函数和余弦函数... -
图像处理(5)--图像的傅里叶变换
2019-07-06 10:42:52傅里叶变换及其反变换1.1 为什么要在频率域研究图像增强?1.2 傅里叶变换 1. 傅里叶变换及其反变换 1.1 为什么要在频率域研究图像增强? 可以利用频率成分和图像外表之间的对应关系。一些在空间域表述困难的增强... -
空间域和变换域(以傅里叶变换为例)
2017-11-25 22:10:14变换域在有些情况下,通过变换输入图像来表达处理任务,在变换域执行处理任务,然后再反变换到空间域会更好。 二维线性变换的通用形式可表示为: T(u,v)=∑x=0M−1∑y=0N−1f(x,y)r(x,y,u,v) T(u, v) = \sum_{x=... -
傅里叶变换原理---OpenCV-Python开发指南(31)
2021-02-23 17:51:20要理解傅里叶变换,我们首先需要了解图像处理。在图像处理的过程中,一般分为空间域处理和频率域处理。 空间域处理是直接对图像内的像素进行处理。空间域处理主要划分为灰度变换和空间滤波两种形式。灰度变换是对... -
无傅里叶变换光学传递函数研究
2020-02-03 14:46:49无傅里叶变换光学传递函数研究,赵振明,,光学传递函数(OTF)是一种全面、客观评价光学成像系统性能方法,然而目前的光学传递函数理论是基于空域研究成像过程,结合傅里叶 -
傅里叶变换的缩放性质
2021-06-16 11:14:05假设图像g(x,y)g(x,y)g(x,y)是一个关于xxx和yyy的二维信号,那么它们在空域作缩放变换之后,频域坐标也会发生缩放,用公式可以表示为 G(fx,fy)=ℑ[g(x,y)]ℑ[g(xa,yb)]=∣ab∣G(afx,bfy)(1) G(f_x,f_y)=\Im{[g(x,y)... -
离散傅里叶变换中的移位定理
2021-02-04 08:09:05为了优化代码,我对f和g进行了fft运算,将它们相乘,然后进行反变换以得到结果。在作为进一步的优化,我意识到,由于移位定理,我可以简单地计算一次f(x,y,z)的fft,然后乘以依赖于的相位因子,得到{a4}的fft。... -
图像处理 有损压缩变换-傅里叶变换
2020-06-13 11:40:19傅里叶变换(Fourier transform)是一种线性积分变换,用于信号在时域(或空域)和频域之间的变换。 将函数(通常是时间的函数或信号)分解为三角函数(正弦和/或余弦函数)或三角函数积分的线性组合形式的组成频率... -
傅里叶变换&短时傅里叶变换&小波变换
2016-05-03 11:26:36傅里叶变换&短时傅里叶变换&小波变换 -
傅里叶变换、傅里叶级数的介绍
2019-11-12 17:02:04快速傅里叶变换的理论与应用FFT的简介FFT的理论分析与推导FFT的应用 FFT的简介 快速傅里叶变换(英语:Fast Fourier Transform, FFT),是快速计算序列的离散傅里叶变换(DFT)或其逆变换的方法。傅里叶分析将信号从... -
图像处理(十):傅里叶变换
2022-02-11 20:02:34图像处理(十):傅里叶变换