1. AF系统概述:自动对焦技术发展史、AF在手机与安防领域的应用、核心评价指标
各位同学好,我是你们这趟AF算法之旅的向导。做了十来年图像处理,从功能机时代一路摸爬滚打到今天,对焦这事儿,我自认还有点发言权。今天咱们先不急着写代码,先把AF的“前世今生”和“江湖地位”聊透。
你想想看,一张照片糊了,像素再高有什么用?自动对焦,说白了就是让镜头自己找到最清晰的那个位置。这背后,是一套精密的搜索与控制逻辑。
1.1 自动对焦技术发展史:从手动到智能
AF技术不是一天建成的。我刚开始入行那会儿,用的还是纯手动对焦,拧镜头拧得手指头疼。后来技术演进,大致经历了这么几个阶段:
| 阶段 | 核心技术 | 代表产品 | 我的评价 |
|---|---|---|---|
| 被动式AF(1980s) | 反差检测(CDAF) | 早期卡片机 | 慢,但准。光线好还行,暗处就抓瞎。 |
| 主动式AF(1990s) | 红外/超声波测距 | 部分傻瓜机 | 不怕黑,但隔着玻璃就废了。 |
| 相位检测AF(2000s) | PDAF(专用像素) | 单反相机 | 快!但需要专用硬件,成本高。 |
| 混合AF(2010s至今) | PDAF + CDAF + AI | 智能手机、安防球机 | 又快又准,但算法复杂度上去了。 |
这里有个关键转折点——智能手机的爆发。手机内部空间就那么点,塞不下单反那套复杂的相位检测模块。于是,反差检测(CDAF) 成了主流。说白了,就是让马达带着镜头走一遍,找到图像对比度最高的那个点。
核心逻辑: 反差检测的本质是一个“爬山”过程。图像越清晰,相邻像素的亮度差异越大,这个差异值就是我们的评价函数。AF算法要做的,就是找到这个函数的峰值。
但CDAF有个天生的毛病——它不知道方向。它只知道当前点是不是比上一个点好,但不知道“好”的方向在哪。所以早期的手机对焦,经常能看到画面“拉风箱”——来回搜索,犹豫不决。
后来,索尼把PDAF像素集成到了CMOS上,手机AF才真正快起来。我2015年做第一款双摄项目时,就吃过这个亏——当时只用了纯CDAF,结果在暗光下对焦慢得像蜗牛,被客户骂得狗血淋头。嗯,从那以后,我对混合AF的敬畏心就刻在骨子里了。
1.2 AF在手机与安防领域的应用
同样是AF,手机和安防的需求完全是两码事。我分别说说。
手机领域:快、准、稳
- 场景: 拍人、拍物、拍风景,随时切换。
- 痛点: 用户手抖、物体移动、光线突变。
- 常用方案: 双核对焦(Dual Pixel)、全像素八核对焦、激光辅助AF。
- 我的经验: 手机AF最怕的是“微距”和“暗光”。微距时景深极浅,马达稍微多走一步就糊了;暗光下反差信号弱,评价函数曲线太平,算法容易陷入局部最优。我建议在微距场景下,强制限制搜索步长,宁慢勿错。
安防领域:远、稳、全天候
- 场景: 监控、人脸抓拍、车牌识别,镜头通常不动。
- 痛点: 变焦后重对焦、雨雾天气、夜间红外切换。
- 常用方案: 步进电机+高精度霍尔传感器、预置位对焦、温度补偿。
- 避坑指南: 我曾经做过一个安防项目,镜头在白天对焦好好的,一到晚上切换红外滤光片后,画面就虚了。查了三天才发现,是红外光波长不同导致焦平面偏移了。后来我们加了一个温度-焦距补偿表,才彻底解决。这个坑,你们以后大概率也会遇到。
小提示: 手机AF追求的是“快”,安防AF追求的是“稳”和“可重复性”。设计算法时,一定要先搞清楚应用场景,再决定搜索策略。
1.3 核心评价指标:速度、精度、鲁棒性
评价一个AF算法好不好,就看这三个指标。它们之间是互相制约的,你不可能同时做到极致。
| 指标 | 定义 | 典型要求 | 我的调优心得 |
|---|---|---|---|
| 速度 | 从启动到合焦的总时间 | 手机:<200ms;安防:<1s | 粗搜用大步长,细搜用小步长。别在平坦区浪费步数。 |
| 精度 | 合焦位置与真实焦点的偏差 | 手机:<1个景深;安防:<0.5个景深 | 精度受限于马达步长和评价函数灵敏度。别盲目追求高精度,够用就行。 |
| 鲁棒性 | 在不同场景下都能稳定合焦 | 低照度、低对比度、运动场景 | 这是最难调的。我建议加一个“置信度”判断,如果评价函数曲线太乱,就切换到慢速模式。 |
注意: 速度与精度是一对天生的矛盾。你搜得快,可能错过峰值;你搜得细,时间就长。实际工程中,我们通常用“粗搜+细搜”的两步法来平衡。先大步快速找到峰值附近,再小步精确锁定。
下面这张图,是我自己总结的AF算法知识体系。你可以把它当成我们这门课的地图。
这张图把AF系统拆成了三个核心模块:评价函数、搜索策略、马达控制。我们这门课,就是围绕这三个模块展开的。评价函数告诉你“清不清楚”,搜索策略告诉你“往哪走”,马达控制告诉你“怎么走”。
好了,第一章就到这里。内容不多,但都是基础。后面的章节,我们会一个一个模块地深入进去。记住我今天说的:理解场景,比理解算法更重要。