Camera AF version 6.0

1、Autofocus concepts
1.1 AF monitor
1.1.1 Value monitor
1.1.1.2 灵敏度参数如何与参数表交互
1.1.2 Monitor algo config paremeters
1.1.3 Value monitor decision logic
1.1.4 Value monitor components
1.1.5 Value monitor bank
1.2 AFserach
1.3 Contrast AF(CAF)
1.4 Phase detection AF(PDAF)
1.4.1 Region of interest (ROI) configuration
1.4.2 PDAF monitor:defocused,confident,and stable
1.4.2.1 Defocus
1.4.2.2 Confident
1.4.2.3 Stable
1.4.2.4 How the confidence table works
1.4.2.5 How the stable table and sence monitor table works
1.4.2.6 How the confidence recover count parameter works
1.4.2.7 How the noise gain table works
1.4.3 PDAF 粗搜(焦点收敛)
1.4.3.1 何时结束粗搜?
1.4.4 PDAF精搜
1.4.5 2PD与精搜
1.5 Time-of-flight(TOF) AF
1.5.1 TOF monitor
1.5.2 TOF coarse search(焦点收敛)
1.5.2.1 当镜头向near方向移动时如何计算聚焦收敛点
1.5.2.1 当镜头向far方向移动时如何计算聚焦收敛点
1.5.3 TOF fine search
1.5.3.1 当镜头移动到Macro侧时参数如何用于设置精搜边界
1.5.3.2 当镜头移动到Infinitity侧时参数如何用于设置精搜边界
1.6 Dual camera instant AF(DCIAF)
1.7 Bayer AF(BAF) stats engine
2、AF tuning overview
2.1.1 AF Tuning须要考虑的因素
3、initial tuning
3.1 actuator相关的tuning参数
3.2 测试actuator driver
3.2.1 CAF扫描测试
3.2.1.1 双向全扫测试
3.2.1.1.1 测试过程
3.2.1.1.2 分析并纠正
3.2.1.2 actuator范围测试
3.2.1.2.1 测试过程
3.2.1.2.2 分析并纠正
3.2.1.3 actuatorsettle time
3.2.1.3.1 测试过程
3.2.1.3.2 分析并纠正
3.2.1.4 FV值对比和tail
3.2.1.4.1 测试过程
3.2.1.4.2 分析并纠正
3.2.1.5 Lens映射距离
3.2.1.5.1 测试过程
3.2.1.5.2 分析并纠正
3.3采集并确认golden模组的lens位置数据
3.4 测试清晰度,一致性和速度
3.4.1 测试给定场景的清晰度和准确度
3.4.2 测试AF速度
4、HAF tuning
4.1 HAF参数
4.1.1 用于fine search扩展的HAF参数
4.2 Tune PDAF
4.2.1 验证PDAF对焦标准
4.2.2 验证PDAF的触发
4.2.3 执行HAF中的PDAF测试
4.2.3.1 测试方式
4.2.3.2 分析并校订
4.2.4 测试图片清晰度与一致性
4.2.4.1 测试过程
4.2.5 测试AF速度
4.2.6 PDAF参数、
4.2.7 2PD参数
4.3 Tune TOF AF
4.3.1 Tune TOF前的注意事项
4.3.2 验证TOF sensor
4.3.3 使能TOF AF
4.3.4 执行HAF中的TOF测试
4.3.4.1 测试方法
4.3.4.2 分析并校订
4.3.5 测试图像清晰度与一致性
4.3.4.1 测试方法
4.3.6 测试AF速度
4.3.7 TOF参数
4.3.8 Tune AF SAD参数 threshold最小值与最大值
4.4 Tune DCAF
4.4.1 验证lens位置映射距离
4.4.1.1 面向正常方向
4.4.1.2 方向面向上/下
4.4.1.3 排除镜头位置映射
4.4.2 测试图像清晰度与一致性
4.4.2.1 测试方法
4.4.3 测试AF速度
4.4.4 DCIAF参数
5、高级AF tuning流程
5.1 Tune CAF triggering
5.2 Tune 初始lens位置
5.3 手动调整AF步长
5.4 Tune FV_min
5.5 Tune ROI参数
5.5.1 Tune CAF ROI
5.5.2 Tune TAF ROI
5.6 Tune 基于软件的AF统计信息相关
5.7 Tune BAF统计信息
5.7.1 Tune BAF ROI
5.7.2 Tune BAF gamma
5.7.3 Tune Y的转换
5.7.4 Tune 滤波器系数
5.7.5 BAF统计类型
5.7.6 基于重力的FV重力特性
5.8 Tune点光源条件
5.8.1 Tune点光源场景的低光条件
5.8.1.1 调整AF过滤器
5.8.1.2 调整平坦比例
5.8.2 设置点光源检测
5.8.3 Tune点光源处理参数
5.8.4 点光源参数指导
5.8.5 解决点光源场景问题
5.8.6 为ROI中网格赋予权重
5.9 Touch/face PDAF特性
5.10 Face AF问题:未聚焦在脸部而是聚焦在背景
5.11 常见问题:一致性和准确性
5.12 常见问题:AF速度
5.13 执行AE扫描测试
6、AF Tuning用例
6.1 CAF触发过于灵敏,而且在缓慢panning状况下容易触发
6.2 CAF触发不够灵敏,触发时间太长
6.3 AF始终对焦到背景,不对焦前景
6.4 AF和TAF须要针对速度进行优化,但CAF须要针对平滑度进行优化
6.5 在AF搜索阶段FOV改变太多
6.6 须要改善AF速度
6.7 AF在中间距离表现较好,macro端和infinity端表现差
6.8 同一场景AF表现不一致
6.9 在夜景/低光/低对比度场景下AF失败率太高
6.10 对于没有云的天空场景,图像一般是模糊的
6.11 PDAF在低纹理场景中作出没必要要地触发搜索
6.12 PDAF在具备倾斜边缘或线条的场景中失败
6.13 AF搜索未结束拍照就不动了
6.14 手抖致使的FV降低和搜索不许确
6.15 手抖处理消耗太多功率
6.16 当检测到face时AF进行了没必要要的从新触发
7、AF测试程序
7.1 开启全扫搜索和AF log
7.2 开启AF log
7.3 在预约的lens位置拍摄图像
7.4 在当前手动对焦位置拍摄图像
7.5 确认FV状态
7.6 进行AF健全测试

1、Autofocus concepts

AF的目的是肯定实现对焦的最佳镜头位置,并触发actuator将镜头移动到该位置。通常来讲,AF过程以下:算法

  1. AF算法同时检测硬件和软件统计数据,以肯定是否存在场景变化。
  2. 若是算法检测到场景变化,则算法触发搜索。若是启用了基于深度的算法,则CAF做为后备算法。
  3. 算法的粗搜索肯定下一个镜头位置。
  4. actuator逐渐将镜头移动到下一个位置。
  5. 精搜索找到最终的镜头位置。
  6. actuator将镜头移动到最终位置。

    AF算法包含在HAF中,同时它是可扩展的,默认状况下了实现三种基于深度的算法(即PDAF,TOF,DCIAF)以及对比度AF(CAF)。每种算法都实现了检测和搜索功能。
    使用HAF,能够集成新算法,修改现有算法的行为,甚至在组合多个算法时更改混合逻辑。

1.1 AF monitor

AF monitor的主要功能是场景变化检测。直观地说,场景变化意味着当前场景不在焦点上,这将致使算法触发搜索以找到焦点的最佳镜头位置。
每种算法都有本身的标准来检测场景变化。例如,CAF依赖于参考帧的Gyro参数,绝对差值之和(SAD)参数和参考SAD
(SADR)参数检测场景变化。相比之下,PDAF依赖于当前帧的defocus值,算法的置信度和场景的稳定性的组合。
AF monitor还负责场景平移检测。为避免没必要要的搜索,算法区分场景变化和场景平移。搜索算法在场景稳定以前不会开始搜索,即不进行panning。简而言之,scene change和panning检测是AF monitor状态中的两个基本功能。shell

1.1.1 Value monitor

Value monitor是3A版本6.0中的新增功能。虽然它最终将应用于其余monitor算法,但Value monitor此时仅适用于CAF。其余监控算法(PDAF,TOF和DCIAF)配置如3A版本5.1。架构

  • Monitor algo config
    包含CAF,PDAF,TOF和DCIAFmonitor算法中使用的每种统计类型的灵敏度设置(在此版本的AF中只有CAF可用,其余算法在3A版本5.1中配置为AF) 。
  • Value monitor bank
    包含每种类型的stat的三组参数(低,中和高)。

1.1.1.2 灵敏度参数如何与参数表交互

  1. GyRo Sensitivity的值为50,这是全部灵敏度参数的默认值。全部灵敏度参数的范围是1到100(0关闭)。 1-100之间的全部灵敏度都是有效的,而且会有一个合理的检测行为。
  2. 因为灵敏度为50,所以选择中等灵敏度参数。若是灵敏度参数为1,则选择低灵敏度参数。若是灵敏度为100,则选择高灵敏度参数。若是灵敏度在1到50或50和100之间,则分别使用低和中或中和高之间的线性插值。每一个配置文件中的参数(低,中,高)是相同的。可是,它们的值已预先配置为根据monitor算法配置中的灵敏度参数提供不一样级别的灵敏度。
  3. 根据做为1和2的结果生成的配置,实例化CAF和使用VM_SET_TYPE_GYRO配置的任何其余监控算法。
    若是想要使GYRO灵敏度比中等灵敏度配置文件更敏感,那么最简单的方法是将GYRO灵敏度修改成大于50。若是想要使GYRO灵敏度不如中等灵敏度敏感配置文件,而后将灵敏度修改成小于50。
    在tuning过程当中使用逻辑灵敏度参数时,value monitor bank中的参数不会更改。

1.1.2 Monitor algo config paremeters

默认状况下有4个monitor算法配置(CAF, PDFA, TOF, DCIAF),每一个算法可能依赖于不一样的数据,有着不一样的灵敏度参数。ide

1.1.3 Value monitor decision logic

为了检测和区分场景变化和panning,value monitor分析多个输入信号,而后输出二进制决策。应用指定的决策逻辑来肯定当前场景是否正在panning。所以,在AFmonitor中使用特定拓扑(断定逻辑)。为简化设计,拓扑仅采用二进制输入(0或1)。仅在拓扑中指定决策逻辑。
CAFmonitor拓扑的示例以下图所示。它说明了value monitor的二进制输出如何经过简单的逻辑组合启用场景更改/平移检测。
工具

1.1.4 Value monitor components


Meta Filter包含一系列滤波过程,例如中值滤波器,移动平均值(MVAVG)滤波器和无限脉冲响应(lIR)滤波器。当启用这些滤波过程时,Meta Filter可以处理有噪声的输入信号。
Basic monitor是具备两种检测类型的monitor:性能

  • VM_DETECTOR_STABLE-检测信号是否高于 threshold
  • VM_DETECTOR_UNSTABLE-检测信号是否低于 threshold
    高于或低于 threshold的决策的连续计数被保持而且在检测逻辑中使用。
    参数集经过value monitor bank中的value monitor集类型实现。每种类型包含三种灵敏度配置文件(低,中,高)。给定集类型(例如,GYRO)的配置文件包含相同的参数,但值随配置文件而变化。例如,GYRO的高灵敏度配置文件包含与中等和低配置文件相同的参数。可是,高配置文件的值致使对检测到的信号稳定性有着更高灵敏度。
    应该在设计阶段肯定与灵敏度无关的参数。

1.1.5 Value monitor bank

使用value monitor的主要目的之一是隔离不一样算法之间的依赖关系。Chromatix中的value monitor bank设计用于在不一样算法之间共享value monitor设置(即VMSET_TYPE)。这使得一个值monitor设置能够在许多算法中使用。下图说明了如何在不一样算法之间共享VM SET_TYPE以及如何使用自定义设置。
测试

1.2 AFserach


在自动对焦的搜索阶段,算法使用各类方法来肯定最佳镜头位置以实现聚焦并触发actuator将镜头移动到该位置。搜索阶段分为粗搜索和精搜。
粗搜索的目标是将镜头移向精搜的近界限。下图说明了DCIAF算法中粗搜索和精搜的基本操做。
粗搜快速将镜头移动到适当的位置以开始精搜。精搜而后将镜头移动到具备最高FV值的位置。粗搜索和精搜的边界,threshold,步长和limit是可配置的。能够调整搜索参数以平衡速度和准确性,或者强调速度或准确性。粗搜有时也被称为焦点收敛。

每种算法使用不一样的方法计算搜索的镜头位置。优化

1.3 Contrast AF(CAF)

Constrast AF(CAF) 检测来自陀螺仪传感器的运动值和luma的绝对差值之和(SAD),以检测场景变化并触发搜索。若是符合稳定性和置信度标准,则CAF会触发搜索达到最高FV的镜头位置。
默认的AF搜索算法是single AF,这是一种基于对比度的算法。
如下是CAF和Single AF的关键点:ui

  • CAF包含默认监测和搜索算法
  • CAF monitor依赖于Gyro值和SAD的变化来检测场景变化
  • CAF search也称为single AF,是一种基于对比度的算法
  • single AF搜索FV中的峰值以肯定镜头位置
  • 若是启用了任何基于深度的算法,则CAF仅被当作备用

1.4 Phase detection AF(PDAF)

PDAF是经过测量由图像传感器中的相位检测像素捕获的图像对之间的视差来工做的。视差的大小和符号与defocus相关,并用于估计最佳焦点的最佳镜头位置。
在手机上,像素级设计可为左右像素建立有效光圈,像人眼同样,左右像素独立地捕捉光线。若是场景中的光收敛到相邻的左和右相位检测像素,则没有视差而且镜头处于正确位置。若是光线没有收敛在相邻的左右相位检测像素上,则存在视差而且镜头不在正确的位置。
下图表示了收敛在相邻和非相邻相位检测像素上的光以及基于视差的所得聚焦条件。

有三种用于生成左和右像素的常见像素设计方法:spa

  • Sparse PDAF with metal shielding
  • Dual photo diodes PDAF/2PD
  • Sparse PDAF with 2x1 OCL

    Sparse PDAF with metal shielding
    Sparse PDAF是传统的PDAF方法。在Sparse PDAF中,存在像素对,其中每一个像素被半遮蔽,使得每一个像素经过透镜的不一样部分接收光。在该方法中,使用1%至3%的传感器像素。在这些像素上,u-lens下方的金属屏蔽物经过在某些角度阻挡光线而产生有效的不对称光圈。
    出于成像目的,PD像素的值被周围像素的内插值替换,与缺陷像素如何被校订的方式相似。
    Dual photo diodes PDAF/2PD
    在双二极管PDAF(也称为2PD)中,每一个传感器像素由两个光电二极管组成,顶部是单个u-lens。光电二极管相对于u-lens的位置产生有效的不对称孔径。左右光电二极管电平相加以重建常规拜耳模式
    较高密度的PDAF像素提供了几个优势:
  • No artifacts(defect) compensation required(无需人工补偿)
  • No light loss
    Sparse PDAF with 2x1 OCL
    该方法相似于2PD,由于L/R像素的有效孔径是从像素和u-lens的相对位置导出的。由于使用了约3%的传感器像素因此比较稀疏。然而,没有金属屏蔽容许PD像素收集更多光,从而产生2x1采用屏蔽设计,优于Sparse PDAF。

1.4.1 Region of interest (ROI) configuration

ROI配置参数设置ROI位置和用于计算PD结果的ROI网格数,这些信息对于PDAF算法是必不可少的。设置太大的AF ROI可能会混淆PD结果和PDAF最终决策。这是由于不一样距离的物体进入PD ROI并使最终的PD保持在远物体和近物体之间的折中位置。
对全部状况使用中心2x2ROI网格。下图是中心2x2网格的示例。以IMX230为例,当传感器图像的area_mode用做fixed_window(8x6)时,传感器图像被分为H8 * V6 ROI网格。

1.4.2 PDAF monitor:defocused,confident,and stable

一般,PDAF检测场景的变化并在知足如下条件时触发搜索:

  • 当前帧的defocus值大于defocus threshold
  • 算法confident
  • 场景稳定
    若是知足这些条件,则PDAF触发搜索。若是没有,则PDAF继续检测场景,或者在某些状况下,切换到CAF。

1.4.2.1 Defocus

计算相位差并将其转换为defocus值,以指示实现聚焦所需的镜头移动的大小和方向。正defocus值意味着运动由近到远,负defocus值意味着运动从远到近。当defocus值接近零时,表示目标处于焦点。
defocus的计算方法以下:

Final PD value - 每一个ROI PD的加权平均值和置信度值,仅包括置信度值大于最小置信度 threshold的ROI。
DCC - Defocus转换系数,由模组供应商校准。
VCM sensitivity - AF校准结果,来自模组供应商。

1.4.2.2 Confident

置信水平是在相位差估计中使用的场景中的线条数量(例如,垂直边缘,场景亮度)的功能。高置信度意味着ROI中的PD具备小的差别和更高的边缘强度。置信表用于定义相对于sensor gain的最小置信度 threshold。

1.4.2.3 Stable

经过评估deocus值历史来计算稳定性,若是值在可调threshold内,则认为场景稳定。

1.4.2.4 How the confidence table works

  • 当噪声增益<第一个噪声增益时,彻底应用第一个min_conf。
  • 当噪声增益>最后噪声增益时,彻底应用最后一个min_conf。
  • 根据噪声增益位于第一个和最后一个entry的增益之间的位置,对第一个和最后一个entry之间的min _conf进行线性插值。
  • 仅当ROI PD置信度值超过最小置信度 threshold时才考虑ROI PD置信度值。

1.4.2.5 How the stable table and sence monitor table works

  • 若是defocus值(a)大于defocus threshold,则PDAF进入搜索状态并重置稳定计数。
  • 若是与前一帧的defocus值相比,defocus值(b)在深度稳定 threshold的范围内,则稳定计数递增。
  • 若是稳定计数(c)大于min_stablecnt,则PDAF触发搜索。

1.4.2.6 How the confidence recover count parameter works

在忽然的深度变化期间,PD library暂时下降两帧或三帧的置信水平。wait_conf_recover参数有助于PDAF区分置信水平的持续降低(例如,没有垂直边缘)与临时降低(例如,忽然的深度变化)。这避免了每次在场景深度的忽然变化期间过早触发CAF。
在下面的示例中,若是not_conf_cnt大于wait_conf_recover_cnt,则因为置信水平的持续降低,算法会切换到CAF。

1.4.2.7 How the noise gain table works

当应用更高的增益时,来自传感器的PD信息可能变得有噪声。当噪声增益较高时,PDAF可能会获得不可靠的defocus值,这可能致使聚焦失败。要适应更高的增益并保持精度,能够经过调整噪声表来增长精细扫描范围。
经过将适当的乘数从噪声增益表应用于精细扫描步长来计算精细扫描范围。

Fine−stepfocusscanrange=Finescanstepsize∗Rangemultiplier(noisegain[dB])


1.4.3 PDAF 粗搜(焦点收敛)


在PDAF中,粗搜控制镜头移动到焦点位置。相位差越大,视差越大、意味着defocus值越大。以下图所示,当相位差较大时,则相应的噪声水平越高;当相位差小时,噪声水平也很小。随着镜头移近最佳焦点,噪音更小。

所以,有必要将自动聚焦做为迭代过程进行,其中镜头逐渐移动以实现最佳对焦。迭代过程致使平滑的AF收敛并防止过冲行为。
为了使AF平滑,PDAF使用迭代运动来提供良好的AF收敛用户体验并防止过冲行为。PDAF Focus table(focus_tb1)包含根据相位差估计指定所需镜头移动百分比的entry。move_pcnt tuning参数根据原始defocus距离将一个大镜头移动分解为小镜头移动。

更高的百分比意味着更少的迭代镜头移动、更快的AF速度和焦点跟踪。可是,这可能致使调整过分。校订过冲所需的镜头移动会产生不平滑的AF收敛和较差的用户体验。

1.4.3.1 何时结束粗搜?


focus_done_threshold参数决定PDAF是否收敛,若是defocus小于focus_done_threshold则PDAF结束coarse search而且进入fine serach(若是禁用了fine search则本次直接搜索完成)。若是defocus大于focus_done_threshold则PDAF保持粗搜。
focus_done_threshold设置的越大,则完成coars search进入fine search的速度就越容易,对于2PD来讲,focus_done_threshold一般使用较小的值(例如,6)
默认的focus_scan表以下:

1.4.4 PDAF精搜

因为相位差计算在某些条件下不够准确,所以PDAF算法切换到CAF以进行精搜并确认最终峰值位置。影响相位差精度的因素包括场景条件(例如,低光,图像纹理,颜色和距离)和镜头/传感器制造问题。
若是使用2PD并依赖PD来找到最终的目标,则禁用精搜。

1.4.5 2PD与精搜

在大多数状况下,2PD找到焦点位置无需精搜。然而,在一些具备挑战性的场景中,来自精搜的FV用于定位最终焦点位置。此行为可经过参数pdaf.reserve[50-60] conf_table_high进行配置。
基于conf_table_high中的noise_gain和min_conf参数,2PD过程计算high_conf的值。若是来自PD_lib的置信度值大于high_conf,那么2PD依赖于PD信息来到达AF目标而且不须要精搜。若是PD_lib的置信度小于high_conf,则2PD会调用精搜。

1.5 Time-of-flight(TOF) AF


在TOF AF中,激光传感器经过计算向目标发射红外光和在接收器处接收红外光之间的时间来测量到目标的距离。基于光子行进时间和光速来计算相机与目标之间的距离。计算的准确性取决于基于对比度的AF调整的准确性。
与常规CAF相比,TOF对焦速度明显更快。在低光至正常光照条件下,TOF性能最佳。但在室外条件下,传感器难以区分激光发射器发出的光和来自太阳光的光。

1.5.1 TOF monitor

TOF经过评估激光传感器报告的距离来检测场景的变化。激光传感器还会生成一个错误代码,表示报告距离的置信度。
若是算法对报告的距离有信心,则触发激光辅助粗搜索。搜索将镜头移动到精搜的近界限被称为焦点收敛。若是算法不自信,它能够:

  • 将镜头移动到超焦距位置并从那里开始精搜(若是错误代码指示对象超出60厘米,则执行此操做)。
  • 若是错误代码代表环境光线太多,则回退到CAF。
    一般TOF经过如下逻辑检测场景变化:
  • 在检测阶段开始期间记录参考距离。
  • 距离分为五个region(distance_region)。
  • 每一个区域都有本身的场景变化 threshold(scene_change_distance_thres)。
  • 激光器报告的平均距离是在多个帧上计算的(num_monitor_samples)。
  • 在样本数量上计算距离的标准误差。
  • TOF检测到场景变化并在知足如下条件时触发搜索:
    • 参考距离和平均距离之间的差别大于scene_change_distance_thres,大于normal_light_cnt或low_light_cnt中指定的帧数。
    • 标准误差小于scene_change_distance_std_dev_thres。
      注意该算法还监测来自陀螺仪的统计数据,并在较小程度上监测SAD以检测场景变化并触发焦点收敛。

1.5.2 TOF coarse search(焦点收敛)

焦点收敛状态的目标是将镜头移动到精搜的近界限。

1.5.2.1 当镜头向near方向移动时如何计算聚焦收敛点

假设当前镜头位置是180,在20cm处检测到物体,而且其相应的计算镜头位置是60。所以,焦点收敛点和精搜的起点是60+(6*3)= 78。

镜头在jump_to_start_limit中指定的跳跃中移动到计算的镜头位置。在上图中,jump_to_start_limit是40。所以,镜头首先从180-40 = 140移动,而后从140-40 = 100移动,而后从100-22 = 78移动。在最后一帧中,镜头移动22,由于目的地小于jump_to_start_limit的值。整个lens的移动过程能够用下图表示:

虚线对应的点就是焦点收敛点和精搜的起始点。

1.5.2.1 当镜头向far方向移动时如何计算聚焦收敛点

若是lens向far端移动,则有以下公式:

Focusconvergepoint=Calculatedlenspos−(tofstepsize∗numnearstepsfardirection)


对TOF焦点收敛中涉及的参数进行Tuning时,应在速度和准确度之间取得平衡,以得到适当的用户体验。经过增长jump_to_start_limit能够经过更少的跳跃快速进行移动。较高的值能够在较少的帧中移动镜头,但预览可能会有镜头移动的跳跃。较小的值会使镜头移动更平滑,但消耗更多的帧和所以致使更多的延迟。
此外,num_near_steps_near_direction和num_near_steps_farr_direction也会影响速度、准确度和用户体验。这些参数颇有可能使焦点收敛提早退出并提早进入精搜,致使增长的灵活性但增长了准确度。也可能致使稍后的收敛退出和增长的速度,可是可能致使没有对焦和镜头的过冲。
在低光条件下,算法使用 jump_to_start_limit_low_light而不是 jump_to_start_limit

1.5.3 TOF fine search

TOF算法中的精搜是基于对比度的。精搜的边界是近侧的焦点收敛点,远侧的边界使用num_far_steps_near_directionnum_far_steps_far_direction来设置。取决于镜头移动方向的方向。

1.5.3.1 当镜头移动到Macro侧时参数如何用于设置精搜边界

1.5.3.2 当镜头移动到Infinitity侧时参数如何用于设置精搜边界


理想状况下,对于num_near_steps参数有一个更大的数字,对于num_far_steps参数有一个更小的数字。这是由于最好退出焦点收敛并尽早开始精搜以减小焦点缺失和过冲。 num_far_steps参数保持较小,由于若是在最后没有找到焦点,则精搜将继续,直到找到峰值。

1.6 Dual camera instant AF(DCIAF)

DCIAF经过基于两个相机之间的差异/视差估计物体的距离来显着减小AF.DCIAF工做所需的时间。DCIAF匹配相同物体的突出特征以计算立体视差。

在上图中,一个图像来自主sensor,另外一个来自副sensor。黄色圆圈(p1和p2)是每一个图像中的匹配点。使用

|x1−x2|
来计算视差(D1)而且用于估计距离和图像深度图。该深度信息用于检测场景变化并计算粗焦点位置。
若是基于距离的位置和参考lens位置之间的透镜位置差大于scene_change_lens_pos_th,则检测到场景变化并触发搜索。参考lens位置就是最后聚焦框的位置。

  • DCIAF还可使用陀螺仪数据来检测场景变化并触发搜索。

1.7 Bayer AF(BAF) stats engine

2、AF tuning overview

AF能够在PLD gating完成后开始,而且主要与ISP,AWB和AEC tuning并行发生。其中特别是AEC和ISP,可能会对AFtuning产生影响。

AF Tuning流程

2.1.1 AF Tuning须要考虑的因素

Tuning依赖项 描述
actuator类型
(开环/闭环) 闭环actuator一般能够产生更快的算法收敛时间,还能够产生更一致的sharpness,轻微/无镜片下垂和可靠的性能。
actuator稳定时间
(settling time) 若是settle time超过12ms,则AF性能变现不会很好
模组不一样 若是有OTP数据,模组数据能够被抽象话。若是没有OTP数据且模组差别较大,可能没法cover这样异常的模组
AEC Exposure table
曝光表 曝光表影响actuator根据FV移动lens的时间,应在大多数场景下(室内/室外照明)保持低曝光时间
软硬件统计类型
calibration
(OTP数据的可用性)
AF算法在actuatorDAC范围的线性区域上操做,若是OTP数据不可用,则调谐的线性范围对于某些模组可能不可靠。可能致使某些场景的搜索算法失败。

3、initial tuning

3.1 actuator相关的tuning参数

参数 搜索行为 描述
CAF_far_end CAF_near_end TAF_far_end TAF_near_end 搜索边界 对于lens的位置范围一般设置为相同的far_end和near_end。可是因为defocus和其余限制,应适量缩小范围以免搜索失败。对于video来讲,因为小步长相关的限制,CAF_near_end默认设置为14cm
srch_rgn_1 srch_rgn_2 srch_rgn_3 搜索区域 用于获取步长,当选择步长搜索区域后,将查找响应的条目。使用step table可使搜索更加灵活。默认状况下,区域边界设置为超焦距、50cm、20cm和14cm来映射 fine_srch_rgn 精搜边界 精搜可提升图像的准确性,但须要提供额外的帧。为了平衡权衡,一般将精细srch_rgn设置为SINGLE_50CM_INDEX的值做为初始调整值。为了提升速度,能够增长边界以减小使用精搜。为了提升精度,请将精搜范围向下扩展到Macro对象距离。要禁用精确搜索,请将其设置为Infinity index。
fine_srch_rgn 精搜边界 精搜可提升图像的准确性,但须要提供额外的帧。为了平衡权衡,一般将精细srch_rgn设置为SINGLE_50CM_INDEX的值做为初始调整值。为了提升速度,能够增长边界以减小使用精搜。为了提升精度,请将精搜范围向下扩展到Macro对象距离。要禁用精确搜索,请将其设置为Infinity index
far_zone near_zone 近远区域 用于限制范围两端的defocus。若是defocus致使AF接近搜索的近端和远端失败,则减少远区边界(或增长近区)以提升成功率。
init_pos 初始位置 此参数指定在摄像机启动时第一次AF搜索时镜头位置的位置,默认设置为超焦距。 为了适应某些开环执行器中的镜头下垂,它必须能移回infinity limit位置。
mid_zone 中间区域 此参数定义镜头的起始方向,由于镜头向中间区域移动。

3.2 测试actuator driver

用来测试actuator和lens模组通过设置AF tuning参数后的状况,测试良好一般有如下这些:

  • actuator和lens模组的性能达到预期
  • actuator设置和OTP数据是正确的
  • AF tuning中生成的参数是有效的

3.2.1 CAF扫描测试

在高级tuning前执行CAF扫描测试,分析结果并执行一些必要的动做。
在Tuning过程的这些阶段执行CAF扫描测试:

  • 双向全扫
  • 闭环actuatorrange
  • 开环actuatorrange
  • actuatorsettle time
  • Focus curve contrast and tail
  • lens映射的距离

3.2.1.1 双向全扫测试

这项测试检测lens模组的滞后性。Lens先从远端到近端全扫,而后从近端到远端全扫。两次不一样方向全扫的FV曲线的峰值应该重合,若是没有重合则说明这个lens模组有严重的滞后,这个问题须要解决。

3.2.1.1.1 测试过程

在500lux照度以上使用三脚架在30cm距离拍摄分辨率12233的ISO卡。

3.2.1.1.2 分析并纠正


若是两个方向全扫的FV曲线峰值重合,则说明模组是好的。若是峰值误差超过了10%,则说明模组有滞后,对于这种状况应该再验证最少两次以上,若是这个现象仍能复现,须要告知模组厂是否可接受,若是不接收只能更换好的模组。

3.2.1.2 actuator范围测试

这项测试检测了infinity到macro的boundary范围,检测lens在macro到infinity并正确对焦的移动范围是否足够。

3.2.1.2.1 测试过程

在500lux照度以上使用三脚架在macro端10cm距离拍摄分辨率12233的ISO卡。在200cm的infinity端重复测试一遍。
若是是开环actuator,还须要作以下测试:

  • 将设备安装在三角架上,镜头朝下
  • 将设备安装在三脚架上,镜头朝上
3.2.1.2.2 分析并纠正

3.2.1.3 actuatorsettle time

该测试经过多帧的相同镜头位置处FV值的一致性来检查镜头移动命令发出后镜头是否设置。

3.2.1.3.1 测试过程

在500lux照度以上使用三脚架在30cm距离拍摄分辨率12233的ISO卡。

3.2.1.3.2 分析并纠正


图A说明damping/ringing配置正确,图B则说明有如下状况:

  • damping/ringing设置错误
  • 在ISP中解析统计数据并将其发送到AF核心之间存在时间问题

3.2.1.4 FV值对比和tail

该测试经过检查其对比度(最大值FV/最小值FV)来检查FV值图的质量。较大的比率表示AF算法有良好对比度。

3.2.1.4.1 测试过程

在500lux照度以上使用三脚架在30cm距离拍摄分辨率12233的ISO卡。

3.2.1.4.2 分析并纠正


图A说明BAF配置正确,图B、C说明BAF配置错误,或者ISP解析BAF统计数据时存在错误,重复测试两次以确认问题。
能够尝试tune BAF设置不一样参数,例如kernel coefficients来看对比度比率是否改善。

3.2.1.5 Lens映射距离

此测试检查在AF Tuning选项卡中计算的镜头位置调整值,并在全扫描测试中捕获镜头位置。若是镜头位置映射与测试结果不匹配,则调整镜头位置调整值。这些值位于AF Tuning选项卡以及3A头文件中的single_optic结构体中。

3.2.1.5.1 测试过程

在500lux照度以上使用三脚架在14cm距离拍摄分辨率12233的ISO卡。在20cm,60cm,200cm处重复测试。

3.2.1.5.2 分析并纠正


图A说明step table设置正确,图B说明在测试中测量的镜头位置与标题中的镜头位置之间存在太多的误差。返回AF Tuning选项卡并检查输入值。若是更新值,请单击“计算”以从新计算镜头位置调整值,而后重复测试。若是输入值准确,请调整适当的镜头位置tune值,而后重复测试。

3.3采集并确认golden模组的lens位置数据

3.4 测试清晰度,一致性和速度

3.4.1 测试给定场景的清晰度和准确度

3.4.2 测试AF速度

4、HAF tuning

HAF提供了基于深度算法(TOF/PDAF/DCIAF)和CAF的AF接口,它也提供了这些算法的通用架构。
若是你的设备硬件必须支持基于深度的算法,使用enable参数来使能HAF,使用algo_enable参数来使能 基于深度的算法。

4.1 HAF参数

参数名称 描述 Tuning设置 默认值
enable HAF主要启用标志 设置为“1”开启HAF 0
algo_enable[4] 每一个算法的使能标志(TOF, PDAF, DCIAF, and Test) 设置为“1”开启相应基于深度的算法
stats_enable[3]
stats_select
fine_srch_drop_thres

4.1.1 用于fine search扩展的HAF参数

精搜扩展功能容许在一个基于深度(PDAF, TOF, DCIAF)的算法提供的搜索范围以外找到peak。一般算法进行粗搜后会给基于对比度的精搜提供搜索范围。在大多数状况下,精搜的范围在找到真正的FV peak以前就结束了。
精搜扩展参数扩展了基于深度的算法的精搜范围,若是启用了扩展,精搜将评估FV曲线趋势以肯定是否找到峰值。若是FV趋势指示还没有找到峰值,则搜索将继续按照精搜扩展参数指定。
当使用TOF或者PDAF type3时推荐开启精搜

4.2 Tune PDAF

4.2.1 验证PDAF对焦标准

当目标处于焦点时验证PDAF功能:

  1. 开启HAF和PDAF算法
  2. 若是sensor是2PD sensor,使能pdaf.reserve[30] is_2PD_enable.
  3. 肯定在标准测试条件下lens准确对焦
    • 使用touch AF
    • 5000K点光源(>150lux)
    • 使用垂直条纹图
    • 物距20cm
  4. 当lens聚焦到测试目标,从log中得到每一个ROI的这些信息:Log:af_pdaf_proc_pd:grid[0-47]: pd=0.06, defocus=5, conf=286, weight=0.34
  5. 来自log的信息每一个ROI(ROI0~ROI47)应知足如下标准:
    • 相差的绝对值小于1
    • defocus小于10
    • 置信值水平应该超过最小 threshold
  6. 若是日志中的信息不符合上一步中指定的条件,则PD库存在问题。联系PD库的供应商获取帮助。

4.2.2 验证PDAF的触发

  1. 确保以下条件:
    • 5000K点光源(>150lux)
    • 使用垂直条纹卡
    • 物距50cm
  2. 将AF的焦点对焦在近处物体上,而后快速移除物体使相机聚焦在测试图上
  3. 在AF过程当中的获取如下信息:
    Log: af_pdaf_proc_pd: roi[0]: pos252 index=49, pd=0.19, defocus=1, conf roi=833, is_conf=1
  4. 移除近物后,应当即从log中观察到如下状况:
    • PD是正值,而且在镜头聚焦时朝向0逐渐减少。
    • defocus是正值,而且随着镜头聚焦,朝向0逐渐减少。
    • 置信水平应保持高于最小置信度 threshold,当它显示is_conf = 1时,意味着ROI PD是自信且可靠的。
  5. 若是日志中的信息不符合上一步中指定的条件,则PD库存在问题。联系PD库的供应商获取帮助。

4.2.3 执行HAF中的PDAF测试

主要测试PD值和FV值的质量,这两个值应该对齐。

4.2.3.1 测试方式

使用垂直条纹图表(500+lux光照条件),将设备横向放置在三脚架上,并将图表放置在不一样的距离(10厘米,20厘米和100厘米)
从设备。

4.2.3.2 分析并校订


若是图形看起来像图A,则PD库输出相位差正确。若是看起来像图B,则联系库供应商(例如,索尼)以肯定PD校准是否有故障。

4.2.4 测试图片清晰度与一致性

在这个测试中,比较不一样距离的两组图像的清晰度,同时还比较一些AF参数的精度。一组图像使用全扫描搜索,而另外一组使用TOF算法。

4.2.4.1 测试过程

将分辨率12233的ISO卡放置在指定位置,将手机横向放置在三脚架上,使用500+lux光照条件。

  1. 开启全扫和AF核心log记录
  2. 打开相机并在10,14,20,40,50,60,120和200cm处拍摄图片
  3. 搜索log并记录每一个距离的FV值和最终lens位置
  4. 关闭全扫
  5. 开启HAF和PDAF
  6. 打开相机并在10,14,20,40,50,60,120和200cm处拍摄图片
  7. 搜索log并记录每一个距离的FV值和最终lens位置
  8. 经过比较两组图像记录的FV值来比较清晰度
  9. 经过使用下面的公式来比较两组图像的最终lens位置来检查清晰度
    (positionformstep3−positioformstep7)<=2∗finestepsize
  10. 若是清晰度和精度不符合预期,则调整合适的PDAF参数

4.2.5 测试AF速度

  1. 启用并抓log
  2. 执行下列ADB命令
    adb root
    adb remount
    adb shell setprop persist.camera.stats.debug.mask 48
  3. 将手机放到三脚架上并对焦到远处物体
  4. 放入卡片遮挡等待对焦,移除卡片再等待对焦到远处物体
  5. 在log中搜索ALGO Complete,应该能够看到:
    ALGO Complete finalpos 92 totaltime: 330 fine_search_time 265 focus_converge_time 65
  6. 当物距在每一个焦点之间变化而且在预期范围内时,验证AF速度是否变化。若是速度不符合预期,调整适当的PDAF参数。

4.2.6 PDAF参数、

PDAF参数的默认值可能适用于大多数状况,可是在某些场景中还须要进行一些调整才能达到特定目标。这些能够调整的参数在PDAF中的几个表(例如Focus table, noise table)中。

4.2.7 2PD参数

2PD参数的默认值可能适用于大多数状况,可是在某些场景中还须要进行一些调整才能达到特定目标。这些能够调整的参数是pdaf.reserve[30]~pdaf.reserve[48]pdaf.reserve[50]~pdaf.reserve[60]

4.3 Tune TOF AF

TOF AF是一项有助于提高AF速度的特性。在TOF Af中,激光传感器根据发出的光线和接收光线的时间来测量距离。计算的准确性取决于基于对比度AFtuning的准确性。TOFtuning的先决条件是初始化tuning已完成。

4.3.1 Tune TOF前的注意事项

  • Gyro对于实现最佳TOF性能相当重要,若是设备没有Gyro,就必需要依赖SAD参数来进行场景变化检测和panning检测。这使得TOF的触发稍微变慢了。
  • 安装在laser sensor顶部的玻璃盖必须是高质量的不能够是高反射的材料,而且必须防尘。若是没有这些特性,laser sensor可能会反馈错误的距离。在大多数状况下,基于用于增长信号强度的玻璃材料应用串扰校准。
  • 对于任何基于深度的算法,推荐使用闭环actuator,由于它受重力和滞后的影响较小。可是闭环actuator成本高,有些也使用开环的VCMactuator。若是使用了开环的VCMactuator,应该开启lens sag补偿功能,请模组厂提供向下、向上、水平的DAC值,建议每一个模组都有这些校准值。
  • TOF AF算法目前不支持touch AF和face AF。若是检测到了touch AF和face AF,则使用CAF。

4.3.2 验证TOF sensor

在TOF tuning前要确认TOF sensor正确启动而且报告一个正确的距离。

  1. 使用下列命令开启laser sensor log
    adb root
    adb remount
    adb shell setprop persist.camera.stats.haf.debug 3
    adb shell setprop persist.camera.global.debug 1
  2. 在不一样距离拍摄分辨率为12233的ISO卡并查看log,推荐距离为10,14,20,40,50,60,120,200cm
  3. 在下列参数中搜索log来获得距离:
    • DEPTH_SERVICE:打印sensor给出的全部信息
    • af_tof_set_data: Calculated_lens position:给出传感器报告的距离和算法计算的相应镜头位置。
  4. log中的距离要与测试的物距匹配

4.3.3 使能TOF AF

在AF tuning头文件中,设置使能

4.3.4 执行HAF中的TOF测试

测试CAF的laser sensor驱动返回的质量距离

4.3.4.1 测试方法

使用三脚架在不一样距离重复测试(10,20,100cm)

4.3.4.2 分析并校订


图A的传感器返回的距离对于测试距离是正确的,图B返回的距离与指望的有较大误差。联系厂商肯定返回错误距离的缘由。在大多数状况下,是由于laser sensor的盖玻片须要校准,若是校准不许确,则可能输出不一致的距离。

4.3.5 测试图像清晰度与一致性

在这个测试中,比较不一样距离的两组图像的清晰度,同时还比较一些AF参数的精度。对一组图像使用全扫,对另外一组使用TOF算法。

4.3.4.1 测试方法

将分辨率12233的ISO卡放置在指定位置,将手机横向放置在三脚架上,使用500+lux光照条件。

  1. 开启全扫和AF核心log记录
  2. 打开相机并在10,14,20,40,50,60,120和200cm处拍摄图片
  3. 搜索log并记录每一个距离的FV值和最终lens位置
  4. 关闭全扫
  5. 开启HAF和TOF
  6. 打开相机并在10,14,20,40,50,60,120和200cm处拍摄图片
  7. 搜索log并记录每一个距离的FV值和最终lens位置
  8. 经过比较两组图像记录的FV值来比较清晰度
  9. 经过使用下面的公式来比较两组图像的最终lens位置来检查清晰度
    (positionformstep3−positionformstep7)<=2∗finestepsize
  10. 若是清晰度和精度不符合预期,则调整合适的TOF参数

4.3.6 测试AF速度

  1. 启用并抓log
  2. 执行下列ADB命令
    adb root
    adb remount
    adb shell setprop persist.camera.stats.debug.mask 48
  3. 将手机放到三脚架上并对焦到远处物体
  4. 放入卡片遮挡等待对焦,移除卡片再等待对焦到远处物体
  5. 在log中搜索ALGO Complete,应该能够看到:
    ALGO Complete finalpos 92 totaltime: 330 fine_search_time 265 focus_converge_time 65
  6. 当物距在每一个焦点之间变化而且在预期范围内时,验证AF速度是否变化。若是速度不符合预期,调整适当的TOF参数。

4.3.7 TOF参数

4.3.8 Tune AF SAD参数 threshold最小值与最大值

threshold_minthreshold_max是用于CAF的相同AF SAD参数。一般来讲,当laser sensor在远距离(60cm及以上)不能检测场景变化时用SAD检测场景变化。

4.4 Tune DCAF

4.4.1 验证lens位置映射距离

DCIAF依赖于估计距离与相应AF镜头位置之间的准确映射。这个镜头位置映射的距离基于single AF tuning,DCIAF对这个映射是很是敏感的。

4.4.1.1 面向正常方向

  1. 在14cm距离采集全扫测量值
  2. 验证全扫描最终镜头位置是否接近于14cm处的映射
  3. 在不一样距离重复步骤1和步骤2

4.4.1.2 方向面向上/下

  1. 在14cm距离采集全扫测量值
  2. 验证全扫描最终镜头位置是否接近于14cm处的映射
  3. 在不一样距离重复步骤1和步骤2

4.4.1.3 排除镜头位置映射

若是镜头位置映射与正常方向的全扫描位置不匹配,则在调整DCIAF以前从新访问CAF tuning(AFactuator和single AF)。
若是镜头位置映射与面朝上或面朝下方向的全扫描位置不匹配,则在调整DCIAF以前从新检查镜头下垂补偿。

4.4.2 测试图像清晰度与一致性

在这个测试中,比较不一样距离的两组图像的清晰度,同时还比较一些AF参数的精度。对一组图像使用全扫,对另外一组使用DCIAF算法。

4.4.2.1 测试方法

  1. 开启全扫和AF核心log记录
  2. 打开相机并在10,14,20,40,50,60,120和200cm处拍摄图片
  3. 搜索log并记录每一个距离的FV值和最终lens位置
  4. 关闭全扫
  5. 开启HAF和TOF
  6. 打开相机并在10,14,20,40,50,60,120和200cm处拍摄图片
  7. 搜索log并记录每一个距离的FV值和最终lens位置
  8. 经过比较两组图像记录的FV值来比较清晰度
  9. 经过使用下面的公式来比较两组图像的最终lens位置来检查清晰度
    (positionformstep3−positionformstep7)<=2∗finestepsize
  10. 若是清晰度和精度不符合预期,则调整合适的TOF参数

4.4.3 测试AF速度

  1. 启用并抓log
  2. 执行下列ADB命令
    adb root
    adb remount
    adb shell setprop persist.camera.stats.debug.mask 48
  3. 将手机放到三脚架上并对焦到远处物体
  4. 放入卡片遮挡等待对焦,移除卡片再等待对焦到远处物体
  5. 在log中搜索ALGO Complete,应该能够看到:
    ALGO Complete finalpos 92 totaltime: 330 fine_search_time 265 focus_converge_time 65
  6. 当物距在每一个焦点之间变化而且在预期范围内时,验证AF速度是否变化。若是速度不符合预期,调整适当的DCIAF参数。

4.4.4 DCIAF参数

5、高级AF tuning流程

高级AF tuning能够改善AF性能,包括搜索速度,精度和健壮性。全部的高级tuning流程都是按需可选的。在高级AF tuning前应该完成初始化AF tuning。

5.1 Tune CAF triggering

CAF监测来自陀螺仪传感器的运动值和亮度值中的绝对差之和(SAD),以检测场景变化并触发搜索。
CAF负责如下事项:

  • 检测场景变化
  • 触发搜索前确保场景稳定
  • 触发搜索
    经过调整Topo_CAF中的灵敏度参数来调整CAF。这些参数与关联值监视器中的参数一块儿使用,以配置算法的行为。

5.2 Tune 初始lens位置

初始默认镜头位置为无限远。默认镜头位置会影响相机启动期间的延迟。例如,若是镜头处于无限远处,则相机启动期间10cm的延迟高于镜头位于中间的延迟。可是,正常使用状况则是用户在启动相机时将注意力集中在无限远物体上。
根据每一个参数的描述调整haf.reserve[5]和[6]以改变初始镜头位置。

5.3 手动调整AF步长

AF Tuning选项根据在Lens Position Tuning Input组中指定的值计算CAF/TAF步长表。能够经过选择Search Preference预设之一或输入新值来调整表格。
若是自定义步长值时,请按照以下步骤:

  • 算法步骤单元与DAC相同。这意味着一步等于一个DAC。
  • macro和infinity物体的镜头位移是不一样的。在macro范围内,能够在保持重叠DOF的同时增长步长。若是步骤设置得太大,则DOF可能会错过一些物距,而且actuator可能没法处理移动。
  • 步长表有五个区域,由四个边界分隔。第一个边界设置为超焦位置,其他边界可配置。默认状况下,因为非线性特征,边界设置为50厘米,20厘米和14厘米。
  • 有五个参数定义lens移动范围
    • Region 0:从far_end_positionnormal_hyperfocal_position
    • Region 1:从normal_hyperfocsrch_rgn_1(默认50cm)
    • Region 2:从srch_rgn_1srch_rgn_2(默认20cm)
    • Region 3:从srch_rgn_2srch_rgn_3(默认14cm)
    • Region 4:从srch_rgn_3near_end
  • 较大的步长能够提升AF速度,但可能致使FV曲线错过该DOF的峰值。一般,Macro区域具备较大的步长,infinity区域具备较小的步长。
  • 一般,正常光区域具备较小的步长,而低光区域具备较大的步长。在低光照条件下,帧速率降低,为了保持AF速度,与正常光线相比,步长略有增长。

5.4 Tune FV_min

较低的FV_min包含更多的弱边缘,但可能会下降FV曲线的对比度,并增长失败率。
1.经过ADB命令启用AF log。
2.编辑头文件并将FV_min值设置为零,而后将新库推送到设备。
3.将扩散器放在传感器盖上(以从场景中移除全部纹理)。
4.关闭全部灯并捕获日志。
5.计算ROl中的像素数。 FV_min =全扫搜索中的FV值* / RO1中的像素数。
6.对于明亮的光线条件,重复步骤2到5。
7.使用计算值替换标题中的FV min。
注意因为硬件和软件统计信息的记录方式不一样,所以硬件统计信息中的FV和软件统计信息中的FV可能因同一场景而异。

5.5 Tune ROI参数

若是要修改ROI参数,可使用AF Tuning选项中提供的一个可用ROI预设进行选择和测试。对预设进行配置和测试以知足其预期目标,执行必要的测试以肯定是否须要增长或减小ROI大小,而后调整ROI参数。
ROI Tuning注意事项:

  • 对焦窗口太大可能会致使ROI中不一样距离的物体对比度降低
  • 对焦窗口过小可能会有噪声影响精度和成功率
  • 低光条件须要较大的ROI尺寸来对抗噪声
  • Touch对焦ROI每每较小以强调较小的物体

5.5.1 Tune CAF ROI

要tune CAF ROI,从默认CAF设置开始,而后执行如下操做:

  1. 居中并在20厘米左右放置一个小物体。
  2. 观察AF聚焦在物体上的次数。
  3. 从新触发CAF。
  4. 记录lens位置。
  5. 重复步骤3和4 十次。
  6. 确认lens位置始终相同。
  7. 执行如下操做之一:
    1. 若是失败率很高,则下降ROI大小。下降CAF ROI大小可能会致使正常场景失败。
    2. 若是正常场景的失败率不可接受,请以来自默认值0.1的增量为单位增长ROI大小。

5.5.2 Tune TAF ROI

Tune CAF ROI后,tune TAF ROI以对焦到较小的物体,TAF的ROI应该比CAF的ROI要小。为了不依赖于算法,能够在tuning ROI时启用全扫。

5.6 Tune 基于软件的AF统计信息相关

根据要使用的统计信息的优先级,设置标志PAAF_enable(in af_tuning_single_t)以使用软件统计信息或禁用它以使用硬件统计信息。若是软件AF统计信息常常丢失,则禁用此变量并使用硬件统计信息。
在AF中有一个软件(基于ARM)AF统计信息功能,这个统计功能用于统计预览流来计算FV值。这种方法的缺点就是FV的峰值不够sharp,可使用fine search来定位实际的峰值。
软件版本的ROI使用了和基于硬件AF同样的ROI,硬件ROI映射到软件使用的预览大小。
软件统计引擎有三种配置:正常(默认),低光和fafce ROI滤波器系数集。

5.7 Tune BAF统计信息

在大多数状况下BAF是不须要进行tuning的,可是某些状况仍是要进行适当的调整。

5.7.1 Tune BAF ROI

默认的BAF ROI参数能够知足大多数状况,若是是想修改BAF ROI参数或者想实现自定义ROI,就须要联系CE。
参数preset_id定义了ROI形状首选项,下图说明了支持的ROI形状:

默认的形状是矩形,支持自定义ROI形状。若是自定义了,那么自定义的ROI会绕过ROI配置,并会传到AF端口进行硬件配置。

5.7.2 Tune BAF gamma

可选的gamma tuning的目的是在不一样亮度级下提高像素对比度。

  1. 找到BAF中的gamma参数,对于普通光、低光和face有不一样的过滤参数
  2. 在30cm距离拍摄低对比度条件下测试场景
  3. LUT Enable参数设置为0关闭gamma表
  4. 进行全扫并记录下FV曲线
  5. 生成并更新LUT,以便在所需的亮度级别上提高FV,建议从1/2.2的默认表开始
  6. 观察FV曲线的变化并根据须要来进行调整
  7. 对不一样亮度级重复此过程

5.7.3 Tune Y的转换

若是使用多通道的Y通道,能够按以下方式tune Y的转换:

  1. 找到BAF中的gamma参数,对于普通光、低光和face有不一样的过滤参数
  2. 从默认转换因子开始:0.213(red), 0.715(green), 0.072(blue)
  3. 在一些颜色条件下测试场景
  4. 使用全扫捕获FV曲线
  5. 调整每一个颜色通道的比例,观察曲线的改善状况,确保能表示多种颜色
  6. 使用单色测试其余场景

5.7.4 Tune 滤波器系数

为下列场景类型提供了默认的BAF滤波器

  1. 正常光
  2. 低光
  3. face
  4. 点光源

5.7.5 BAF统计类型

默认值为AF_STATS_HV

5.7.6 基于重力的FV重力特性

BAF统计具备垂直和水平内核滤波器系数。在一些芯片组中,滤波器系数是不对称的。例如,MSM8996具备用于水平统计的四阶IIR滤波器和具备用于垂直统计的二阶LIR滤波器。因为不对称性,在某些场景中,统计数据可能在不一样方向上具备不一样的值,并致使在最终位于错误的镜头位置对焦。
下列这些就可能发生这种状况:

  1. 水平统计给出了正确的值,可是垂直统计给出了错误的值
  2. 垂直统计给出了正确的值,可是水平统计给出了错误的值

若是出现上述任一状况,则最终统计数据的总和不正确,可能会产生不许确的FV曲线并致使lens位置不正确。

5.8 Tune点光源条件

点光源是当图像的暗区中出现很是亮的光或曝光的物体在FV中引发假的peak时,若是没有考虑到这种状况,可能致使图像失焦或模糊。
Tuning点光源问题有两个基础部分:

  1. 经过调整用于弱光条件下的AF参数来防止false peak
  2. 若是须要作更多地调整,开启点光源检测辅助AF

5.8.1 Tune点光源场景的低光条件

5.8.1.1 调整AF过滤器

为了防止false peak,在低光条件下使用高频带通滤波器[0.2,0.35]来是FV曲线平坦,步骤以下:

  1. 在BAF Filter中Lowght里的Custom Filter配置中进行设置
  2. 开启FIR Enable和IIR Enable
  3. 设置FIR Filter和IIR Filter

5.8.1.2 调整平坦比例

若是更改AF滤波器没有产生真正的peak,则使用如下步骤来调整平坦比例以使点光源视为平坦场景,这种调整能够得到更准确而且一直的AF结果。

  1. 修改BV Threshold中的Flat Threshold参数
  2. 检查平坦场景是否在超焦点位置
  3. 若是这些调整没有解决,则须要看点光源检测辅助Af特性

5.8.2 设置点光源检测

使用参数来调整点光源的检测

5.8.3 Tune点光源处理参数

设置能够检测点光源场景的参数后,调整处理点光源的参数

  1. 在AF Spotlight参数中进行调整
  2. 设置AF Cont Spotlight Enable为1,这会强制HAF PDAF置信度指示为错误。当检测到点光源场景时,使用AF点光源特征来处理场景。这样能够防止在HAF收敛期间PD值不可靠,同时也防止了在false peak位置时结束FV
  3. 设置AF点光源的条件处理

5.8.4 点光源参数指导

调整AF点光源 threshold参数以防止FV在false peak位置结束并将点光源场景识别为平坦曲线。这些调整可致使:

  • 粗搜期间峰值识别更严格
  • 开始时容易识别为平坦曲线
  • 在AF搜索结束时峰值识别更严格

5.8.5 解决点光源场景问题

点光源场景对于CAF来讲很是具备挑战性,它们具备饱和像素而没有边缘信息。解决此问题的第一步,请确保调整点光源检测功能,以便检测点光源场景。

5.8.6 为ROI中网格赋予权重

在某些场景中,如点光源场景,但愿为ROI中的每一个网格赋予权重。若是要启用此功能,请调整af_algo.reserve[96]af_algo.reserve[97]。它能够基于区域(即窗口位置)或亮度值给出权重。此功能在大多数像素饱和的点光源场景中颇有用。在这种状况下,咱们想要提取具备高频内容的像素并抑制饱和像素。在调整这些参数时要当心,由于赋予权重可能会致使某些简单场景的FV不正确。

5.9 Touch/face PDAF特性

Touch/face功能的基本验证设计到了PD库返回的PD值,若是要tune touch/face PDAF功能,请执行一下操做:

  1. 开启pdaf.reserve[40]
  2. 让物体处于多个深度的场景中,物体在前景而不是在中心,以下图所示
  3. Touch前景对象,在上图中是花
  4. 查看log确保ROI配置正确,log应该指定ROI类型和触摸事件的坐标,在log中应该能看到以下内容:
    af_util_adjust_roi: TOUCH ROI
    af_util_adjust_roi: Calculated new ROI: (1068, 736, 534 534)
  5. 在touch以后确保PD库返回的PD值是正确的
  6. 按照以下评估结果:
    • 若是ROI配置和PD值正确,PDAF应该准确的对焦在前景的物体
    • 若是ROI和PD正确,而且PDAF没有很好地对焦,请排除影响一致性和准确性的常见问题
    • 若是没法看到ROI配置或者PD值错误,这是ROI软件配置问题或者是PD库配置问题,请联系CE

5.10 Face AF问题:未聚焦在脸部而是聚焦在背景

对焦到脸部是由于脸部的纹理感较低,获得的FV曲线是平坦的,这致使在CAF中难以聚焦。若是出现此问题,请tuneaf_algo.reserve[91]af_algo.reserve[95]来扩展FD给出的ROI大小,以便ROI有更多的细节,这样能够改善FV曲线。

5.11 常见问题:一致性和准确性

FV的一致性和准确性彼此密切相关。一般,在惊醒精度优化以前应在固定场景下优化AF搜索的一致性。

5.12 常见问题:AF速度

了解影响AF速度的问题和权衡是很是重要的,在tuning以前要肯定产生问题的主要缘由。

5.13 执行AE扫描测试

使用AE扫描工具测试对不一样曝光级别的亮度响应,AE扫描输出一下测试经过与否的结果:

  • 延时测试
  • 同步测试
  • 线性测试-增益扫描
  • 线性测试-线扫描

6、AF Tuning用例

6.1 CAF触发过于灵敏,而且在缓慢panning状况下容易触发

当SAD被禁用时,触发不该该那么灵敏,而且仅由大幅度运动时才触发。理想状况下,gyro仅用于大幅度动做触发而不是轻微动做触发。若是这样的问题仍然存在,则调整gyro参数。有多重参数能够解决问题:

  • Tune gyro参数
  • Tune SAD参数

6.2 CAF触发不够灵敏,触发时间太长

若是在场景变化后(已稳定)过了很长时间才触发,则tune SAD。若是SAD和SADR敏感度过小可能会致使这个问题,调整灵敏度并从新测试。
了解触发延迟的缘由很重要,两个常见缘由以下:

  • SAD/SADR触发不正确
  • 低光或者低对比度的特定场景

若是问题存在且在弱光环境下发生,则经过如下步骤来调整SADR灵敏度:

  1. 经过设置GYRO_SensitivityGYRO_PANNING_Sensitivity为0来禁用gyro相关联的值
  2. 经过设置SAD_PANNING_Sensitivity为0来禁用SAD
  3. 增长SADR_Sensitivity(一般高于50)
  4. 从新测试并检查场景改变灵敏度性能是否获得改善。若是没有,则再次增长SADR_Sensitivity
  5. 在SADR触发器达到满意性能后,将SAD_PANNING_Sensitivity从0改回原始值
  6. 修改SAD_PANNING_Sensitivity(变小或变大)
  7. 从新测试并检查总体场景变化性能是否达到预期
    • 若是没有,重复步骤6
    • 若是达到了,设置GYRO_SensitivityGYRO_PANNING_Sensitivity为初始值

6.3 AF始终对焦到背景,不对焦前景

若是触摸前景中的物体具备更高的触发焦点的成功率,则调整ROI,多是ROI设置的太多了。

6.4 AF和TAF须要针对速度进行优化,但CAF须要针对平滑度进行优化

分别调整TAF和CAF的step table。

6.5 在AF搜索阶段FOV改变太多

若是AF速度调整的很快,可能会致使没必要要的FOV行为。
记录当前step table并与AF Tuning选项卡中的值进行比较,若是当前值与选项卡中的值相同或大于此值,则多是缩放效果的缘由。
有些状况,当镜头从infinity到macro时,FOV会发生显着变化。若是AF速度最大化,则预计会有更多的缩放效果。要减少缩放效果,请减小搜索期间的step以改善FOV的缩放。

6.6 须要改善AF速度

要调整AF速度,了解影响AF速度的问题和权衡很是重要。在进行更改以前肯定影响速度的主要缘由。

6.7 AF在中间距离表现较好,macro端和infinity端表现差

  1. 使用log记录有问题场景的最终lens位置
  2. 启用全扫并记录最终镜头位置
  3. 比较两次测量的最终位置
  4. 运行AF健全性测试以检查镜头DAC范围的有效性。若是测试失败,请查看AF Tuning tab。
  5. 验证是否正确传递了全部参数。
  6. 对于无穷远物体,请跳至最后一步。对于微距物体,请继续执行下一步。
  7. 对于微距物体,若是经过完整性测试,则经过将fine_srch_rgn设置为SINGLE_NEAR_LIMIT_IDX,将执行精搜以得到最佳精度
  8. 对于无穷远物体,将每次迭代的步长减少10%,以测试精度,直到获得目标或达到限制。

6.8 同一场景AF表现不一致

当场景没有纹理或者低对比度时,一般会发现此问题。
有两种方法能够解决此问题:

  • 调整mid_zone
  • 调整算法 threshold

6.9 在夜景/低光/低对比度场景下AF失败率太高

若是总体失败率与对比机相比太高,则在tuning工做和影响/权衡方面,大体能够列出如下几项:

  • 经过调整FV_min增长FV曲线
  • 为低光调整ROI

6.10 对于没有云的天空场景,图像一般是模糊的

当天空场景对焦失败时,镜头移动到infinity位置,在大多数状况下,应该聚焦成功。然而,对于开环来讲因为镜头下垂,物理镜头位置会下垂,这会致使图像模糊。
检查log中的AF失败。若是AF失败,镜头移动到默认位置。

6.11 PDAF在低纹理场景中作出没必要要地触发搜索

在低纹理场景中,PDAF可能会没必要要地触发搜索或聚焦。当PDAF库信号高或低置信度以及连续帧的高波动PD值时, PDAF将这些条件评估为场景变化并当即触发。而后PD库经过给出正确的PD值来尝试自我校订,这会触发又一次搜索,而且因为PD值的波动致使镜头来回移动。这种状况称为focus hunting。

6.12 PDAF在具备倾斜边缘或线条的场景中失败

在这种状况下可能没法正常对焦,根据每一个参数的描述来tunepdaf.reserve[19]~[20]。启动此功能后,PDAF会考虑水平和垂直的统计数据以肯定是否将场景设置为低置信度。若是置信度低,则PDAF控制CAF以执行搜索。

6.13 AF搜索未结束拍照就不动了

大多数状况下,AF会继续搜索或保持对焦,而且没法及时完成搜索。如今只能在搜索完成后拍照,若是在搜索期间点击拍照,则应用程序将暂停快照,直到搜索完成。

6.14 手抖致使的FV降低和搜索不许确

因为手抖动引发的模糊,针对场景计算的FV可能降低,保持在很是高峰,并致使AF搜索不许确。因为曝光时间较长,在低光照条件下更严重。若是手持设备在低光条件下搜索不许确,则启用和调整手抖动参数。

6.15 手抖处理消耗太多功率

手抖过程使用多个陀螺仪样原本基于设备运动来校订FV值,可是这可能会影响功耗。若是发生这种状况,调整haf.reserve[80]~[83]来设置gyro的采样率。下降采样率可能会影响精度,由于手抖过程须要多个陀螺仪样本,以便在搜索过程当中有运动时校订焦点值。

6.16 当检测到face时AF进行了没必要要的从新触发

Face检测对面部大小和位置的变化敏感,会根据这些更改生成新的FD标记,AF每次收到标记时都会触发新的搜索。

7、AF测试程序

7.1 开启全扫搜索和AF log

  1. 使用命令开启全扫
  2. 打开AF log
  3. 打开相机前捕获log
  4. 使相机对准场景
  5. 在日志运行期间对焦完成
  6. 关闭相机,关闭log
  7. 在log中搜索关键字

7.2 开启AF log

  1. 使用命令开启AF log
  2. 打开相机前捕获log

7.3 在预约的lens位置拍摄图像

  1. 关闭相机而且开启手动调整lens位置特性
  2. 捕获RAW图
  3. 开启相机,因为CAF没有开启,lens不会移动
  4. 指定lens移动位置
  5. 按拍照键来捕获RAW图和JPEG图
  6. 从手机上提取图像

7.4 在当前手动对焦位置拍摄图像

  1. 将对焦模式设置为无穷远
  2. 选择 Live->Utilities->Focus Tuning
  3. 选择适当的拍照模式(raw或JPEG)
  4. 检查AEC Lock框锁定AEC曝光决策
  5. 将手动对焦设置到首选位置
  6. 在所选位置捕获位置

7.5 确认FV状态

  1. 记下使用的统计方式
  2. 开启AF log
  3. 开始记录
  4. 打开并稳定相机,完成对焦后,将手挡住相机,重复5次
  5. 观察FV值
  6. 验证它们是大于零的值而且是单调变化的
  7. 在对焦和失焦时验证FV的对比度是否足够大

7.6 进行AF健全测试

  1. 进行全扫搜索
  2. 捕获测试图像
  3. 确保全部图像都对焦上
  4. 若是都对上焦,关闭全扫
  5. 启用响应的AF算法重复步骤2~3
  6. 比较两组图片
  7. 若是全部来自全扫的图像都聚焦,可是算法得到的不是,则重复清晰度、一致性和速度测试


相关文章
相关标签/搜索