3、基于频域的评价函数:傅里叶变换与频谱分析、高频分量与清晰度的关系、频域评价的优缺点
聊完时域和梯度域,咱们得进入一个更「本质」的层面——频域。
你想想看,一张模糊的图像和一张清晰的图像,在空间域里看,区别是边缘锐不锐利。但在频域里看,区别就变成了「高频能量」的多少。我个人觉得,频域评价是对焦算法里最接近物理本质的一类方法。它不跟你绕弯子,直接问:你的图像里,细节够不够丰富?
3.1 傅里叶变换:把图像「翻译」成频谱
先说个基础概念。傅里叶变换,说白了就是把图像从「像素坐标空间」翻译到「频率空间」。
怎么理解?
- 空间域:你看到的是每个像素的灰度值,横轴是x,纵轴是y。
- 频率域:你看到的是每个频率分量的幅度,横轴是频率u,纵轴是频率v。
图像里那些缓慢变化的区域(比如天空、墙壁),对应的是低频分量。而那些剧烈变化的区域(比如边缘、纹理、噪点),对应的是高频分量。
对于离散图像,我们用的是二维离散傅里叶变换(DFT)。实际工程里,没人手算这个,都是用快速傅里叶变换(FFT)。
核心公式(理解即可,不用背):
F(u,v) = Σ Σ f(x,y) * e^(-j2π(ux/M + vy/N))
其中 f(x,y) 是图像像素值,F(u,v) 是频谱值。u和v是频率坐标。
我习惯把频谱图想象成一张「能量地图」。中心是直流分量和低频,往外扩散是高频。图像越清晰,高频区域的亮点就越多、越亮。
3.2 高频分量与清晰度的关系
这个关系其实很直观:清晰度 ≈ 高频能量占比。
为什么?
- 一张清晰的图像,边缘锐利,纹理丰富。这些信息在频域里表现为大量的高频分量。
- 一张模糊的图像,边缘被平滑,细节丢失。在频域里,高频分量被严重衰减,能量集中在低频区域。
我记得有一次做工业镜头的自动对焦,场景是检测电路板上的微小焊点。用梯度算子(比如Sobel)做评价函数,在光照变化时老是跳变。后来我换成频域评价,用FFT提取高频能量,稳定性一下就上来了。因为频域对整体光照的均匀变化不那么敏感,它看的是「结构」而不是「亮度」。
实用技巧:
在实际项目中,我们通常不会用整个频谱图。而是只取高频环带的能量和。比如,只计算半径大于某个阈值(如图像尺寸的1/4)的频谱能量。这样可以避开低频的干扰,聚焦在真正的细节上。
3.3 频域评价的常见指标
基于频域的评价函数,主要有这么几种。我列个表,方便你对比选型。
| 指标名称 | 计算方法 | 特点 | 适用场景 |
|---|---|---|---|
| 频谱能量(SFE) | 对频谱幅度平方求和 | 计算简单,对噪声敏感 | 光照稳定的实验室环境 |
| 高频分量占比(HF Ratio) | 高频能量 / 总能量 | 抗光照变化能力强 | 户外、光照变化大的场景 |
| 频谱阈值法(Threshold) | 统计超过某频率阈值的能量 | 可调性强,针对性强 | 特定纹理、特定尺寸目标的检测 |
| 拉普拉斯频域变体 | 对频谱加权(高频权重大) | 与梯度域拉普拉斯类似,但更稳定 | 需要平滑曲线的对焦过程 |
我个人最常用的是高频分量占比。因为它归一化了,不受图像整体亮度影响。你想想看,如果镜头光圈变化,或者环境光变了,总能量会变,但高频占比相对稳定。这个特性在自动对焦里非常宝贵。
3.4 频域评价的优缺点
任何方法都有两面性。频域评价虽然强大,但也不是万能药。
优点
- 物理意义明确:直接对应图像的细节丰富度,不依赖经验阈值。
- 抗光照干扰强:归一化后的指标(如高频占比)对光照变化不敏感。
- 可解释性强:频谱图能直观告诉你图像是「缺高频」还是「低频过强」。
缺点
- 计算量大:FFT 虽然快,但比梯度算子(Sobel、Laplacian)还是慢不少。在嵌入式设备上,这可能是个瓶颈。
- 对周期性纹理敏感:如果图像里有规律的条纹(比如栅格、布料纹理),频谱上会出现强峰值,可能误导评价函数。
- 边界效应:FFT 默认图像是周期延拓的,图像边缘的不连续会产生虚假高频。需要加窗函数(如汉宁窗)来抑制。
避坑指南:
我曾经在一个项目中,用频域评价函数对焦印刷品。结果发现,当图像里出现细密的网点(印刷品特有的周期性结构)时,评价曲线出现了多个假峰,导致对焦失败。后来我加了带阻滤波器,把网点对应的频率分量滤掉,才解决问题。所以,如果你的场景有周期性纹理,务必先做频谱分析,看看有没有干扰峰。
3.5 知识体系:频域评价核心逻辑
下面这张图,是我自己总结的频域评价函数的核心流程。你可以把它当作一个「思维导图」来理解。
3.6 工程实现要点
如果你打算在项目里用频域评价函数,有几点我建议你提前想好。
- 图像尺寸要合适:FFT 对 2 的幂次尺寸(如 256x256、512x512)效率最高。如果原始图像不是,可以裁剪或填充。
- 加窗是必须的:直接对图像做 FFT,边缘不连续会产生「振铃效应」。我习惯用汉宁窗(Hanning Window),效果比较均衡。
- 高频带的选择:不是所有高频都有用。比如,图像里的噪点也是高频。你需要根据目标物体的纹理尺度,确定一个合理的频率阈值。这个阈值,我一般通过实验标定。
- 性能优化:在嵌入式平台上,FFT 可能跑不满 30fps。可以考虑用局部FFT(只对图像中心区域做),或者用积分图加速的频域近似方法。
我的经验:
在调试频域评价函数时,我建议你先可视化频谱图。把 FFT 结果用 log 变换显示出来,看看高频区域是不是真的随着对焦过程在变化。很多时候,你以为的高频其实是噪点,或者你以为的低频其实是光学模糊。看一眼频谱图,什么都清楚了。