第43讲 AF自动对焦 第二部分 - Android Camera2 API

本讲是Android Camera专题系列的第43讲,我们介绍Android Camera2 API专题的AF自动对焦第二部分。

更多资源:

资源 描述
在线课程 极客笔记在线课程
知识星球 星球名称:深入浅出Android Camera
星球ID: 17296815
Wechat 极客笔记圈

AF Trigger

CaptureRequest控制是否要触发Auto Focus

CONTROL_AF_TRIGGER取值 描述
CONTROL_AF_TRIGGER_IDLE 未触发Auto Focus
CONTROL_AF_TRIGGER_START 触发Auto Focus,如果是Manual Focus模式,触发无效。通常我们只需要在单个CaptureRequest中触发Auto Focus。如果在Repeating的CaptureRequest中设置了触发,则Auto Focus会不停地一直重复对焦
CONTROL_AF_TRIGGER_CANCEL 取消正常进行中的Auto Focus,让AF State恢复到初始状态

可以在一个CaptureRequest中同时使能AF Trigger和AE Precapture Trigger,HAL这边可能会串行完成每类Trigger

AF Regions

CONTROL_AF_REGIONS

  • 设置AF算法的ROI

  • 只有当CameraCharacteristics#CONTROL_MAX_REGIONS_AF > 0时才能设置AF Regions(通常该值是1)

  • 坐标系同AE regions逻辑

AF Scene Change

CaptureResult#CONTROL_AF_SCENE_CHANGE

  • 在当前设置的AF ROIs内是否检测到显著的场景变化,需要重新对焦了

注:并非所有设备都支持上报该值,使用前需要检查CameraCharacteristics#getAvailableCaptureResultKeys

CONTROL_AF_SCENE_CHANGE取值 描述
CONTROL_AF_SCENE_CHANGE_DETECTED 比如FOV(视场角)发生变化、场景发生明显地运动、光照发生变化
CONTROL_AF_SCENE_CHANGE_NOT_DETECTED 未检测到变化

Manual Focus

是否支持手动控制对焦距离

  • CameraCharacteristics#LENS_INFO_MINIMUM_FOCUS_DISTANCE
    • 如果该值为0表示不支持手动调整对焦距离

    • MANUAL_SENSOR capability的Camera该值必须 > 0

如何控制对焦距离

  • CaptureRequest#LENS_FOCUS_DISTANCE

    • 从镜头最前面的表面测量。

    • 0.0, 表示焦点无穷大

    • 取值范围是:[0.0f, android.lens.info.minimumFocusDistance]

    • 这个设置不会当帧生效,可能需要几帧,镜头才能移动到要求的焦点距离。移动过程中android.lens.state会被设置为moving

Focus Range

CaptureResult#LENS_FOCUS_RANGE

  • 当前景深范围,以(near, far)表示

  • 该值在某些设备上可能为NULL

Focus Range

超焦距点

CameraCharacteristics#LENS_INFO_HYPERFOCAL_DISTANCE

  • 当前镜头的超焦距点

  • 当你对焦在这个超焦距上时,能够得到在这个光圈和焦距组合下的最大景深范围

Lens State

CaptureResult#LENS_STATE

  • 表示当前镜头是否在移动
LENS_STATE取值 描述
LENS_STATE_STATIONARY 镜头处于静止状态
LENS_STATE_MOVING 镜头正在移动

Focus Distance校准质量

CameraCharacteristics#LENS_INFO_FOCUS_DISTANCE_CALIBRATION

  • Focus distance的校准质量,描述Focus Distance相关参数的可靠性(Focus Distance,Focus Range,HyperFocalDistance)
LENS_INFO_FOCUS_DISTANCE_CALIBRATION取值 描述
LENS_INFO_FOCUS_DISTANCE_CALIBRATION_UNCALIBRATED = 0 未校准过,Focus distance没有任何物理含义,相同的Focus Distance可能有不同的对焦结果。
CaptureRequest设置的Focus Distance与最终CaptureResult生效的Focus Distance误差不超过25%
LENS_INFO_FOCUS_DISTANCE_CALIBRATION_APPROXIMATE = 1 近似校准过,Focus Distance以屈光度来衡量。相同的Focus Distance可能有不同的对焦结果。
CaptureRequest设置的Focus Distance与最终CaptureResult生效的Focus Distance误差不超过10%
LENS_INFO_FOCUS_DISTANCE_CALIBRATION_CALIBRATED = 2 校准过,Focus Distance以屈光度来衡量。相同的Focus Distance有相同的对焦结果。
CaptureRequest设置的Focus Distance与最终CaptureResult生效的Focus Distance误差不超过5%

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程

Android Camera2 API