查看全课大纲(第 12 / 93 节)
- 1.计算机视觉概述
- 2.计算机视觉应用场景
- 3.困难与挑战
- 4.开源库介绍
- 5.图像显示与存储
- 6.CLAHE
- 7.腐蚀膨胀与开闭运算
- 8.滤波与边缘填充
- 9.各种滤波
- 10.图像金字塔
- 11.傅里叶变换
- 12.短时傅里叶变换与小波变换
- 13.颜色特征与颜色直方图
- 14.几何特征_边缘
- 15.几何特征-角点与斑点
- 16.局部特征-SIFT特征描述子
- 17.局部特征-SURF特征描述子
- 18.局部特征-ORB特征描述子
- 19.其他特征描述子
- 20.传统图像分割技术
- 21.GraphCut
- 22.GrabCut
- 23.人脸检测的传统方法
- 24.行人检测的传统方法HOG+SVM
- 25.行人检测DPM
- 26.人工神经网络的架构
- 27.目标函数与梯度下降
- 28.误差反向传播
- 29.可手算的神经网络
- 30.改进目标函数与克服梯度消散
- 31.神经网络之传统神经网络与深度网络的差异
- 32.各种梯度下降算法
- 33.如何选择合适的梯度下降算法
- 34.避免过适应
- 35.CNN的架构
- 36.CNN的误差反向传播_卷积层
- 37.CNN的误差反向传播_池化层
- 38.分类所用的数据集
- 39.Alexnet详解
- 40.VGG详解
- 41.GoogLeNet_v1
- 42.BatchNormalization
- 43.GoogLeNet_v3v4
- 44.ResNet
- 45.ResNeXt
- 46.CNN设计准则
- 47.图像检索与推土机距离
- 48.基于颜色相似性
- 49.基于形状相似性
- 50.基于纹理相似性
- 51.基于局部特征相似性
- 52.DL的二值哈希编码
- 53.高维空间中检索KDTree
- 54.高维空间中检索LSH
- 55.目标识别任务综述
- 56.RCNN
- 57.SPP-Net
- 58.Fast R-CNN
- 59.Faster R-CNN
- 60.R-CNN系列模型回顾
- 61.R-FCN的设计思路
- 62.R-FCN的实现
- 63.YOLOv1
- 64.YOLOv2_9000
- 65.YOLOv3
- 66.图像分割应用场景与数据集
- 67.上采样的实现方式
- 68.FCN网络架构的由来
- 69.FCN构建细节
- 70.DeepLabv1
- 71.CRF
- 72.DeepLabv2
- 73.DeepLabv3
- 74.特定的医学影像分割任务
- 75.U-Net
- 76.3D U-Net
- 77.V-Net
- 78.DenseNet
- 79.病理切片分析任务及数据集
- 80.病理切片分析
- 81.图说任务及其传统处理方法
- 82.深度语言模型与RNN
- 83.LSTM及其变种
- 84.NIC模型
- 85.SAT模型
- 86.图说的性能指标
- 87.判别模型与生成模型
- 88.KL散度与JS散度
- 89.VAE
- 90.GAN的基本原理
- 91.DCGAN与CGAN
- 92.Wasserstein GAN
- 93.SRGAN
短时傅里叶变换与小波变换
小象实战讲义 · 基于深度学习的计算机视觉
在上一节中,我们学习了傅里叶变换,它能够将信号从时域转换到频域,揭示信号的频率组成。然而,傅里叶变换有一个根本性的假设:信号是平稳的。但在现实世界,尤其是图像处理中,信号往往是非平稳的——其频率成分会随时间(或空间位置)变化。本节我们将探讨两种旨在克服这一局限性的方法:短时傅里叶变换和小波变换。理解它们,将为我们后续分析图像的局部纹理、进行高效的数据压缩等任务奠定基础。
💡 核心导读
- 傅里叶变换的局限:假设信号平稳,无法定位频率成分发生的时间和空间位置,对非平稳信号处理困难。
- 短时傅里叶变换(STFT):通过加窗,分段进行傅里叶变换,试图同时获取时域和频域信息,但面临窗口大小固定的两难选择。
- 小波变换(Wavelet Transform):从根本上更换了基函数,使用有限长、会衰减的“小波”代替无限长的三角函数,实现了对信号时间和频率的联合定位,更适用于图像等非平稳信号的分析与压缩。
傅里叶变换的不足回顾
傅里叶变换的数学前提是信号平稳。这意味着信号的统计特性(如频率、幅度)不随时间改变。一个典型的平稳信号是持续播放的单一频率正弦波。
然而,实际信号大多是非平稳的。例如一段音乐,不同时刻有不同的音符(频率);一张图像,不同区域有不同的纹理(空间频率)。对于这类信号,傅里叶变换只能告诉我们信号中存在哪些频率成分,却无法告诉我们这些成分发生在什么时间或位置。
让我们通过一个思想实验来理解这个缺陷。假设有两个完全不同的信号:
- 信号A:由四个不同频率的平稳正弦波从头到尾叠加而成。
- 信号B:开始时是低频振动,随后频率逐渐升高,但整体也由类似的四种频率成分构成。
对这两个信号分别做傅里叶变换,得到的频谱图(幅度-频率图)可能非常相似,都显示出四个主要的频率峰值。仅从频谱图,我们根本无法区分原始信号是A还是B。傅里叶变换丢失了时间定位信息。
在图像中,这对应着:傅里叶变换能告诉我们图像中有哪些方向的条纹(频率),但无法告诉我们这些条纹具体出现在图像的左上角还是右下角。这对于需要定位的分析任务(如边缘检测、特征提取)是致命的。
此外,由于傅里叶变换使用无限长的正弦波和余弦波作为基函数去“拟合”任何信号,这导致对于自然界中大量存在的、具有局部突变(如边缘)和平滑区域混杂的信号(如图像),其频域表示会变得非常“散乱”——能量会散布在很宽的频率范围内。这不利于我们进行有效的数据压缩,因为很难区分哪些频率成分是关键的“主体”,哪些是为了凑出局部突变而引入的“细节”。
短时傅里叶变换:加窗的尝试
为了解决时间定位问题,一个直观的想法是:既然整体信号非平稳,那我们就把信号分成一小段一小段,并假设每一小段内的信号是近似平稳的。然后对每一小段分别进行傅里叶变换。这就是短时傅里叶变换,也称为加窗傅里叶变换。
它的核心操作是引入一个窗函数(例如一个矩形窗、汉宁窗等)。这个窗函数在时间轴上滑动,每次只让一小段信号通过,然后对这段加窗后的信号做傅里叶变换。最终,我们得到一个二维的时频分布图:一个维度是时间(或窗的位置),另一个维度是频率。
import numpy as np
# 模拟一个非平稳信号:前一段是低频,后一段是高频
sample_rate = 1000 # 采样率
t = np.linspace(0, 1, sample_rate, endpoint=False)
# 前0.5秒:5Hz低频;后0.5秒:50Hz高频
signal_stft = np.concatenate([
np.sin(2 * np.pi * 5 * t[:500]),
np.sin(2 * np.pi * 50 * t[500:])
])
# 为了演示,我们手动模拟一个简单的加窗分析思想(非标准STFT计算)
window_size = 100 # 窗宽
step = 50 # 滑动步长
num_windows = (len(signal_stft) - window_size) // step + 1
print(f"信号长度: {len(signal_stft)}")
print(f"窗大小: {window_size}, 滑动步长: {step}, 窗口数量: {num_windows}")
print("思想:每个窗口内的信号被近似视为平稳,可独立分析其频率成分。")信号长度: 1000
窗大小: 100, 滑动步长: 50, 窗口数量: 19
思想:每个窗口内的信号被近似视为平稳,可独立分析其频率成分。STFT 类似于音乐中的五线谱:五线谱记录了在不同时间片段内应该演奏什么频率的音符。STFT 的时频图也能告诉我们“在哪个时间段,信号主要包含哪些频率”。
然而,STFT 有一个根本性的缺陷:窗函数的大小(宽度)是固定的。这引发了一个不可调和的矛盾——时间分辨率与频率分辨率的权衡:
- 窄窗口:时间定位准(时间分辨率高),但看到的信号周期数少,难以准确判断其频率(频率分辨率低)。极端情况下,窗口内可能看不到一个完整周期。
- 宽窗口:能看到更多周期,频率判断准(频率分辨率高),但无法精确定位频率变化发生的具体时刻(时间分辨率低)。
对于非平稳信号,理想的状况是:对于高频成分(变化快),我们用窄窗口去捕捉其快速变化的时间点;对于低频成分(变化慢),我们用宽窗口来准确测量其频率。但 STFT 的固定窗口无法自适应地满足这一需求。这个矛盾在信号处理中类似于量子力学中的“海森堡不确定性原理”。
小波变换:更换基函数的革命
既然固定窗口的 STFT 无法完美解决时频定位问题,那么有没有更根本的解决方法呢?小波变换的提出正是基于这样的思考。它的核心革命在于:不再使用无限长的正弦波作为基函数,而是使用一种有限长的、会衰减的“小波”作为新的基函数。
小波(Wavelet)顾名思义,是一个“小的波浪”。它必须满足两个基本条件:
- 均值为0:波形在正负之间震荡,没有直流分量。
- 时域与频域都局部化:在时域上,它的能量集中在有限区间内,迅速衰减到零;相应地,在频域上,它也不是一个单频点,而是有一个主瓣(中心频率)的带通特性。
最著名和最简单的小波是 Haar 小波,它的形状像一个阶梯:在一段区间内取正值,在相邻区间内取等长的负值。
小波变换的公式与傅里叶变换形式相似,但内核不同: 傅里叶变换: 小波变换:
这里, 就是小波函数(母小波)。它引入了两个关键参数:
- 尺度参数 :控制小波的拉伸与压缩,对应于频率信息。 大,小波被拉伸,频率低; 小,小波被压缩,频率高。
- 平移参数 :控制小波在时间轴上的位置,对应于时间定位信息。
通过缩放和平移,一个小波母函数可以生成一整套小波基函数。小波变换就是要将原始信号 分解为这一系列不同尺度、不同位置的小波基的线性组合。
import numpy as np
# 构造一个包含突变的简单一维信号,模拟图像中一个边缘
signal_local = np.array([0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0], dtype=np.float32)
# 模拟一个类似Haar小波的边检测核 [-1, -1, 1, 1]
# 注意 np.convolve 会翻转核:上升沿响应为 -2,正响应标记下降沿
wavelet_kernel = np.array([-1, -1, 1, 1])
# 使用卷积来模拟在该核尺度下扫描信号(这是一个极其简化的示意,并非真正的小波变换)
# 它演示了“局部化”的核如何定位突变(边缘)的位置
response = np.convolve(signal_local, wavelet_kernel, mode='valid')
print("原始信号 (模拟边缘):", signal_local)
print("模拟小波核 (Haar-like):", wavelet_kernel)
print("卷积响应 (绝对值最大处对应边缘中心):", response)原始信号 (模拟边缘): [0. 0. 0. 0. 1. 1. 1. 1. 0. 0. 0. 0.]
模拟小波核 (Haar-like): [-1 -1 1 1]
卷积响应 (绝对值最大处对应边缘中心): [ 0. -1. -2. -1. 0. 1. 2. 1. 0.]从上面的简化示例可以看到,一个局部化的核(类似小波)在信号上滑动时,只在信号发生跳变的位置产生显著响应:0→1 的上升沿给出 -2,1→0 的下降沿给出 +2,两处响应的符号相反,位置恰好对应两个跳变点。绝对值大小说明“这里有一个突变”,符号则指示“跳变的方向”。这直观展示了小波变换同时定位频率(通过核的形状)和时间(通过响应的位置) 的能力。
小波变换的优势:
- 多分辨率分析:通过改变尺度参数 ,可以自然地实现“高频用窄窗,低频用宽窗”的自适应分析,克服了STFT的固定窗口缺陷。
- 时频定位:能够有效分析非平稳信号,定位突变发生的位置。
- 数据压缩:由于小波基与图像的边缘、纹理等结构有更好的匹配性,通过小波变换后,信号的能量往往集中在少数几个大的小波系数上。丢弃那些接近零的小系数,可以在最小化失真的前提下实现高效的数据压缩(如JPEG2000标准就采用了小波变换)。相比之下,傅里叶变换为了凑出局部突变,需要很多高频分量,导致压缩困难。
除了 Haar 小波,还有一系列常用的小波函数族,如 Daubechies 系列(dbN)、Symlets 系列(symN)、Coiflets 系列(coifN),以及 Morlet、Meyer 等,它们具有不同的数学性质,适用于不同的应用场景。
📝 动手练一练
- 概念辨析:短时傅里叶变换(STFT)试图解决傅里叶变换的什么问题?它自身又引入了什么新的矛盾?
- 理解小波:小波函数必须满足哪两个基本条件?为什么这两个条件使得小波变换特别适合处理像图像这样的信号?
👉 点击查看参考答案
STFT的改进与矛盾:
- 解决的问题:STFT试图解决傅里叶变换缺乏时间/空间定位能力的问题。它通过加窗将信号分段,假设每段内平稳,从而获得一个二维的时频表示,既能知道有哪些频率成分,也能知道它们大致出现在哪个时间段。
- 引入的矛盾:时间分辨率与频率分辨率的不可兼得。窗口窄则时间定位准但频率测不准;窗口宽则频率测准但时间定位模糊。由于STFT使用固定大小的窗口,它无法自适应信号中不同频率成分对时频分辨率的不同需求。
小波函数的条件:
- 均值为0:。这保证了小波是一个震荡的波形,适合描述信号的局部变化(如细节、边缘),而不是整体的平均水平。
- 时域与频域都局部化:小波函数在时域上快速衰减到零,能量集中在有限范围内;在频域上,它有一个中心频率和有限的带宽。这使得小波变换能够同时提供时间(或空间)和频率的局部信息。
- 适合图像的原因:图像信号在空间上是非平稳的,包含大量局部突变(边缘)和平滑区域。小波的局部化特性使其能很好地匹配图像的边缘和纹理,从而更紧凑地表示图像,便于进行压缩、去噪、特征提取等操作。
本章小结
本节我们深入探讨了傅里叶变换在处理非平稳信号时的局限性,并学习了两种重要的改进方法:短时傅里叶变换和小波变换。STFT通过引入时间窗提供了初步的时频分析能力,但其固定窗口导致了分辨率权衡的根本限制。小波变换则通过使用局部化的、可伸缩平移的小波基函数,实现了真正的多分辨率时频分析,成为图像处理、数据压缩等领域不可或缺的工具。
📋 行动清单
- 理解傅里叶变换“平稳信号”假设的局限性,能举例说明何为非平稳信号。
- 掌握短时傅里叶变换(STFT)的基本思想,并能解释其“时间与频率分辨率矛盾”。
- 理解小波变换的核心创新(更换基函数为局部化的小波),并了解其两个基本条件(均值为零、时频局部化)。
—— 小象教研组