Camera AF version 6.0

一、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
二、AF tuning overview
2.1.1 AF Tuning需要考虑的因素
三、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速度
四、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参数
五、高级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扫描测试
六、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进行了不必要的重新触发
七、AF测试程序
7.1 开启全扫搜索和AF log
7.2 开启AF log
7.3 在预定的lens位置拍摄图像
7.4 在当前手动对焦位置拍摄图像
7.5 确认FV状态
7.6 进行AF健全测试

一、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状态中的两个基本功能。

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),每个算法可能依赖于不同的数据,有着不同的灵敏度参数。

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的关键点:

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

1.4 Phase detection AF(PDAF)

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

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

  • 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值,这可能导致聚焦失败。要适应更高的增益并保持精度,可以通过调整噪声表来增加精细扫描范围。
通过将适当的乘数从噪声增益表应用于精细扫描步长来计算精细扫描范围。

Finestepfocusscanrange=FinescanstepsizeRangemultiplier(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(tofstepsizenumnearstepsfardirection)


对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)是每个图像中的匹配点。使用

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

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

1.7 Bayer AF(BAF) stats engine

二、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数据不可用,则调谐的线性范围对于某些模组可能不可靠。可能导致某些场景的搜索算法失败。

三、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速度

四、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位置来检查清晰度
    (positionformstep3positioformstep7)<=2finestepsize
  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位置来检查清晰度
    (positionformstep3positionformstep7)<=2finestepsize
  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位置来检查清晰度
    (positionformstep3positionformstep7)<=2finestepsize
  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参数

五、高级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扫描输出一下测试通过与否的结果:

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

六、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每次收到标记时都会触发新的搜索。

七、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. 如果所有来自全扫的图像都聚焦,但是算法获得的不是,则重复清晰度、一致性和速度测试




posted @ 2019-05-10 20:26  lishizhenpi  阅读(6537)  评论(3编辑  收藏  举报