AF的目的是肯定实现对焦的最佳镜头位置,并触发actuator将镜头移动到该位置。通常来讲,AF过程以下:算法
AF monitor的主要功能是场景变化检测。直观地说,场景变化意味着当前场景不在焦点上,这将致使算法触发搜索以找到焦点的最佳镜头位置。
每种算法都有本身的标准来检测场景变化。例如,CAF依赖于参考帧的Gyro参数,绝对差值之和(SAD)参数和参考SAD
(SADR)参数检测场景变化。相比之下,PDAF依赖于当前帧的defocus值,算法的置信度和场景的稳定性的组合。
AF monitor还负责场景平移检测。为避免没必要要的搜索,算法区分场景变化和场景平移。搜索算法在场景稳定以前不会开始搜索,即不进行panning。简而言之,scene change和panning检测是AF monitor状态中的两个基本功能。shell
Value monitor是3A版本6.0中的新增功能。虽然它最终将应用于其余monitor算法,但Value monitor此时仅适用于CAF。其余监控算法(PDAF,TOF和DCIAF)配置如3A版本5.1。架构
VM_SET_TYPE_GYRO
配置的任何其余监控算法。 默认状况下有4个monitor算法配置(CAF, PDFA, TOF, DCIAF),每一个算法可能依赖于不一样的数据,有着不一样的灵敏度参数。ide
为了检测和区分场景变化和panning,value monitor分析多个输入信号,而后输出二进制决策。应用指定的决策逻辑来肯定当前场景是否正在panning。所以,在AFmonitor中使用特定拓扑(断定逻辑)。为简化设计,拓扑仅采用二进制输入(0或1)。仅在拓扑中指定决策逻辑。
CAFmonitor拓扑的示例以下图所示。它说明了value monitor的二进制输出如何经过简单的逻辑组合启用场景更改/平移检测。
svg
Meta Filter包含一系列滤波过程,例如中值滤波器,移动平均值(MVAVG)滤波器和无限脉冲响应(lIR)滤波器。当启用这些滤波过程时,Meta Filter可以处理有噪声的输入信号。
Basic monitor是具备两种检测类型的monitor:工具
使用value monitor的主要目的之一是隔离不一样算法之间的依赖关系。Chromatix中的value monitor bank设计用于在不一样算法之间共享value monitor设置(即VMSET_TYPE)。这使得一个值monitor设置能够在许多算法中使用。下图说明了如何在不一样算法之间共享VM SET_TYPE以及如何使用自定义设置。
性能
在自动对焦的搜索阶段,算法使用各类方法来肯定最佳镜头位置以实现聚焦并触发actuator将镜头移动到该位置。搜索阶段分为粗搜索和精搜。
粗搜索的目标是将镜头移向精搜的近界限。下图说明了DCIAF算法中粗搜索和精搜的基本操做。
粗搜快速将镜头移动到适当的位置以开始精搜。精搜而后将镜头移动到具备最高FV值的位置。粗搜索和精搜的边界,threshold,步长和limit是可配置的。能够调整搜索参数以平衡速度和准确性,或者强调速度或准确性。粗搜有时也被称为焦点收敛。
每种算法使用不一样的方法计算搜索的镜头位置。测试
Constrast AF(CAF) 检测来自陀螺仪传感器的运动值和luma的绝对差值之和(SAD),以检测场景变化并触发搜索。若是符合稳定性和置信度标准,则CAF会触发搜索达到最高FV的镜头位置。
默认的AF搜索算法是single AF,这是一种基于对比度的算法。
如下是CAF和Single AF的关键点:优化
PDAF是经过测量由图像传感器中的相位检测像素捕获的图像对之间的视差来工做的。视差的大小和符号与defocus相关,并用于估计最佳焦点的最佳镜头位置。
在手机上,像素级设计可为左右像素建立有效光圈,像人眼同样,左右像素独立地捕捉光线。若是场景中的光收敛到相邻的左和右相位检测像素,则没有视差而且镜头处于正确位置。若是光线没有收敛在相邻的左右相位检测像素上,则存在视差而且镜头不在正确的位置。
下图表示了收敛在相邻和非相邻相位检测像素上的光以及基于视差的所得聚焦条件。
有三种用于生成左和右像素的常见像素设计方法:ui
ROI配置参数设置ROI位置和用于计算PD结果的ROI网格数,这些信息对于PDAF算法是必不可少的。设置太大的AF ROI可能会混淆PD结果和PDAF最终决策。这是由于不一样距离的物体进入PD ROI并使最终的PD保持在远物体和近物体之间的折中位置。
对全部状况使用中心2x2ROI网格。下图是中心2x2网格的示例。以IMX230为例,当传感器图像的area_mode用做fixed_window(8x6)时,传感器图像被分为H8 * V6 ROI网格。
一般,PDAF检测场景的变化并在知足如下条件时触发搜索:
计算相位差并将其转换为defocus值,以指示实现聚焦所需的镜头移动的大小和方向。正defocus值意味着运动由近到远,负defocus值意味着运动从远到近。当defocus值接近零时,表示目标处于焦点。
defocus的计算方法以下:
Final PD value - 每一个ROI PD的加权平均值和置信度值,仅包括置信度值大于最小置信度 threshold的ROI。
DCC - Defocus转换系数,由模组供应商校准。
VCM sensitivity - AF校准结果,来自模组供应商。
置信水平是在相位差估计中使用的场景中的线条数量(例如,垂直边缘,场景亮度)的功能。高置信度意味着ROI中的PD具备小的差别和更高的边缘强度。置信表用于定义相对于sensor gain的最小置信度 threshold。
经过评估deocus值历史来计算稳定性,若是值在可调threshold内,则认为场景稳定。
在忽然的深度变化期间,PD library暂时下降两帧或三帧的置信水平。wait_conf_recover
参数有助于PDAF区分置信水平的持续降低(例如,没有垂直边缘)与临时降低(例如,忽然的深度变化)。这避免了每次在场景深度的忽然变化期间过早触发CAF。
在下面的示例中,若是not_conf_cnt
大于wait_conf_recover_cnt
,则因为置信水平的持续降低,算法会切换到CAF。
当应用更高的增益时,来自传感器的PD信息可能变得有噪声。当噪声增益较高时,PDAF可能会获得不可靠的defocus值,这可能致使聚焦失败。要适应更高的增益并保持精度,能够经过调整噪声表来增长精细扫描范围。
经过将适当的乘数从噪声增益表应用于精细扫描步长来计算精细扫描范围。
在PDAF中,粗搜控制镜头移动到焦点位置。相位差越大,视差越大、意味着defocus值越大。以下图所示,当相位差较大时,则相应的噪声水平越高;当相位差小时,噪声水平也很小。随着镜头移近最佳焦点,噪音更小。
所以,有必要将自动聚焦做为迭代过程进行,其中镜头逐渐移动以实现最佳对焦。迭代过程致使平滑的AF收敛并防止过冲行为。
为了使AF平滑,PDAF使用迭代运动来提供良好的AF收敛用户体验并防止过冲行为。PDAF Focus table(focus_tb1)包含根据相位差估计指定所需镜头移动百分比的entry。move_pcnt
tuning参数根据原始defocus距离将一个大镜头移动分解为小镜头移动。
更高的百分比意味着更少的迭代镜头移动、更快的AF速度和焦点跟踪。可是,这可能致使调整过分。校订过冲所需的镜头移动会产生不平滑的AF收敛和较差的用户体验。
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表以下:
因为相位差计算在某些条件下不够准确,所以PDAF算法切换到CAF以进行精搜并确认最终峰值位置。影响相位差精度的因素包括场景条件(例如,低光,图像纹理,颜色和距离)和镜头/传感器制造问题。
若是使用2PD并依赖PD来找到最终的目标,则禁用精搜。
在大多数状况下,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会调用精搜。
在TOF AF中,激光传感器经过计算向目标发射红外光和在接收器处接收红外光之间的时间来测量到目标的距离。基于光子行进时间和光速来计算相机与目标之间的距离。计算的准确性取决于基于对比度的AF调整的准确性。
与常规CAF相比,TOF对焦速度明显更快。在低光至正常光照条件下,TOF性能最佳。但在室外条件下,传感器难以区分激光发射器发出的光和来自太阳光的光。
TOF经过评估激光传感器报告的距离来检测场景的变化。激光传感器还会生成一个错误代码,表示报告距离的置信度。
若是算法对报告的距离有信心,则触发激光辅助粗搜索。搜索将镜头移动到精搜的近界限被称为焦点收敛。若是算法不自信,它能够:
焦点收敛状态的目标是将镜头移动到精搜的近界限。
假设当前镜头位置是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的移动过程能够用下图表示:
虚线对应的点就是焦点收敛点和精搜的起始点。
若是lens向far端移动,则有以下公式:
jump_to_start_limit_low_light
而不是
jump_to_start_limit
。
TOF算法中的精搜是基于对比度的。精搜的边界是近侧的焦点收敛点,远侧的边界使用num_far_steps_near_direction
或num_far_steps_far_direction
来设置。取决于镜头移动方向的方向。
理想状况下,对于num_near_steps参数有一个更大的数字,对于num_far_steps参数有一个更小的数字。这是由于最好退出焦点收敛并尽早开始精搜以减小焦点缺失和过冲。 num_far_steps参数保持较小,由于若是在最后没有找到焦点,则精搜将继续,直到找到峰值。
DCIAF经过基于两个相机之间的差异/视差估计物体的距离来显着减小AF.DCIAF工做所需的时间。DCIAF匹配相同物体的突出特征以计算立体视差。
在上图中,一个图像来自主sensor,另外一个来自副sensor。黄色圆圈(p1和p2)是每一个图像中的匹配点。使用
AF能够在PLD gating完成后开始,而且主要与ISP,AWB和AEC tuning并行发生。其中特别是AEC和ISP,可能会对AFtuning产生影响。
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数据不可用,则调谐的线性范围对于某些模组可能不可靠。可能致使某些场景的搜索算法失败。
参数 | 搜索行为 | 描述 |
---|---|---|
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 | 中间区域 | 此参数定义镜头的起始方向,由于镜头向中间区域移动。 |
用来测试actuator和lens模组通过设置AF tuning参数后的状况,测试良好一般有如下这些:
在高级tuning前执行CAF扫描测试,分析结果并执行一些必要的动做。
在Tuning过程的这些阶段执行CAF扫描测试:
这项测试检测lens模组的滞后性。Lens先从远端到近端全扫,而后从近端到远端全扫。两次不一样方向全扫的FV曲线的峰值应该重合,若是没有重合则说明这个lens模组有严重的滞后,这个问题须要解决。
在500lux照度以上使用三脚架在30cm距离拍摄分辨率12233的ISO卡。
若是两个方向全扫的FV曲线峰值重合,则说明模组是好的。若是峰值误差超过了10%,则说明模组有滞后,对于这种状况应该再验证最少两次以上,若是这个现象仍能复现,须要告知模组厂是否可接受,若是不接收只能更换好的模组。
这项测试检测了infinity到macro的boundary范围,检测lens在macro到infinity并正确对焦的移动范围是否足够。
在500lux照度以上使用三脚架在macro端10cm距离拍摄分辨率12233的ISO卡。在200cm的infinity端重复测试一遍。
若是是开环actuator,还须要作以下测试:
该测试经过多帧的相同镜头位置处FV值的一致性来检查镜头移动命令发出后镜头是否设置。
在500lux照度以上使用三脚架在30cm距离拍摄分辨率12233的ISO卡。
图A说明damping/ringing配置正确,图B则说明有如下状况:
该测试经过检查其对比度(最大值FV/最小值FV)来检查FV值图的质量。较大的比率表示AF算法有良好对比度。
在500lux照度以上使用三脚架在30cm距离拍摄分辨率12233的ISO卡。
图A说明BAF配置正确,图B、C说明BAF配置错误,或者ISP解析BAF统计数据时存在错误,重复测试两次以确认问题。
能够尝试tune BAF设置不一样参数,例如kernel coefficients来看对比度比率是否改善。
此测试检查在AF Tuning选项卡中计算的镜头位置调整值,并在全扫描测试中捕获镜头位置。若是镜头位置映射与测试结果不匹配,则调整镜头位置调整值。这些值位于AF Tuning选项卡以及3A头文件中的single_optic
结构体中。
在500lux照度以上使用三脚架在14cm距离拍摄分辨率12233的ISO卡。在20cm,60cm,200cm处重复测试。
图A说明step table设置正确,图B说明在测试中测量的镜头位置与标题中的镜头位置之间存在太多的误差。返回AF Tuning选项卡并检查输入值。若是更新值,请单击“计算”以从新计算镜头位置调整值,而后重复测试。若是输入值准确,请调整适当的镜头位置tune值,而后重复测试。
HAF提供了基于深度算法(TOF/PDAF/DCIAF)和CAF的AF接口,它也提供了这些算法的通用架构。
若是你的设备硬件必须支持基于深度的算法,使用enable
参数来使能HAF,使用algo_enable
参数来使能 基于深度的算法。
参数名称 | 描述 | Tuning设置 | 默认值 |
---|---|---|---|
enable | HAF主要启用标志 | 设置为“1”开启HAF | 0 |
algo_enable[4] | 每一个算法的使能标志(TOF, PDAF, DCIAF, and Test) | 设置为“1”开启相应基于深度的算法 | |
stats_enable[3] | |||
stats_select | |||
fine_srch_drop_thres |
精搜扩展功能容许在一个基于深度(PDAF, TOF, DCIAF)的算法提供的搜索范围以外找到peak。一般算法进行粗搜后会给基于对比度的精搜提供搜索范围。在大多数状况下,精搜的范围在找到真正的FV peak以前就结束了。
精搜扩展参数扩展了基于深度的算法的精搜范围,若是启用了扩展,精搜将评估FV曲线趋势以肯定是否找到峰值。若是FV趋势指示还没有找到峰值,则搜索将继续按照精搜扩展参数指定。
当使用TOF或者PDAF type3时推荐开启精搜
当目标处于焦点时验证PDAF功能:
pdaf.reserve[30] is_2PD_enable
.af_pdaf_proc_pd:grid[0-47]: pd=0.06, defocus=5, conf=286, weight=0.34
Log: af_pdaf_proc_pd: roi[0]: pos252 index=49, pd=0.19, defocus=1, conf roi=833, is_conf=1
主要测试PD值和FV值的质量,这两个值应该对齐。
使用垂直条纹图表(500+lux光照条件),将设备横向放置在三脚架上,并将图表放置在不一样的距离(10厘米,20厘米和100厘米)
从设备。
若是图形看起来像图A,则PD库输出相位差正确。若是看起来像图B,则联系库供应商(例如,索尼)以肯定PD校准是否有故障。
在这个测试中,比较不一样距离的两组图像的清晰度,同时还比较一些AF参数的精度。一组图像使用全扫描搜索,而另外一组使用TOF算法。
将分辨率12233的ISO卡放置在指定位置,将手机横向放置在三脚架上,使用500+lux光照条件。
adb root adb remount adb shell setprop persist.camera.stats.debug.mask 48
ALGO Complete
,应该能够看到: ALGO Complete finalpos 92 totaltime: 330 fine_search_time 265 focus_converge_time 65
PDAF参数的默认值可能适用于大多数状况,可是在某些场景中还须要进行一些调整才能达到特定目标。这些能够调整的参数在PDAF中的几个表(例如Focus table, noise table)中。
2PD参数的默认值可能适用于大多数状况,可是在某些场景中还须要进行一些调整才能达到特定目标。这些能够调整的参数是pdaf.reserve[30]~pdaf.reserve[48]
和pdaf.reserve[50]~pdaf.reserve[60]
。
TOF AF是一项有助于提高AF速度的特性。在TOF Af中,激光传感器根据发出的光线和接收光线的时间来测量距离。计算的准确性取决于基于对比度AFtuning的准确性。TOFtuning的先决条件是初始化tuning已完成。
在TOF tuning前要确认TOF sensor正确启动而且报告一个正确的距离。
adb root adb remount adb shell setprop persist.camera.stats.haf.debug 3 adb shell setprop persist.camera.global.debug 1
DEPTH_SERVICE
:打印sensor给出的全部信息af_tof_set_data: Calculated_lens position
:给出传感器报告的距离和算法计算的相应镜头位置。在AF tuning头文件中,设置使能
测试CAF的laser sensor驱动返回的质量距离
使用三脚架在不一样距离重复测试(10,20,100cm)
图A的传感器返回的距离对于测试距离是正确的,图B返回的距离与指望的有较大误差。联系厂商肯定返回错误距离的缘由。在大多数状况下,是由于laser sensor的盖玻片须要校准,若是校准不许确,则可能输出不一致的距离。
在这个测试中,比较不一样距离的两组图像的清晰度,同时还比较一些AF参数的精度。对一组图像使用全扫,对另外一组使用TOF算法。
将分辨率12233的ISO卡放置在指定位置,将手机横向放置在三脚架上,使用500+lux光照条件。
adb root adb remount adb shell setprop persist.camera.stats.debug.mask 48
ALGO Complete
,应该能够看到: ALGO Complete finalpos 92 totaltime: 330 fine_search_time 265 focus_converge_time 65
threshold_min
与threshold_max
是用于CAF的相同AF SAD参数。一般来讲,当laser sensor在远距离(60cm及以上)不能检测场景变化时用SAD检测场景变化。
DCIAF依赖于估计距离与相应AF镜头位置之间的准确映射。这个镜头位置映射的距离基于single AF tuning,DCIAF对这个映射是很是敏感的。
若是镜头位置映射与正常方向的全扫描位置不匹配,则在调整DCIAF以前从新访问CAF tuning(AFactuator和single AF)。
若是镜头位置映射与面朝上或面朝下方向的全扫描位置不匹配,则在调整DCIAF以前从新检查镜头下垂补偿。
在这个测试中,比较不一样距离的两组图像的清晰度,同时还比较一些AF参数的精度。对一组图像使用全扫,对另外一组使用DCIAF算法。
adb root adb remount adb shell setprop persist.camera.stats.debug.mask 48
ALGO Complete
,应该能够看到: ALGO Complete finalpos 92 totaltime: 330 fine_search_time 265 focus_converge_time 65
高级AF tuning能够改善AF性能,包括搜索速度,精度和健壮性。全部的高级tuning流程都是按需可选的。在高级AF tuning前应该完成初始化AF tuning。
CAF监测来自陀螺仪传感器的运动值和亮度值中的绝对差之和(SAD),以检测场景变化并触发搜索。
CAF负责如下事项:
Topo_CAF
中的灵敏度参数来调整CAF。这些参数与关联值监视器中的参数一块儿使用,以配置算法的行为。初始默认镜头位置为无限远。默认镜头位置会影响相机启动期间的延迟。例如,若是镜头处于无限远处,则相机启动期间10cm的延迟高于镜头位于中间的延迟。可是,正常使用状况则是用户在启动相机时将注意力集中在无限远物体上。
根据每一个参数的描述调整haf.reserve[5]和[6]以改变初始镜头位置。
AF Tuning选项根据在Lens Position Tuning Input组中指定的值计算CAF/TAF步长表。能够经过选择Search Preference预设之一或输入新值来调整表格。
若是自定义步长值时,请按照以下步骤:
far_end_position
到normal_hyperfocal_position
normal_hyperfoc
到srch_rgn_1
(默认50cm)srch_rgn_1
到srch_rgn_2
(默认20cm)srch_rgn_2
到srch_rgn_3
(默认14cm)srch_rgn_3
到near_end
较低的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可能因同一场景而异。
若是要修改ROI参数,可使用AF Tuning
选项中提供的一个可用ROI预设进行选择和测试。对预设进行配置和测试以知足其预期目标,执行必要的测试以肯定是否须要增长或减小ROI大小,而后调整ROI参数。
ROI Tuning注意事项:
要tune CAF ROI,从默认CAF设置开始,而后执行如下操做:
Tune CAF ROI后,tune TAF ROI以对焦到较小的物体,TAF的ROI应该比CAF的ROI要小。为了不依赖于算法,能够在tuning ROI时启用全扫。
根据要使用的统计信息的优先级,设置标志PAAF_enable
(in af_tuning_single_t)以使用软件统计信息或禁用它以使用硬件统计信息。若是软件AF统计信息常常丢失,则禁用此变量并使用硬件统计信息。
在AF中有一个软件(基于ARM)AF统计信息功能,这个统计功能用于统计预览流来计算FV值。这种方法的缺点就是FV的峰值不够sharp,可使用fine search来定位实际的峰值。
软件版本的ROI使用了和基于硬件AF同样的ROI,硬件ROI映射到软件使用的预览大小。
软件统计引擎有三种配置:正常(默认),低光和fafce ROI滤波器系数集。
在大多数状况下BAF是不须要进行tuning的,可是某些状况仍是要进行适当的调整。
默认的BAF ROI参数能够知足大多数状况,若是是想修改BAF ROI参数或者想实现自定义ROI,就须要联系CE。
参数preset_id
定义了ROI形状首选项,下图说明了支持的ROI形状:
默认的形状是矩形,支持自定义ROI形状。若是自定义了,那么自定义的ROI会绕过ROI配置,并会传到AF端口进行硬件配置。
可选的gamma tuning的目的是在不一样亮度级下提高像素对比度。
LUT Enable
参数设置为0关闭gamma表若是使用多通道的Y通道,能够按以下方式tune Y的转换:
为下列场景类型提供了默认的BAF滤波器
默认值为AF_STATS_HV
。
BAF统计具备垂直和水平内核滤波器系数。在一些芯片组中,滤波器系数是不对称的。例如,MSM8996具备用于水平统计的四阶IIR滤波器和具备用于垂直统计的二阶LIR滤波器。因为不对称性,在某些场景中,统计数据可能在不一样方向上具备不一样的值,并致使在最终位于错误的镜头位置对焦。
下列这些就可能发生这种状况:
若是出现上述任一状况,则最终统计数据的总和不正确,可能会产生不许确的FV曲线并致使lens位置不正确。
点光源是当图像的暗区中出现很是亮的光或曝光的物体在FV中引发假的peak时,若是没有考虑到这种状况,可能致使图像失焦或模糊。
Tuning点光源问题有两个基础部分:
为了防止false peak,在低光条件下使用高频带通滤波器[0.2,0.35]来是FV曲线平坦,步骤以下:
若是更改AF滤波器没有产生真正的peak,则使用如下步骤来调整平坦比例以使点光源视为平坦场景,这种调整能够得到更准确而且一直的AF结果。
使用参数来调整点光源的检测
设置能够检测点光源场景的参数后,调整处理点光源的参数
AF Cont Spotlight Enable
为1,这会强制HAF PDAF置信度指示为错误。当检测到点光源场景时,使用AF点光源特征来处理场景。这样能够防止在HAF收敛期间PD值不可靠,同时也防止了在false peak位置时结束FV调整AF点光源 threshold参数以防止FV在false peak位置结束并将点光源场景识别为平坦曲线。这些调整可致使:
点光源场景对于CAF来讲很是具备挑战性,它们具备饱和像素而没有边缘信息。解决此问题的第一步,请确保调整点光源检测功能,以便检测点光源场景。
在某些场景中,如点光源场景,但愿为ROI中的每一个网格赋予权重。若是要启用此功能,请调整af_algo.reserve[96]
到af_algo.reserve[97]
。它能够基于区域(即窗口位置)或亮度值给出权重。此功能在大多数像素饱和的点光源场景中颇有用。在这种状况下,咱们想要提取具备高频内容的像素并抑制饱和像素。在调整这些参数时要当心,由于赋予权重可能会致使某些简单场景的FV不正确。
Touch/face功能的基本验证设计到了PD库返回的PD值,若是要tune touch/face PDAF功能,请执行一下操做:
pdaf.reserve[40]
af_util_adjust_roi: TOUCH ROI af_util_adjust_roi: Calculated new ROI: (1068, 736, 534 534)
对焦到脸部是由于脸部的纹理感较低,获得的FV曲线是平坦的,这致使在CAF中难以聚焦。若是出现此问题,请tuneaf_algo.reserve[91]
到af_algo.reserve[95]
来扩展FD给出的ROI大小,以便ROI有更多的细节,这样能够改善FV曲线。
FV的一致性和准确性彼此密切相关。一般,在惊醒精度优化以前应在固定场景下优化AF搜索的一致性。
了解影响AF速度的问题和权衡是很是重要的,在tuning以前要肯定产生问题的主要缘由。
使用AE扫描工具测试对不一样曝光级别的亮度响应,AE扫描输出一下测试经过与否的结果:
当SAD被禁用时,触发不该该那么灵敏,而且仅由大幅度运动时才触发。理想状况下,gyro仅用于大幅度动做触发而不是轻微动做触发。若是这样的问题仍然存在,则调整gyro参数。有多重参数能够解决问题:
若是在场景变化后(已稳定)过了很长时间才触发,则tune SAD。若是SAD和SADR敏感度过小可能会致使这个问题,调整灵敏度并从新测试。
了解触发延迟的缘由很重要,两个常见缘由以下:
若是问题存在且在弱光环境下发生,则经过如下步骤来调整SADR灵敏度:
GYRO_Sensitivity
和GYRO_PANNING_Sensitivity
为0来禁用gyro相关联的值SAD_PANNING_Sensitivity
为0来禁用SADSADR_Sensitivity
(一般高于50)SADR_Sensitivity
。SAD_PANNING_Sensitivity
从0改回原始值SAD_PANNING_Sensitivity
(变小或变大)GYRO_Sensitivity
和GYRO_PANNING_Sensitivity
为初始值若是触摸前景中的物体具备更高的触发焦点的成功率,则调整ROI,多是ROI设置的太多了。
分别调整TAF和CAF的step table。
若是AF速度调整的很快,可能会致使没必要要的FOV行为。
记录当前step table并与AF Tuning选项卡中的值进行比较,若是当前值与选项卡中的值相同或大于此值,则多是缩放效果的缘由。
有些状况,当镜头从infinity到macro时,FOV会发生显着变化。若是AF速度最大化,则预计会有更多的缩放效果。要减少缩放效果,请减小搜索期间的step以改善FOV的缩放。
要调整AF速度,了解影响AF速度的问题和权衡很是重要。在进行更改以前肯定影响速度的主要缘由。
fine_srch_rgn
设置为SINGLE_NEAR_LIMIT_IDX
,将执行精搜以得到最佳精度当场景没有纹理或者低对比度时,一般会发现此问题。
有两种方法能够解决此问题:
mid_zone
若是总体失败率与对比机相比太高,则在tuning工做和影响/权衡方面,大体能够列出如下几项:
FV_min
增长FV曲线当天空场景对焦失败时,镜头移动到infinity位置,在大多数状况下,应该聚焦成功。然而,对于开环来讲因为镜头下垂,物理镜头位置会下垂,这会致使图像模糊。
检查log中的AF失败。若是AF失败,镜头移动到默认位置。
在低纹理场景中,PDAF可能会没必要要地触发搜索或聚焦。当PDAF库信号高或低置信度以及连续帧的高波动PD值时, PDAF将这些条件评估为场景变化并当即触发。而后PD库经过给出正确的PD值来尝试自我校订,这会触发又一次搜索,而且因为PD值的波动致使镜头来回移动。这种状况称为focus hunting。
在这种状况下可能没法正常对焦,根据每一个参数的描述来tunepdaf.reserve[19]~[20]
。启动此功能后,PDAF会考虑水平和垂直的统计数据以肯定是否将场景设置为低置信度。若是置信度低,则PDAF控制CAF以执行搜索。
大多数状况下,AF会继续搜索或保持对焦,而且没法及时完成搜索。如今只能在搜索完成后拍照,若是在搜索期间点击拍照,则应用程序将暂停快照,直到搜索完成。
因为手抖动引发的模糊,针对场景计算的FV可能降低,保持在很是高峰,并致使AF搜索不许确。因为曝光时间较长,在低光照条件下更严重。若是手持设备在低光条件下搜索不许确,则启用和调整手抖动参数。
手抖过程使用多个陀螺仪样原本基于设备运动来校订FV值,可是这可能会影响功耗。若是发生这种状况,调整haf.reserve[80]~[83]
来设置gyro的采样率。下降采样率可能会影响精度,由于手抖过程须要多个陀螺仪样本,以便在搜索过程当中有运动时校订焦点值。
Face检测对面部大小和位置的变化敏感,会根据这些更改生成新的FD标记,AF每次收到标记时都会触发新的搜索。