115、洞察驱动的实战标题——AF的"爬山算法局限性"——为什么纯对比度AF在弱光下会来回拉风箱?用PDAF+反差混合策略破解
昨晚在实验室蹲到凌晨两点,盯着示波器上那根AF驱动电压的波形——它像得了帕金森一样在目标位置附近来回抖了整整四十秒。旁边新来的工程师小周揉着眼睛问:“这镜头是不是坏了?”我没直接回答,让他把走廊灯关掉一半再试,波形抖得更欢了。这不是镜头坏,这是纯对比度AF在弱光下的经典绝症——爬山算法在平坦区域里找不到“山顶”,只能在噪声斜坡上原地打转。
先把这个病根说透。对比度AF的核心逻辑是“边搜索边比较”——驱动镜头从近端往远端走,每走一步抓一帧图,算当前画面的高频能量(通常用拉普拉斯或Sobel响应),然后比较相邻两步的数值。如果这一步比上一步大,说明方向对了,继续走;如果小了,说明过了头,退回去半步再试。这套逻辑在光线充足、纹理丰富的场景下确实好用,因为清晰度曲线是一个单峰函数,峰值位置就是合焦点。但弱光下呢?传感器信噪比掉到20dB以下,暗部噪声本身就能贡献出和真实纹理相当的高频分量。你算出来的“清晰度”里,一半是信号一半是噪声,曲线从光滑的单峰变成了锯齿状的毛刺山脊。爬山算法不知道哪些锯齿是噪声,它只会机械地比较相邻两步的数值——于是它把噪声尖峰当成了山顶,冲过去发现数值掉了,退回来又发现数值涨了,就在那两三个步长之间反复横跳。这就是你看到的拉风箱。
更坑的是,弱光下为了保曝光,自动增益会把ISO拉高,噪声进一步放大,而对比度AF的搜索步长往往是固定的——步长太大,容易跳过真实峰值直接撞进噪声谷;步长太小,又会被噪声毛刺完全淹没。我见过某款安防球机在0.1lux下,AF搜索步长设成5μm,结果镜头在±20μm范围内来回跑了十七次才勉强停下,而