4. AF评价函数

自动对焦(AF)的本质,是让镜头在候选焦段中找到一个“最清晰”的位置。而判断“清晰”这件事,最终要落到一个可计算的数值上,这个数值就是 AF 评价函数(Focus Value,FV)。评价函数把图像的高频细节强度压缩成一个标量,AF 搜索算法再依据 FV 曲线的峰值来确定合焦位置。因此,评价函数选得好不好,直接决定了低光照下 AF 是否稳定、是否容易拉风箱、是否能准确停在合焦点上。

低光照给评价函数带来的核心困难是:光子噪声和读出噪声被放大,暗部细节被压缩,图像整体对比度下降。此时评价函数面临一对矛盾——既要对真实边缘敏感,又不能对噪声敏感。理解常用算子的数学特性,才能做出合理选择。

一、三类常用清晰度评价算子

梯度类算子通过一阶差分衡量相邻像素的变化强度。典型代表是 Tenengrad(Sobel 梯度平方和)、Brenner 梯度以及 SMD(灰度差分绝对值之和)。它们计算量小、对边缘响应直接,FV 曲线通常较陡,峰值定位精度高。缺点是梯度对噪声同样敏感,在低光照高增益下,噪声会被当作“伪边缘”计入 FV,导致曲线底部抬高、峰值变钝甚至出现多个局部极大值。

拉普拉斯类算子使用二阶微分,典型代表是 Laplacian 绝对值之和、SML(Sum of Modified Laplacian)以及改进的 Tenengrad 变体。二阶算子对细节和细纹理更敏感,理论上峰值更尖锐,适合纹理丰富的场景。但二阶微分对噪声的放大比一阶更严重,在低光照下如果没有充分降噪或阈值截断,FV 曲线会剧烈抖动,搜索过程容易误判。

频域类算子把图像变换到频率域,统计高频分量的能量,典型做法是 FFT 后取高频带能量,或用 DCT 系数、小波高频子带能量。频域方法对全局清晰度描述准确、抗局部噪声能力相对较好,但计算开销大,且需要分块或降采样才能满足实时性。在低光照下,高频能量本身被噪声污染,若不做噪声基底扣除,同样会失真。

低光照下三类清晰度评价算子特性对比 低光照图像 低对比度 + 高噪声 梯度类 Sobel / Brenner / SMD 一阶差分 · 计算快 拉普拉斯类 Laplacian / SML 二阶微分 · 峰值尖 频域类 FFT / DCT / 小波 高频能量 · 开销大 FV 曲线形态(低光照) 镜头位置 FV 值 理想峰值 梯度类 拉普拉斯类 频域类 噪声基底 选择原则: 低光照优先选梯度类 + 噪声抑制;纹理丰富且噪声可控时用拉普拉斯类;算力充足且需全局评估时用频域类。 核心目标:抬高信噪比、压低噪声基底、保持单峰性。

二、低光照下各算子的实际表现

在正常光照下,三类算子的 FV 曲线都能呈现良好的单峰形态,差异主要体现在峰值锐度和计算成本上。但在低光照下,差异被急剧放大。

梯度类算子在增益提升后,噪声梯度会均匀地叠加到整条曲线上,表现为“基底抬高”。如果噪声基底接近真实峰值,搜索算法就可能把噪声波动误认为清晰度变化,出现提前停止或反复穿越峰值。不过,由于梯度类计算简单,可以通过设置梯度阈值、只统计超过阈值的像素来有效抑制噪声,工程上最容易调优。

拉普拉斯类算子在低光照下最容易“翻车”。二阶微分对孤立噪声点的响应远大于对缓变边缘的响应,一个噪声像素就能产生很大的拉普拉斯值。如果不做中值滤波或阈值截断,FV 曲线会布满毛刺,峰值位置随机漂移。它的优势只在噪声被充分压制后才体现出来。

频域类算子由于是全局或分块统计,单个噪声点的影响被平均掉,曲线相对平滑。但低光照下高频段本身信噪比极低,噪声能量会均匀填充高频带,导致不同焦段的 FV 差异被压缩,峰值不够突出。通常需要先做噪声基底估计并从高频能量中扣除,才能恢复曲线对比度。

三、选择原则与工程决策

评价函数的选择不是“哪个最好”,而是“在当前光照、噪声、算力和场景纹理下哪个最稳”。可以按以下优先级决策:

  • 光照极低、增益很高时:优先选梯度类(Brenner 或 Sobel),并配合梯度阈值截断和 ROI 限制,避免全图噪声参与统计。
  • 中等低光照、纹理丰富时:可选用 SML 等改进拉普拉斯算子,但必须先做 3×3 中值滤波或双边滤波,再计算二阶响应。
  • 需要全局稳定评估、算力允许时:选用频域高频能量法,并做噪声基底扣除,适合作为辅助评价或校准参考。
  • 任何情况下:都应限制评价区域(ROI),避开纯暗背景和纯噪声区域,只统计有实际纹理的窗口。

核心结论:低光照 AF 评价函数的第一原则是“抗噪优先于锐度”。宁可峰值钝一点,也不能让噪声基底淹没真实峰值。梯度类因可解释、可截断、可调参,是低光照下最稳妥的默认选择。

四、参数配置与调优示例

以梯度类中的 Tenengrad 为例,低光照下常用配置如下:

# Tenengrad 评价函数低光照配置示例
operator: tenengrad
roi: [0.25, 0.25, 0.75, 0.75]   # 中心区域,避开暗角
gradient_threshold: 18           # 低于此值的梯度不计入,抑制噪声
downsample: 2                    # 降采样,降低噪声与算力
noise_floor_estimate: true       # 估计并扣除噪声基底
normalize: true                  # 按亮度归一化,避免增益变化影响
search_step_coarse: 8            # 粗搜索步长
search_step_fine: 2              # 精搜索步长

关键参数是 gradient_threshold。阈值太低,噪声进入统计;阈值太高,暗部真实边缘被丢弃,FV 曲线变平。工程上可用一组不同曝光和增益的实拍图,扫描阈值并观察 FV 曲线单峰性和峰值对比度,选取使“峰值/基底”比值最大的阈值。

五、常见误区与复盘

误区一:认为拉普拉斯算子“更锐利所以更好”。在低光照下,二阶微分放大噪声,未滤波时反而最不稳定。

误区二:只调 AF 搜索算法,不换评价函数。搜索策略再优,评价函数被噪声污染也无法稳定合焦。

误区三:全图统计 FV。背景暗区和噪声区会稀释真实纹理贡献,ROI 限制往往比换算子更有效。

复盘时建议固定场景、固定增益,分别记录三类算子的 FV 曲线,重点观察三个指标:峰值与噪声基底的比值、曲线单峰性、峰值附近斜率。只有这三个指标同时达标,评价函数才适合用于该低光照场景的 AF 调优。

算子类型 代表算子 低光照抗噪性 峰值锐度 计算开销 推荐场景
梯度类 Tenengrad / Brenner / SMD 中(可阈值截断) 较高 低 低光照默认首选
拉普拉斯类 Laplacian / SML 低(需前置滤波) 高 中 纹理丰富、噪声可控
频域类 FFT / DCT / 小波高频 较高(需扣基底) 中 高 全局评估、辅助校准

总结来说,低光照 AF 评价函数的选择应遵循“先抗噪、再锐度、后算力”的顺序。梯度类算子凭借可截断、可归一化、易调参的特性,是低光照场景下最可靠的起点;拉普拉斯类需要在滤波和阈值保护下谨慎使用;频域类适合作为全局参考而非唯一依据。把评价函数与 ROI、阈值、降采样、噪声基底扣除组合起来,才能让 FV 曲线在低光照下依然保持清晰、稳定、单峰。