1. 自动对焦:从模糊到清晰的那一瞬间

各位同学好,我是老张。今天咱们开始聊自动对焦。

你想想看,手机拍照时按下快门,画面从模糊变清晰——这背后发生了什么?说白了,自动对焦(AF)就是让镜头找到那个最清晰的位置。我做了这么多年相机系统,每次看到这个简单的动作,还是会觉得挺有意思的。

1.1 什么是自动对焦

自动对焦,英文叫 Auto Focus,简称 AF。它的核心任务只有一个:调整镜头位置,让被摄物体在传感器上成最清晰的像。

嗯,这里要注意。对焦不是让整个画面都清晰,而是让你关心的那个主体清晰。背景虚化?那是景深的事,跟对焦是两码事。

核心公式:

对焦过程 = 镜头移动 + 清晰度评估 + 反馈调整

直到找到清晰度峰值点,停止。

我在项目中遇到过不少新人,以为对焦就是“拧镜头”。其实没那么简单。镜头怎么拧、拧多少、什么时候停——这三个问题,才是AF算法的全部。

1.2 对焦评价函数:怎么判断“清晰”

机器不像人眼,一眼就能看出糊不糊。它需要一个数学工具来量化清晰度。这个工具就是对焦评价函数,也叫 Focus Measure。

常见的评价函数有几种:

评价函数 原理 特点
Tenengrad 基于Sobel梯度 计算量大,精度高
Laplacian 二阶微分 对噪声敏感
Brenner 相邻像素差 计算快,够用
方差法 灰度分布离散度 简单,但易受光照影响

我个人习惯用 Tenengrad 做精度场景,Brenner 做快速场景。为什么?

Tenengrad 算的是图像梯度能量。清晰图像边缘锐利,梯度值高;模糊图像边缘平滑,梯度值低。这个物理意义很直观。但它的计算量摆在那,高通平台上如果开全分辨率跑,帧率会掉得很难看。

Brenner 就轻量多了。它只算相隔两个像素的差值,近似梯度。虽然精度差一点,但在预览场景下完全够用。

我的经验:

实际项目中,我通常把评价函数做成可配置的。白天用 Tenengrad,暗光下切到 Brenner。别死磕一种方法,场景适配才是王道。

1.3 对比度检测(CDAF):老派但可靠

对比度检测,英文 Contrast Detection AF,简称 CDAF。它的逻辑很简单:

  1. 移动镜头到一个位置
  2. 抓一帧图像,算评价函数值
  3. 再移动一点,再算
  4. 找到评价函数值的峰值,那就是最清晰的位置

这个过程叫爬山算法。为什么叫爬山?你想想看,评价函数值随镜头位置变化的曲线,就像一座山。AF就是在爬这座山,找到山顶。

但CDAF有个硬伤——它不知道往哪个方向爬。它只能先试一个方向,如果评价函数值下降,再掉头。这就导致了反复震荡。

避坑指南:

我曾经在一个项目中,CDAF在低对比度场景下反复震荡了十几帧才收敛。用户拍照时那个等待感,别提多难受了。后来我加了一个“方向记忆”机制——如果上次对焦是往近处走的,这次优先往近处试。效果好了很多。

CDAF的优点也很明显:

  • 不需要额外硬件
  • 对场景没有特殊要求
  • 精度理论上可以做到很高

缺点:

  • 慢,需要多次采样
  • 低对比度场景容易失效
  • 动态场景下容易跟丢

1.4 相位检测(PDAF):又快又准的现代方案

相位检测,Phase Detection AF,简称 PDAF。它解决了CDAF最大的痛点——方向判断。

PDAF的原理,说白了就是“分光”。在传感器上放一些特殊的像素对,它们分别从左右两个方向接收光线。如果对焦准确,左右像素的信号一致;如果对焦靠前或靠后,左右信号会出现相位差。

这个相位差的大小和方向,直接告诉镜头:往哪边拧、拧多少。

所以PDAF只需要一帧就能算出对焦方向,不需要像CDAF那样来回试探。

特性 CDAF PDAF
速度 慢(3-5帧) 快(1帧)
方向判断 需要试探 直接得出
硬件需求 无 专用像素对
低光性能 差 中等
精度 高 中等(受像素间距限制)

高通平台上的 PDAF 实现,我接触比较多的是 2x2 OCL(On-Chip Lens)结构。每个像素对共享一个微透镜,既能做相位检测,又不牺牲太多成像质量。

关键点:

PDAF 不是万能的。它的精度受限于像素对的数量和分布。像素对越多,覆盖越密,但会牺牲正常像素的感光面积。这是个 trade-off。

1.5 CDAF + PDAF 混合对焦:高通平台的标配

现在的高通平台,基本都走混合对焦路线。先用 PDAF 快速跳到目标位置附近,再用 CDAF 做精细微调。

为什么这么设计?

PDAF 快,但精度不够。CDAF 慢,但精度高。两者互补,完美。

我参与的一个项目中,混合对焦的流程是这样的:

  1. 用户半按快门,触发 AF
  2. PDAF 模块读取相位差,计算镜头目标位置
  3. 镜头快速移动到目标位置(开环控制)
  4. CDAF 模块开始爬山,做闭环微调
  5. 找到峰值,锁定对焦

整个过程,从触发到锁定,控制在 100ms 以内。这在纯 CDAF 时代是不可想象的。

我的建议:

做混合对焦时,PDAF 的置信度判断很重要。如果场景太暗、或者被摄物体纹理太少,PDAF 的相位差数据可能不可靠。这时候要果断降级到纯 CDAF,别硬撑。

1.6 本章知识结构图

下面这张图,把本章的核心知识点串起来了。我建议你多看几遍,把概念之间的关系理清楚。

自动对焦知识结构图 自动对焦 AF 对焦评价函数 对比度检测 CDAF 相位检测 PDAF Tenengrad Brenner 爬山算法 相位差计算 混合对焦 CDAF + PDAF 核心思路 PDAF 快速粗调 + CDAF 精细微调 = 又快又准 高通平台标配方案,覆盖从预览到拍照全场景

1.7 小结

这一章我们聊了三个核心概念:

  • 对焦评价函数——机器判断清晰度的数学工具
  • 对比度检测(CDAF)——爬山找峰值,慢但准
  • 相位检测(PDAF)——一帧定方向,快但有条件

这些是AF的基石。后面的章节,我们会在这个基础上,聊高通平台的具体实现、场景适配策略、以及各种坑和优化手段。