Camera2与AF自动对焦
1. AF的光学原理
了解自动对焦,需要先了解凸透镜光学成像原理,以及对应的几个概念,如下图:
![](https://img.haomeiwen.com/i8120473/707ad55247d5aba0.png)
- 物距---被拍摄物体到凸透镜的距离。
- 像距---成像平面到凸透镜的距离。
- 焦点---通过凸透镜的、平行主光轴的光线,在主光轴上的会聚点。
- 焦距---凸透镜中心到焦点的距离。
焦距、物距、像距最基本的关系可以用高斯成像公式表示:
![](https://img.haomeiwen.com/i8120473/b30bed34efb4873b.png)
在以上基本概念基础上,需要了解弥散圆的概念,弥散圆是物体一个点经镜片反射后落在成像平面的圆形范围,由于人眼的分辨能力有限,当这个圆半径超过人眼分辨范围半径,物体成像开始变得模糊,反之,半径越小越清晰。位于焦点前后最大分辨范围的两个容许弥散圆之间的距离称为焦深,同时存在物体光线能落在焦深范围内的最大和最小物距范围,这段距离对应被摄物体清晰的范围,就称为景深。
![](https://img.haomeiwen.com/i8120473/fc107fee8cae593d.png)
因此,如上图,为了使得采集的图像的到最佳清晰度,自动对焦的过程,就是通过逐渐调整像距,寻找图像In Focus的过程。
2. AF对焦系统
![](https://img.haomeiwen.com/i8120473/392804a9454c3678.png)
自动对焦基本过程是:
一个相机完整的对焦控制系统如图4,由采集图像,算法处理,控制模块等构成。对焦过程是个步进搜索和收敛的过程。
这个过程AF算法通过马达控制流程朝一个方向移动镜头的位置,并将对应位置的采集帧图像送到图像处理器(ISP)处理,然后计算对应的图像对比度值或者反差值(Focus value,简称FV值),根据FV结果输出镜头下一步该往哪个方向移动多少距离,并使用电机驱动镜头到达那个位置,接着在该位置得到新采集图像,又继续计算和移动到下一步位置…如此,经过几个循环收敛,找到FV最大峰值位置,就认为对焦成功。
常见的搜索焦点的算法,如爬山算法,该算法类似爬山,通过两大步骤,先大步阶粗扫和后小步阶细扫进行搜索,最后的找到最清晰的镜头位置。如下图基于反差式自动对焦的算法示意,
![](https://img.haomeiwen.com/i8120473/40b6be60a5b96e7b.png)
3. AF对焦检测
手机上自动对焦的技术有两种类型:
- 主动式自动对焦,如激光对焦;
- 被动式自动对焦,如反差式自动对焦(Contrast AF,简称CAF)和相位探测自动对焦(Phase Detection Auto Focus,简称PDAF)
主流的还是以被动式自动对焦对焦为主。在FV检测上,PDAF速度上比CAF更优优势。CAF由于需要对大量图像数据进行分析,而PDAF基于生产sensor半掩模工艺结合算法实现,工艺复杂,但计算复杂低。当光线通过PDAF相位检测设备上的传感器,如图5(1-4)表示的成像聚焦状态,可以看出两个曲线之间的相位差表示焦点的对焦的程度。
PDAF主要应用于高端数码相机和智能手机上,CDAF则主要应用于入门级数码相机和相机模块化智能手机上。
![](https://img.haomeiwen.com/i8120473/17291d65ad64b1d4.png)
其他还有一些简单的纯软件算法实现的无参考清晰度评价函数,如基于熵统计、FFT频域以及基于空间边缘检测的算法如:
-
Laplacian算子:
-
sobel算子:
-
prewitt算子:
-
sobel算子:
其中,熵统计、FFT频域准确性不高,目前,常用的空间边缘检测的算法可以替代CAF的选择。
4. Camera2 AF
4.1 Camera2 AF请求
(1) CONTROL_AE_MODE
CameraCharacteristics#CONTROL_AF_AVAILABLE_MODES
支持的AF控制模式。
CONTROL_AE_MODE | 说明 |
---|---|
CONTROL_AF_MODE_OFF | 手动对焦模式。AF算法的结果会被忽略 |
CONTROL_AF_MODE_AUTO | 自动对焦模式,触发对焦的时机由App决定 |
CONTROL_AF_MODE_MACRO | 自动对焦模式,触发对焦的时机由App决定,当镜头离被摄物理很近时优先考虑这种模式 |
CONTROL_AF_MODE_CONTINUOUS_VIDEO | 自动对焦模式,触发对焦的时机由AF算法决定,适用于录像,对焦行为应适合于高质量的视频录制;这意味着较慢的焦点移动。 |
CONTROL_AF_MODE_CONTINUOUS_PICTURE | 自动对焦模式,触发对焦的时机由AF算法决定,适用于拍照,对焦行为应适合于静态图像捕捉;这意味着尽可能快地对焦。 |
CONTROL_AF_MODE_EDOF | 扩展景深模式,似乎所有物体都在焦距内。 |
(2) AF Trigger
CONTROL_AF_TRIGGER
控制是否要触发Auto Focus。
CONTROL_AE_MODE | 说明 |
---|---|
CONTROL_AF_TRIGGER_IDLE | 未触发对焦 |
CONTROL_AF_TRIGGER_START | 触发Auto Focus。通常只在单个CaptureRequest中触发Auto Focus。如果在Repeating的CaptureRequest中设置了触发,则Auto Focus会不停地一直重复对焦。Manual Focus模式无效 |
CONTROL_AF_TRIGGER_CANCEL | 取消正常进行中的Auto Focus |
(3) AF REGIONS
CONTROL_AF_REGIONS
设置AF的区域。
- 设置AF Regions条件:
- CameraCharacteristics#CONTROL_MAX_REGIONS_AF > 0
(4) AF Scene Change
CONTROL_AF_SCENE_CHANGE
在当前AF Regions内检测到场景变化,需要重新对焦了。
CONTROL_AF_SCENE_CHANG | 说明 |
---|---|
CONTROL_AF_SCENE_CHANGE_DETECTED | 比如FOV发生变化、场景发生明显地运动、光照发生变化 |
CONTROL_AF_SCENE_CHANGE_NOT_DETECTED | 未检测到变化 |
CONTROL_AF_TRIGGER_CANCEL | 取消正常进行中的Auto Focus |
(5) 手动对焦
LENS_FOCUS_DISTANCE
手动对焦。
- 手动对焦依赖:
- CameraCharacteristics.LENS_INFO_MINIMUM_FOCUS_DISTANCE 如果该值为0表示不支持手动调整对焦距离。
- 取值范围是:[0.0f, android.lens.info.minimumFocusDistance]
- Focus Range
CaptureResult#LENS_FOCUS_RANGE
,当前景深范围,以(near, far)表示,该值在某些设备上可能为NULL。
2.2 Camera2 AF状态
CONTROL_AF_STATE | 说明 |
---|---|
CONTROL_AF_STATE_INACTIVE | AF未触发对焦 |
CONTROL_AF_STATE_PASSIVE_SCAN | AF自动触发Scan,当AF mode设置为CONTINUOUS模式时才会有这种状态 |
CONTROL_AF_STATE_PASSIVE_FOCUSED | AF自动触发Scan后对焦成功,随时可能再次触发对焦 |
CONTROL_AF_STATE_PASSIVE_UNFOCUSED | AF自动触发Scan后对焦失败,随时可能再次触发对焦 |
CONTROL_AF_STATE_ACTIVE_SCAN | AF被动触发Scan(App触发),当AF mode设置为AUTO or MACRO AF mode时才会有这种状态 |
CONTROL_AF_STATE_FOCUSED_LOCKED | AF被动触发Scan后对焦成功,只有再切换AF mode或主动afTrigger时才会再次对焦 |
CONTROL_AF_STATE_NOT_FOCUSED_LOCKED | AF被动触发Scan后对焦失败,只有再切换AF mode或主动afTrigger时才会再次对焦 |
4. 参考文献:
[1] 手机是如何实现自动对焦的?
[2] 反差检测自动对焦(CDAF)与相位检测自动对焦(PDAF)原理
[3] Android Camera2 API AF自动对焦