一,对焦原理
通过相机镜头中镜片组的前后移动,改变像距的位置,使物像恰好落在底片或感光底片上。
焦点(focus) 平行光线射入凸透镜时,镜头将所有的光线聚集在一点,这个点就叫做焦点。焦点和镜片光学中心的距离叫做焦距。对于我们照相机来说,照相机的镜头就是一个凸透镜,胶片或者感光底片就是屏幕
二 camera2 AF API
1.设置AF的模式,用于选择当前的对焦模式的控件,由请求设置中的框架进行设置,设置的key值为CONTROL_AF_MODE
public static final Key<Integer> CONTROL_AF_MODE = new Key<Integer>("android.control.afMode", int.class);
其value取值如下:
Vaule | 描述 |
---|
CONTROL_AF_MODE_OFF | 自动对焦程序不再控制镜头,框架/应用直接控制镜头位置。 | CONTROL_AF_MODE_AUTO | 单相扫描自动对焦模式,在该模式下镜头不会移动,当 trigger是activated的时候,AF的状态将转换为ACTIVE_SCAN,然后出 scan的结果(FOCUSED or NOT_FOCUSED) 如果镜头没有固定焦距,所有设备都支持。 | AF_MODE_MACRO | 单相扫描近距离自动对焦。镜头在该模式下不会移动,除非autofocus trigger 的行为被调用。 当 trigger 被触发后,AF的状态将转换为ACTIVE_SCAN,然后出扫描结果(FOCUSED or NOT_FOCUSED)。这个模式对那些离镜头很近的物体的对焦进行优化。也就是微距。 | AF_MODE_CONTINUOUS_VIDEO | 流畅连续对焦,用于录制视频。触发后会立刻将焦点锁定在当前位置。一旦收到取消,算法应转换回INACTIVE并恢复被动扫描。 请注意,此行为与CONTINUOUS_PICTURE不同,因为必须立即取消正在进行的PASSIVE_SCAN。 | AF_MODE_CONTINUOUS_PICTURE | 快速连续对焦,用于快门零延迟静像拍摄。待当前处于活动状态的扫描结束后,触发即可锁定焦点。取消后即会恢复连续对焦。 | AF_MODE_EDOF | 扩展景深(数字对焦)模式。相机设备将自动生成具有扩展景深的图像; 在拍照之前不需要进行特殊的聚焦操作。AF trigger 被忽略,而且AF的状态一直是INACTIVE。 |
AF_MODE_CONTINUOUS_VIDEO,AF_MODE_CONTINUOUS_PICTURE的区别就是,AF_MODE_CONTINUOUS_VIDEO的对焦过程中焦点的移动较慢,AF_MODE_CONTINUOUS_PICTURE的对焦的过程的尽可能的快。**
2.请求中设置完成对焦模式后怎样触发自动对焦
通常,应用程序对于单次拍照应该将此字段设置为START or CANCEL。
ANDROID_CONTROL_AFTRIGGER | 用于启动自动对焦扫描的控件。具体意义取决于模式和状态。由框架在请求设置中进行设置。 |
---|
AF_TRIGGER_IDLE | 当前未触发。 | AF_TRIGGER_START | 立即触发自动对焦。扫描效果取决于模式和状态。 | AF_TRIGGER_CANCEL | 自动对焦将转为初始状态,并且取消现在的任何active trigger |
3. CONTROL_AF_STATE 用于描述当前自动对焦算法现在的状态。当触发完成后我们会收到HAL给我们返回的目前对焦状态
当改变和开启自动对焦模式时,总会重置 AF 的状态为INACTIVE。状态的结果是针对于这一帧图像的(与这帧图像同步),如果AF状态变为FOCUSED,则与该结果相关联的图像数据应该是清晰的。
CONTROL_AF_STATE | 用于描述当前 AF 算法状态的动态元数据,由结果元数据中的 HAL 报告。 |
---|
CONTROL_AF_STATE_INACTIVE | 未进行对焦,或算法被重置。镜头未移动。始终处于 MODE_OFF 或 MODE_EDOF 状态。当设备开启时,必须以此状态启动。 | CONTROL_AF_STATE_PASSIVE_SCAN | AF当前正在执行AF扫描,以连续自动对焦模式启动相机设备。只有用于CONTINUOUS_* AF modes,才会出现此状态。这是一个瞬间的状态,相机设备在捕获结果中可以跳过报告此状态 | CONTROL_AF_STATE_PASSIVE_FOCUSED | PASSIVE_FOCUSED:AF目前认为它已经聚焦,但随时可能重新开始扫描。只有用于CONTINUOUS_* AF modes,才会出现此状态。这是一个瞬间的状态,相机设备在捕获结果中可以跳过报告此状态。 | CONTROL_AF_STATE_PASSIVE_UNFOCUSED | AF在没有找到焦点的情况下完成被动扫描,并且可以随时重新开始扫描。只有用于CONTINUOUS_* AF modes,才会出现此状态。这是一个瞬间的状态,相机设备在捕获结果中可以跳过报告此状态。 | CONTROL_AF_STATE_ACTIVE_SCAN | AF正在执行AF scan。只有用于AUTO or MACRO AF modes,才会出现此状态。这是一个瞬间的状态,相机设备在捕获结果中可以跳过报告此状态。 | CONTROL_AF_STATE_FOCUSED_LOCKED | AF认为它是正确聚焦并锁定焦点。镜头将保持静止,直到AF mode改变或者一个新的AF trigger 触发 | CONTROL_AF_STATE_NOT_FOCUSED_LOCKED | AF无法成功聚焦并锁定焦点。镜头将保持静止,直到AF mode改变或者一个新的AF trigger 触发 |
三,Camera2对焦的状态转换
①AF_MODE_AUTO or AF_MODE_MACRO
这两个模式下:INACTIVE ,ACTIVE_SCAN ,FOCUSED_LOCKED,NOT_FOCUSED_LOCKED,这四个状态中切换当到达FOCUSED_LOCKED状态时表示对焦成功, 这个时候图像最清晰。
②AF_MODE_CONTINUOUS_VIDEO or AF_MODE_CONTINUOUS_PICTURE
当在AF_MODE_CONTINUOUS_*(CAF模式)和AF_MODE_AUTO / AF_MODE_MACRO之间切换时,相机设备可以跳过INACTIVE或PASSIVE_SCAN状态。 当触发AF时,要切换模式,将会重新评估AF:
四 ,总结
点击拍照时: 为了尽快对焦且提供恒定的图像流,使用AF_MODE_CONTINUOUS_PICTURE 点击录像时: 为了提供稳定的图像流,不会出现太大的波动,使用AF_MODE_CONTINUOUS_VIDEO
手动对焦时: 使用AF_MODE_AUTO 近景: 使用 AF_MODE_MACRO 拍摄风景时: AF_MODE_EDOF
参考博客
|