ISP FAQ
前言
本文为使用ISP开发的程序员而写,目的是为您在开发过程中遇到的问题提供解决办法和帮助。
说明:
无特殊说明,Hi3519DV500与Hi3516DV500内容一致,Hi3516CV610与Hi3516CV608内容一致 。 根据功能不同,将Hi3516CV610分为10B/00S/20S/00G/20G型号,正文描述以Hi3516CV610-20S为例,如无特殊说明,则内容一致。
与本文档相对应的产品版本如下。
本文档(本指南)主要适用于以下工程师:
- 技术支持工程师
- 软件开发工程师
修订记录累积了每次文档更新的说明。最新版本的文档包含以前所有文档版本的更新内容。
FAQ
ISP
如何解决整体锐度不足
【现象】
图像边缘细节不清,与失焦效果类似。或者对比标杆,大边和纹理的锐度不如标杆。
【分析】
影响图像锐度的维度有整体图像亮度和对比度(AE、WB、GAMMA和DCI)、锐化强度(sharpen)、Demosaic、去噪强度(BayerNR和3DNR)和编码码率等。所以当图像的整体清晰度风格跟客户的需求偏差较大时,优先考虑调整GAMMA等影响图像全局亮度和局部对比度的模块,然后再调整Demosaic和sharpen。
【解决】
需要逐步排除定位图像锐度不足的原因:
- 查看sensor表面,镜头表面是否整洁,是否贴膜没有去掉,是否单边模糊,确认镜头光圈开到最大,对焦清晰。
- 检查图像亮度是否合理,通过ae_compensation参数调整亮度到满意。
- 校正WB,使得图像的白平衡正常。
- 调整GAMMA,让图像整体的风格和对比度达到客户需求。
- 设置编码码率为高码率,观察是否有效果改善。
- 调整Demosaic的相关参数,避免Demosaic插值的图像过于模糊和边缘不清晰。
-
通过PQtools读取当前的sharpen强度信息,或手动设置sharpen强度到最大,观察是否有改善。
- 首先将texture_str和edge_strength都调到最大;
- 其次将over_shoot和under_shoot调到最大;
- 再次将detail_ctrl设置为128,同时,将luma_wgt都设置为127;
- 最后根据图像的黑边白边的情况适当的调整under_shoot和over_shoot以及shoot_sup_str。如果图像的锐度太高,再适当降低texture_str和edge_strength,重复上述三步即可调到客户想要的清晰度风格。
-
关闭或者减弱BayerNR/3DNR去噪模块,观察是否有改善。
如何解决图像发蒙问题,提高通透性
【现象】
图像发蒙,通透性不好。
【分析】
通透性由两大因素决定:清晰度和对比度。
- 若清晰度不够,或对比度不高,会让人感觉通透性比较差。
- 若出现通透性不好,应检查是否有漏光现象。
【解决】
- 遮住漏光的地方,注意sensor板背面也有可能漏光。
- 提高对比度,通过设置更高对比度的Gamma实现。
- 调整LDCI,进一步提升图像的对比度。
- 如果是有雾的场景,或者是类似于有雾的场景,可以尝试调试Dehaze来减弱图像发蒙的问题。
- 提高清晰度,请参见如何解决整体锐度不足和如何解决低照度清晰度差。
如何解决低照度清晰度差
【现象】
低照度时清晰度比较差。
【分析】
- 原因1:清晰度与镜头关系最大。对焦距与物距均影响景深(焦距小,景深大;物距远,景深大),导致整体清晰度差异。
- 原因2:ISP软件内部有默认的联动机制。噪声大时,自动降低锐化强度,并加强去噪强度。该策略会导致低照度时,画面清晰度下降。
【解决】
- 针对原因1,选用同样的镜头(同一个厂家,同一个型号)进行对比。
- 针对原因2,联动机制已开放参数,用户可以按照自己的喜好,在清晰度和去噪之间平衡。在低照度时,可以增加BayerNR/3DNR去噪的强度,以减小噪声。可以适当提高sharpen的锐化,以增强大边的锐度。还可以调整一下Demosaic的参数,防止图像插值出来的边缘过于模糊。
如何解决图像清晰度与物体边缘白边和黑边问题
【现象】
图像清晰度不足或物体边缘(如字体或树叶或者楼宇的边缘)有白边黑边。
【分析】
在图像已经聚焦的情况下,图像清晰度是由两方面决定:
- 去噪强度越大,图像越模糊;
- sharpen锐化强度,锐化强度越大,图像越清晰,反之越模糊。
物体边缘的黑边白边一般是由于锐化强度过大造成。然而,锐化后产生的黑边白边,是Sharpen锐化不可避免的副作用,尤其在sharpen锐化很强的情况下,黑边白边尤为明显,适当的黑边和白边能让人眼感觉锐度更高。
【解决】
图像清晰度和黑边白边的控制主要通过两种途径进行调节,包括去噪和图像锐化。
- 如果图像的清晰度不足,可以适当降低BayerNR的强度,适当提高sharpen的锐化强度。
- 在图像的清晰度达到要求的情况下:
- 首先,通过调大shoot_sup_strength来减弱图像的黑白边。调大shoot_sup_strength,可以在不明显降低图像的清晰度的前提下,收窄黑边白边的宽度、压低黑边白边的幅度,但是shoot_sup_strength调的过大,也会导致图像的清晰度降低,并会导致图像出现微弱的油画副作用,以及加重锯齿的副作用。
- 其次,如果调节shoot_sup_strength也不能将图像的黑边白边调到满意,则可以单独调小overshoot来减弱白边,或者单独调小undershoot来减弱黑边,但是,调小overshoot或者undershoot都会明显的降低图像的清晰度。
如何解决图像的锯齿严重的问题
【现象】
锐化后的图像在小角度倾斜的高对比度的大边缘会产生锯齿。
【分析】
图像中的小角度倾斜的高对比度的大边缘,在sharpen锐化前一般都会有锯齿,只是不太明显。sharpen锐化后,原本不太明显的锯齿也被增强,导致锯齿变得明显。锯齿的产生跟高对比度的大边缘的倾斜角度有很强的关联,不同的倾斜角度,锯齿的严重程度也差别很大。
【解决】
需要逐步排除定位图像产生锯齿的原因:
- 确认产生锯齿的边缘的视角和倾斜的角度跟标杆一致。跟标杆对比锯齿问题,需要两者在同样的视角和边缘倾斜度的情况下对比。
- 关闭sharpen后,看图像是否已经有了明显的锯齿。
- 如果关闭sharpen后,图像的大边缘就有明显锯齿,那就需要调整demosaic和BayerNR。一般情况下,适当的调大demosaic的detail_smooth_str参数,就可以明显的减弱边缘锯齿,但是,demosaic的参数不能调的太极端,否则,边缘会变的过于模糊。
-
如果关闭sharpen后,图像的锯齿不明显。开启sharpen后,图像的锯齿变得明显或者加重。那就需要调整sharpen参数,在保持清晰度不明显的降低的前提下减弱锯齿。
适当的调节edge_str可以明显的减弱锯齿,而不明显的降低图像清晰度。edge_str参数是一个长度为32的数组,通过减小坐标最大的一段的edge_str的值,可以明显的减弱锯齿。比如,减弱edge_str [20]、edge_str [21]、edge_str [22]到edge_str [31]这12个下坐标最大的一段的edge_str的值,而同时保持剩下下坐标较小的一段(0~19)的edge_str的值不变,则可以在不明显降低图像清晰度的前提下减弱锯齿。同时,edge_str强度曲线的调节要尽量平滑。此外,如果shoot_sup_strength过大,也会导致边缘锯齿加重,此时,可以在黑白边可以接受的前提下,调小shoot_sup_strength,以减弱边缘锯齿。最后,适当的调大edge_filt_str,也可以减弱边缘锯齿。
如何解决图像暗角格子问题
【现象】
图像四个暗角随机出现规则横线或者竖线。
【分析】
当采用镜头CRA角度跟sensor不匹配时,光线通过镜头入射会导致GR/GB不平衡从而产生crosstalk现象,由于demosaic模块处理会随机进行水平方向或垂直方向插值,因此产生格子现象。
【解决】
首先确认采用的sensor跟镜头CRA角度是否匹配,如果不匹配的话建议按照sensor厂家提供的文档更换CRA角度匹配的sensor或者镜头;
如何解决AE工作异常,如严重过曝或曝光不足
【现象】
AE严重过曝或曝光不足,调整目标亮度参数无改善。
【分析】
通过ot_mpi_isp_query_inner_state_info接口(请参《ISP开发参考》文档)获取当前状态下的曝光时间和增益信息。
【解决】
基于查询到的当前状态下的曝光时间和增益信息,可做如下处理。
- 如果曝光信息与当前亮度不一致(曝光时间和增益已达到最大值,图像仍然曝光不足或者曝光时间和增益偏小,图像仍然过曝),需要确认硬件电路。
- 如果曝光信息与当前亮度一致,查询AE的直方图统计信息,如果出现灰阶分布过于密集,某些段统计数据为0,请确认图像宽高设置是否合理,VI掩码是否与硬件相符。
- 如果曝光信息与当前亮度不一致,确认AE计算的相关sensor寄存器是否正确配置生效,可以通过I2C/SPI直接读取sensor的shutter、gain相关的寄存器是否正确。
如何解决红外场景亮度和对比度差的问题
【现象】
低照度下,打开红外灯,画面四周亮度偏暗,画面中间亮度过高,出现过曝导致细节损失,并且,高亮区域的对比度差,画面发蒙。
【分析】
红外灯一般照射在画面的中间位置,灯光照射的地方亮度很高,容易出现过曝情况和对比度差的情况,四周缺乏灯光照射,亮度偏暗。
【解决】
- 确保IR-Cut切换为夜模式。
- AE收光,AE的Compensation适当调小,ae_strategy_mode设置为ISP_AE_EXP_HIGHLIGHT_PRIOR模式,hist_ratio_slope和max_hist_offset都设大,就可以实现AE无过曝。
- 因为AE收光,画面亮度降低,需要提升亮度。使能DRC,调节DRC的强度和DRC曲线,使得画面亮度提升,但是亮度提升会引入对比度差的问题,所以需要联调去雾和DCI模块。
- 使能去雾模块,调整去雾自定义曲线,根据亮度局部调整去雾的强度。可以不把暗区拉黑的同时把高亮区域的区域对比度提升,从而细节增加。同时调试DCI,调整画面的对比度。
- 画面还是会有四周暗的问题,这个时候可以利用shading来实现把四周亮度提升。可以不改变或者轻微改变中间区域,把四周围区域的亮度提起来。
如何调整红外模式AE,AWB和CCM参数
【现象】
红外模式下,AE统计信息不稳定,经常跳变。或者红外下AE收敛会收敛成不同亮度,比如用手捂一下,再拿开亮度就变了。
【分析】
这些现象和AE,AWB的配置有关系。开了AWB后,RB分量异常,导致AE大面积单色判断错误,引起震荡。
【解决】
- 红外场景下,使用SDK提供的AE库需要把大面积单色功能(hist_stat_adjust)使能关闭。
- 如果在红外场景下使能wb_gain,会导致图像亮度偏亮,这时建议根据sensor bayer pattern类型配置跳点方式(hist_config),同时统计R与G分量,使得图像亮度更合理。
- 红外模式推荐关闭AWB,并把饱和度调成0,这种情况下,G通道和R通道占比较大的值,CCM矩阵的配置应该为R,G通道的权重大一些比较合理。
- 红外灯应用时如果需要使能AWB,建议设置zone_sel=0,也就是使用全局的AWB统计信息。这种情况下,AWB会把R,B通道乘比较大的系数,R,B通道相对噪声比较大,建议CCM矩阵设置为只用G通道权重大,R,B通道权重小比较合理。
如何解决低照度情况下图像出现竖条纹的问题
【现象】
部分sensor低照度时,图像出现竖条纹。
【分析】
竖条纹是sensor的FPN(Fixed Pattern Noise),它会随sensor数字增益变大,而变得更明显。目前,软件对sensor的数字增益没有做限制,低照度时数字增益比较大,因此竖条纹严重。
【解决】
使用FPN算法模块,对FPN进行去除或减弱。
如何实现背光补偿
【现象】
在背光场景下,目标物体比较暗。
【分析】
背光场景下,可以通过提高图像整体的曝光亮度来进行背光补偿。
【解决】
- 加强指定区域的AE权重。
- Hi3519DV500自动曝光的静态统计信息分为15x17个区域,可通过设定权重表改变每个区域的权重,使最终的亮度相应改变。
- 可通过MPI接口增加指定区域的权重,使最终曝光按照指定区域的亮度曝光,达到背光补偿的效果。当把目标物体权重加的很大时,这种方式可能导致周围亮的区域过曝。
如何实现手动曝光时间,增益自动控制,或者手动增益,曝光时间自动控制
【实现】
如果有需求实现手动曝光时间,增益自动控制,或者手动增益,曝光时间自动控制的功能。
这种功能,最方便的是仍使用AE模式,把曝光时间上、下限设置为相同值,即可实现手动控制曝光的功能。此时如果设置ae_mode为AE_MODE_SLOW_SHUTTER,曝光时间超出一帧上限后,会自动降帧。增益同理,设置sys_gain上下限相同即可。
如何正确设置最大增益
【现象】
低照度时,有时需要限制最大增益获得更好的图像效果。但限制dgain、isp_dgain后,出现AE闪烁问题。
【分析】
大部分sensor的again精度比较低,如果限制了高精度的dgain、isp_dgain,亮度无法按AE要求精确控制,出现闪烁。
【解决】
不分别限制again、dgain、isp_dgain最大值,而是限制system_gain_max,系统增益最大值。即again*dgain*isp_dgain的最大值。不用关心AE如何分配增益。
如何解决AWB易受干扰问题
【现象】
手在镜头前挥过时或占视野面积大的车开过时,AWB易受干扰而变色。
【分析】
肤色或部分车的颜色对AWB影响比较大,会使AWB出现误差。
【解决】
- 设置AWB属性speed,降低收敛速度会使这个现象明显改善。
- 设置AWB算法为高级算法,会对这种现象有改善。如果环境光源不会出现渐变,即不受到阳光影响。只有室内光源,提高AWB高级算法属性tolerance,也会对AWB易受干扰问题有好处。
低照场景下传统BNR容易出现偏绿、AIBNR容易出现偏紫问题
【现象】
低照场景,当前传统BNR容易出现偏绿的问题,调试AIBNR容易出现偏紫的问题。
【分析】
由于低照场景,AWB的统计信息在BNR/AIBNR之后,容易受到噪声、降噪模块以及sensor暗区非线性等影响,因此容易出现偏绿或者偏紫的问题。
【解决】
针对传统BNR/AIBNR出现偏绿或者偏紫的问题,当前可以手动调试AWB的增益,观察Rgain和Bgain的调试趋势,得到调试趋势以后,可以调试AWB的白点统计范围,主要涉及cr_max、cr_min、cb_max、cb_min等参数,具体调试方法可以参考《ISP颜色调优说明》。
开灯场景/关灯场景出现人脸运动模糊问题
【现象】
开灯场景下(iso1600-3200),关灯场景下(iso6400以上),人脸往往由于降噪模块、前端锐化、对比度拉伸的不合理导致出现运动模糊的问题。
【分析】
开灯场景下,为了保证静止的噪声能够压制住,运动往往容易出现运动模糊的问题,出现该问题,首先需要查看3DNR的参数是否调试合理,包括时域强度、运动判决阈值以及空域相关的参数。为了提升运动的清晰度,当前给出了Demosaic、BayerNR、YUV Sharpen、3DNR等多模块联合调试方案。
【解决】
为了更多的边缘区域能够进入到YUV Sharpen模块,提升Sharpen提取边缘的能力,当前推荐的调试方案如下。
须知:
当前推荐的参数值,主要针对iso1600-3200之间,需要根据不同sensor和不同增益需要调试。
- Demosaic模块:当前nddm_strength推荐为40-80之间、nddm_mf_detail_strength推荐为30-40之间、hf_detail_strength推荐为1-2;nddm_mf_detail_strength可以适当调小,该参数调大,噪声容易呈现颗粒状;
-
BayerNR的模块:BayerNR需要适当将运动区域的空域加强,同时避免尽量损失运动边缘损失,当前推荐调试参数如下:
- fine_strength推荐设置为60-100之间,与ISO可以做联动,fine_strength越大,BNR回叠原始像素的比例越少;
- sfm0_detail_prot建议调试为24-31之间,sfm0_detail_prot越大,细节保留越多;
- 空域滤波去噪强度sfm0_coarse_strength可以适当调低,当前建议调试为80-90之间,该值有四个通道,可以调成一样的参数;
- 静止区域的空域滤波强度tss, 一般推荐配置为10-20之间,主要去除静止区域的噪声颗粒;
-
Sharpen模块:Sharpen模块的调试思路在让更多的区域选择边缘,因此需要重点调试以下参数:
- 黑白边相关的shoot参数需要配置合理,包括:overshot、undershot、edge_overshoot和edge_undershoot;
-
让高亮区和运动区域检测成边缘的概率更大,主要涉及到参数: edge_rly_by_luma和edge_rly_by_mot,将高亮区域和运动最大区域锐化增益调大,越容易让相应区域被检测为边缘;具体如图1和图2所示。


-
edge_filt_strength一般推荐为60-63之间,edge_filt_max_cap一般调试为20-30之间,edge_filt_max_cap越大,更多的区域会落到边缘增强处理;
-
lmf_gain_by_mot曲线调整,该曲线的调试原则是最左边静止区域和最右边运动最强区域部分锐化增益调大,对静止区域强边缘和运动清晰度改善明显;具体如图3所示。

-
3DNR模块:
-
BNR运动MAP信息调试:当前在128M内存的板子,当前可以将BNR的运动信息的MAP可以通过工具显示出来,但需要业务通路离线处理;使用PQ调试工具增加NR dump功能,能把场景中运动区域和静止区域显示出来。具体使用方法请参考《图像质量调试工具使用指南》中“原始数据(RAW)和YUV分析工具”小节。如果NR Debug功能显示的运动和静止区域和实际场景出现运动物体不匹配,需要调试BNR中md_static_ratio md_motion_ratio和 md_static_fine_strength等参数,直到运动区域和实际相符。

-
在BNR的运动MAP信息调试合理的基础上,当前主要调试N0级、N1级、N2级的时域参数;其中N0级时域的动静判决信息受到BNR的运动MAP影响较大,N0级时域调试参数如图5所示。

n0tfs_mot参数可以与pretfs配合使用,能根据运动强度精细控制时域强度。横轴为为运动指数(数值越大,运动的可能性越大),纵坐标为时域强度。左右静止区域可以使用比较强的增益,即比较大的时域降噪,运动区域用弱的时域降噪,可优化运动拖尾;调试示例如图6所示。

-
由于当前BNR的空域开启较强,因此3DNR的相关空域的调试可以适当减弱一些,从而提升整体的运动噪声处理的效果;空域相关的曲线推荐使用海思自适应曲线的默认值,3DNR的空域滤波器类型和强度的调试示例如图7所示。

-
3DNR N4级往往用于增强运动区域和静止区域边缘,当前建议选择3号和4号用于运动和静止的增强,调试示例如图8所示。
-
当前3DNR由于时域为3级架构,包括N0、N1、N2级,N0级由于参考BNR的运动MAP进行时域降噪、N1和N2级往往使用3DNR的自身的运动MAP进行降噪,当前定位发现N1级和N2级的时域调试过强往往会出现人脸运动模糊的问题,当前N1和N2的tfs需要设置到10以上,才能够保证背景的安静,往往需要查一下3DNR前是否存在噪声增加过大的问题,导致噪声的跳动幅度比较大。通常需要重点查看Demosaic、Sharpen、DRC、LDCI等模块,确认噪声的跳动是哪个模块引起的,然后定位到相应的模块进行调试;
在前面的模块参数调试合理的基础上,当前联合调试3DNR的时域和空域的参数,尤其是3DNR的时域当前需要细致调试,保证背景能够压制安静的条件下,同时需要兼顾运动人脸的清晰度,切记不能将时域强度和阈值调试过大,从而牺牲人脸的运行表现;针对3DNR的空域,由于空域的不合理往往会导致运动模糊的问题,当前出现运动空域导致的模糊,需要定位到哪一级空域的贡献最大,并细致调试空域强度和空域滤波器类似的组合,当前尽量使用2号滤波器和5号滤波器处理边缘区域,3号和4号滤波器处理运动的平坦区域,通过空域的STH阈值进行选择。
【芯片】
Hi3516CV610/Hi3516CV608
白天晴天场景下,太阳直射树叶容易出现发灰的问题
【现象】
白天晴天场景下,树叶在太阳照射的地方容易出现发灰的问题。
【分析】
树叶在太阳照射的地方容易出现发灰的问题,首先能够抓取原始的RAW数据,用第三方工具分析是否为源数据的问题,在分析RAW数据没有问题的情况下,大概是ISP通路中模块处理导致。
【解决】
利用PQ工具中ISP的TOP模块,依次bypass各个模块,定位到是哪个模块导致的,一般导致高亮色彩发灰,大概有去伪彩模块、CA模块、去紫边模块、3DNR去色噪模块等;尤其是去伪彩模块,当前调试强度较大也会导致树叶的色彩发灰,颜色层次感损失的现象,但需要权衡伪彩与颜色层次感的表现。
长曝光、高增益下,部分sensor容易出现热噪声的现象
【现象】
当前由于客户适配黑光的应用,往往帧率会降低到4-5fps,iso会设置到25600以上,由于当前sensor和主控SOC存在共板的问题,往往导致sensor工作一段时间,温度上升,产生热噪声的问题。
【分析】
由于部分sensor存在暗电流过大的问题,导致曝光时间越长、增益越大,sensor的噪声对于温度的上升非常敏感,从而带来非常难以处理的热噪声,该噪声如果通过后端的降噪模块处理,往往会损失运动的表现,且残留的噪声颗粒大等问题。
【解决】
针对sensor的热噪声的解决当前主要方案如下:
- 优先增加热设计:包括,sensor和主控共板时,距离要最远,通常sensor居中,那主控就偏向一角,并且进行阻热设计,增大散热面积(增大散热片),增加机内散热空间;
- 限制最大增益,以从源头来减弱热噪现象;根据sensor的SR寄存器(也可以参考主控芯片的Tsensor寄存器),在温度升高时,加强时域降噪(增加N0级pretfs、N1/N2级tfs强度)减弱跳动的热噪;热噪更加严重时,还需要同时加强空域。
【芯片】
Hi3516CV610/Hi3516CV608
低照度下静止画面小物体颜色损失、晕出问题
【现象】
低照度场景下,静止画面部分小物体颜色出现损失和晕出的问题,具体如图1所示。

【分析】
碰到小物体颜色损失和晕出的问题,目前优先排查3DNR模块中的去色噪处理部分,建议对比3DNR模块中去色噪处理模块的开关状态;此外若通路中存在AIBNR模块,也可以通过开关AIBNR模块,确认AIBNR的影响。
【解决】
- AIBNR模块对于颜色的影响,目前可借助aiisp_dump工具获取AIBNR处理前后的数据,观察是否由AIBNR模型引起颜色损失和晕出。若非AIBNR模块导致的,建议往后级模块进行排查;
- 一般3DNR模块中去色噪部分的空域滤波处理对小物体颜色的损失和晕出影响显著,建议平衡静止画面去色噪能力和颜色晕出部分,避免色噪空域滤波器调试过度,导致颜色晕出问题。
【芯片】
Hi3516DV500/Hi3516CV610
低照度下暗区颜色损失的问题
【现象】
在低照度场景中,去除画面低频色噪,通常会导致暗区颜色出现拉灰和损失的问题;具体如图1所示。

【分析】
当前在低照度条件下,暗区常出现显著的低频色噪,ISP端到端调试为消除低频色噪,常导致暗区颜色偏灰的问题。
【解决】
- 针对当前通路如果存在AIBNR模块,应优先确定暗区颜色损失是否由AIBNR去噪导致的,可以通过aiisp_dump工具抓取AIBNR处理前后的数据,观察AIBNR处理后数据的变化,另外也需要通过将原始RAW数据进行时域平均,确认原始RAW数据暗区是否存在颜色信号。
- 检查开关通路上的CA模块,确认CA模块中y_ratio_lut(根据亮度调节)、y_sat_lut(根据饱和度调节)两个调节工具是否对于暗区的颜色产生影响。当前需要在暗区颜色保留与低频色噪抑制之间进行权衡。
- 排查通路中的CAC模块,当前可通过开启和关闭CAC模块,确认CAC模块是否对暗区颜色的损失产生影响。若确认开启CAC模块后,发现暗区颜色损失较多,应优先依据《ISP图像调试指南》中CAC模块介绍进行调试。
- 排查3DNR模块去色噪部分的影响,确定色度时域降噪强度和空域降噪的强度是具有在调节的空间,当前还需在色噪去除与暗区颜色保留之间进行权衡。
【芯片】
Hi3516DV500/Hi3516CV610
如果优化暗区噪声跳动的问题
【现象】
高动态范围场景中,暗区场景频繁出现难以抑制的跳动噪声问题。
【分析】
暗区场景噪声无法有效抑制,主要因为确保亮区不过渡曝光,暗区曝光不足,图像灰度数值偏低,从而暗区信号易受噪声影响,导致BayerNR模块动静态判断决不准确;
【解决方案】
- 由于暗区较暗导致BayerNR的动态判决不准确,当前优先确认BayerNR模块的动静判决相关参数:md_anti_flicker_strength、md_static_ratio、md_motion_ratio、md_static_fine_strength。可以优先将md_static_fine_strength设置到48-64之间,观察暗区噪声跳动抑制是否有所改善,也可通过BNR的运动信息图像观察暗区动静判决变化。
- DRC/LDCI针对暗区拉伸的曲线和整体强度需重点调试确保暗区在黑电平附近的数值拉伸增益适中避免拉亮导致暗区噪声过大问题。
- 调试完BayerNR模块后,需检查3DNR模块相关的时域参数,主要包括N0、N1、N2级时域强度及动静判决的阈值大小,具体可参考《Hi3516CV610/Hi3516CV608 3DNR参数配置说明》。
【芯片】
Hi3516CV610
如何解决高温下黑电平漂移对颜色的影响
【现象】
在过高或过低温度下,AWB校正后图像仍然偏色。
【分析】
在过高或过低温度下,sensor采集图像的稳定性会受影响。在高温下,sensor的黑电平会产生漂移,真实的黑电平可能是正常温度下的几倍。这时,AWB校正后图像偏色。理想情况下,sensor对不同亮度的灰色点颜色表现是相同的,R = K * G。常温下sensor的offset是F0,高温下sensor的offset是F1,F0<F1。
- 常温下计算R通道增益为:Normal_R/G = (K * G + F0 – F0) /(G + F0 – F0) = K
-
高温下计算R通道增益为:High_R/G = (K * G + F1– F0) /(G + F1 – F0)
F0 < F1(高温下黑电平漂移)
从sensor的光谱图可以看到,多数sensor的绿色感光强于RB两个颜色,K<1;High_ R/G - Normal_R/G= (1 - K) * (F1 – F0) /(G + F1 – F0)>0, High_R/G > Normal_R/G。红色通道增益Rgain =G/R= 1/(R/G),因此High_Rgain < Normal_Rgain,红色通道增益偏小。同样可推出高温下蓝色通道增益偏小,因此高温下图像偏绿是必然的。
【解决】
High_R/G - Normal_R/G= (1 - K) * (F1 – F0) /(G + F1 – F0),G体现了亮度信息,G越大,High_R/G与Normal_R/G的偏差越小。物理含义是:亮度越高,对黑电平的偏移越不敏感。因此,推荐增大AWB参数的black_level(前默认值为0x40),降低黑电平漂移对增益的干扰。
如何解决低照度亮度、对比度偏低
【现象】
低照度时,发现亮度、对比度不如对比标杆。
【分析】
- 原因1:镜头光圈不同。F值越小,光圈越大,到达sensor的光通量更多。
- 原因2:sensor不同。sensor的光电转换效率不同,决定了低照度表现。
- 原因3:整体亮度不同。因为图像亮度值比较低,一些产品通过修改亮度、对比度的方式,提高人眼可见度。
- 原因4:一些产品在低照度时,会降帧率,曝光时间会加大,因此画面显得更亮些。
- 原因5:低照度下经过降噪算法处理之后,可能降低对比度。低照度环境下,椒盐噪声较多,当降噪算法过多处理了椒噪声之后留下盐噪声,这样会使整体图像发白现象。
【解决】
- 针对原因1:选用同样的镜头(同一个厂家,同一个型号)进行对比。
- 针对原因2:尽量采用同样的sensor进行对比。
- 针对原因3:调整AE相关参数,使其整体亮度与标杆相当。
- 针对原因4:在demo中,可以手动降低帧率,但产品实际应用中并不推荐这样做。
- 针对原因5:可以调整降噪策略,或调整Gamma、LDCI算法模块参数,增加其整体对比度。
如何解决光源字体附近出现方向性的毛刺
【现象】
正常照度下,光源字体附近出现方向性的毛刺。如图1所示:

【分析】
原因:光源字体出现方向性的毛刺,该问题主要是由于Global CAC模块中的参数标定不合理而导致。
【解决】
针对该问题,首先检查Global CAC标定的静态系数是否合理,如果不合理进行重新标定;如果不想标定Global CAC的静态系数,默认需要将Global CAC的使能关闭。图2所示为Global CAC静态系数不合理,开关Global CAC对比图。
图 2 Global CAC静态系数不合理情况下,开关Global CAC对比图

如何解决AE无法控制Piris光圈
【现象】
Piris光圈接好后,驱动对接成功,可以通过手动的方式配置光圈开关,但用AE无法控制。
【分析】
AE没有配置正确相关的光圈参数。
【解决】
- 需要配置AE route,否则默认曝光时间到最小值才会动光圈,但实际使用中很难达到最小值。所以需要通过配置AE route,使光圈在曝光时间未到最小值时就动作。
- 在xxx_cmos.c文件中,没有配置ae_sns_dft->max_iris_fno和ae_sns_dft->min_iris_fno。请注意不是min_iris_fno_target。有Target的参数是指通过MPI接口配置的最大最小值。没有Target的是光圈实际支持的最大最小值。如果未设置,会导致AE认为Piris光圈最大最小值都为0,就不调了。可以将这两个参数直接设置为最小和最大。
DCIris光圈手动控制可以开关,但自动模式不会关闭原因
【分析】
- DCIris光圈手动控制可以开关,说明硬件连接没有问题。
- DCIris一般用于规避工频闪的问题。AE抗闪需要曝光时间为电源能量周期的倍数。比如50Hz为10ms倍数。在高亮环境下,最大光圈时曝光时间小于10ms,想要实现抗闪,要用到DCIris,关小光圈来实现。
- SDK提供的AE DCIris算法,当曝光时间到最小值以后才会关闭光圈。但默认最小值一般为2行,相当于几十微秒,实际场景几乎无法达到这么小的曝光时间,所以看不到光圈关闭。可以手动设置曝光时间最小值为10ms来实现抗闪。或者不设置曝光时间最小值,设置抗闪模式为Normal模式,曝光时间降到抗闪最小曝光时间后,会维持曝光时间不变。此时相当于已达到曝光时间最小值,也会关闭光圈。
如何解决AE闪烁
【现象】
同步问题:具体表现为某一帧或两帧突然比其他帧亮很多或暗很多,然后恢复正常。精度问题:具体表现为画面亮度持续变化,变化程度或小或大;或AE偶尔出现震荡。
【分析】
AE闪烁问题最常见的为两类:同步问题和精度问题。
- 同步问题:是因为很多sensor,配置增益,会在下一帧生效,配置曝光时间,会在下下帧生效。isp_dgain同样是当前帧配置,下一帧生效。这样如果同步设置不正确,在增益曝光时间相对变化大时,就会出现闪烁。常见于高亮场景和开启抗闪时。
-
精度问题:AE算法计算的亮度值,具体配置到sensor的时候,因为可控制的增益精度有限,不能够完全达到AE算出的亮度值。
如果精度低,亮度就有可能在相邻的两个可以达到的亮度间来回跳变,始终无法收敛到正确的亮度。表现为震荡、闪烁。
【解决】
- 同步问题:xxx_cmos.c中有同步配置cmos_get_sns_regs_info,其中有sensor 寄存器的同步配置。cfg2_valid_delay_max控制isp_dgain同步。可以尝试修改曝光时间、增益、isp_dgain同步配置来解决该问题。
- 精度问题:因为isp_dgain精度很高,保留至少2倍的isp_dgain可以很好的解决精度问题。限制增益不建议分别限制again、dgain、isp_dgain的增益,这样容易带来精度问题,可以通过限制system gain来实现,AE会自动分配3个增益。
如何解决鱼眼校正放在VI模块引起的边缘噪声大的问题
【现象】
当前鱼眼校正放在VI模块时,也就是在3DNR之前,由于鱼眼校正会引起边缘噪声大,中间噪声小的问题。从而造成画面的噪声和位置相关。
【分析】
鱼眼校正引起的噪声不均匀,且和位置强相关,可以通过BayerNR+NrLsc使能进行优化,当前Hi3516DV500/Hi3519DV500 MeshShading模块针对BayerNR的降噪有lsc_gain_lut表的配置与MeshShading曲线调试。
【解决】
调试BayerNR中的NrLsc模块,使能lsc_nr_en,并调试MeshShading中的MeshShading曲线。可以适当将画面边缘处的Gain调大一点,这样BayerNR使能NrLsc,可以针对边缘处去噪强一些,但需注意边缘处Gain值过大,可能造成边缘亮度改变。将画面中心处的Gain调小一点,BayerNR针对中心区去噪弱一些。此时BayerNR去噪强度需要调试coarse_str而不是fine_str。
如何解决开启抗闪后较亮场景仍然闪烁的问题
【现象】
在自适应中,设置了默认的AE route,此时再设置对应频率的抗闪,当环境光较亮,但是所需曝光量已经大于抗闪的最小曝光量时,仍然有闪烁现象。
【分析】
自动抗闪功能受到AE route的限制,如果AE route设置了优先分配增益,那么会导致总的曝光量大于最小抗闪曝光量时,曝光时间仍然小于最小抗闪曝光时间,那么此时如果设置的是自动抗闪模式,那么此时达不到抗闪效果。
【解决】
设置AE route为曝光时间优先分配,即增益在1倍,或者最小期望值之后,优先让曝光时间达到最小抗闪时间,此时开启自动抗闪才能起到抗闪效果。
如何解决软光敏方案频繁切换IR_cut的问题与使用建议
【现象】
在实验室全黑场景(没有或少量可见光),红外灯开启,当红外光的反射距离在4m以内,软光敏方案(ir_auto sample)频繁切换IR_cut的问题。
【标定条件】
- 红外灯打开,设备切换到IR模式,并切换滤光片到全通。
- Raw的亮度合适,大约到最高亮度的70%~80%,如12bit对应像素值4095, 80%是像素值3276。
- 执行sample的标定程序,获取IR模式下的最大和最小阈值用于场景判断条件。
【使用建议】
- 需要满足场景亮度适宜,不过曝或过暗,否则不宜使用软光敏功能。
- 设备与物体IR反射距离不宜太近或太远,否则导致标定参数不适用的问题。
- 红外切换可见光时,如果红外光太强,比如ISO100,此时需要关闭ISO联动判断条件。
DynamicBLC使用流程
- 需要确认sensor的黑电平是否会随iso和温度的影响漂移。可抓取低照度场景下的黑帧统计黑电平的值,若该值与sensor厂商提供的值有较大差别,则需要使用动态黑电平。或者在低照度场景下调黑电平的值,若调整黑电平的值可以改善图像偏色问题则说明存在黑电平漂移的现象,需要使用动态黑电平。
- 修改sensor驱动寄存器,确保sensor输出OB区。
- 在sensor驱动里将初始化黑电平模式设置为动态黑电平。若sensor内部黑电平校正会导致ob区的黑电平和可见光区的黑电平差别比较大,需要调用pfn_set_blc_clamp(vi_pipe, blc_clamp)接口关闭sensor内部的黑电平校正。
- 若OB区的datatype与可见光区域图像的datatype不一样,需要修改mipi的ext_data_type_attr确保mipi可以接受到ob区。
- 调整mipi、dev、pipe的宽高,确保在isp fe crop之前ob区是存在的,isp fe crop之后ob区被裁掉。
DynamicBLC使用注意事项
要先确保mipi数据中包含OB区,才能打开DynamicBLC模式对OB区进行统计。数据处理流程如图1所示。

因此若要使用Dynamic BLC模块基于OB区统计得到合理的黑电平值,整个数据处理通路的配置说明如下:
- sensor驱动配置:在驱动中添加可以读出ob区的sensor序列。启动Dynamic BLC模块,若sensor内部黑电平校正会导致ob区的黑电平和可见光区的黑电平差别比较大,需要关闭sensor中的BLC校正功能。
- mipi配置:确保mipi的裁剪区域包含OB区。若OB区的datatype与可见光区域图像的datatype不一样,则需要修改mipi的datatype配置,可通过调用OT_MIPI_SET_EXT_DATA_TYPE接口实现,接口的具体信息请参见《MIPI 使用指南》,使得mipi输出的数据包含OB区。若Dynamic BLC模块异常要检查mipi检测到的分辨率是否为包含OB区的分辨率。
- VI dev配置:宽高与mipi输出宽高保持一致。
- pub attr配置:配置wnd_rect中的起始坐标和宽高信息,使用ISP裁剪功能裁剪掉OB区,保证ISP FE和BE处理的数据为不带OB区的raw数据。
VI pipe attr和chn info中的宽高配置为ISP裁剪后的宽高。
offset和calibration_black_level可以用在线标定工具dynamic_blc_online_cali或者PQtools里的标定工具标定得到。dynamic_blc_online_cali有写好的sample。
offset为OB区黑电平与可见光区黑电平的差值。该值用于补偿OB区黑电平,使其与可见光区黑电平保持一致。
calibration_black_level为不同again对应的黑电平的值。当环境光发生变化时,AE在第N帧重新计算出曝光信息。在N+1帧将第N帧的曝光信息配置给sensor。第N帧的曝光信息会在第N+3帧的RAW中生效。由于BLC会受到iso的影响所以第N+3帧的BLC发生了变化,但第N+3帧减的还是第N+2帧的黑电平,所以图像会偏色。该值用于计算补偿第N+3帧的黑电平,使其与可见光区黑电平保持一致,解决图像的偏色问题。
由于sensor gain值较大时,动态黑电平会严重漂移,所以calibration_black_level的标定值不够准确。但是不会影响开关灯这种极限场景的图像效果。
采集FE raw数据送到BE时黑电平配置注意事项
采集FE的raw数据送到BE时,并且FE使用了动态黑电平,这时候建议FE使能user_black_level,使run BE的时候不用考虑黑电平的同步。使用user_black_level要注意保证sensor黑电平要小于user_black_level。如果sensor的黑电平超过user_black_level,需要关闭sensor_dgain减小sensor的黑电平,或者增大user_black_level。BE所在pipe,需要设manual_black_level的值和user_black_level一样。
AE增益分开配置使用说明
【说明】
sensor支持长短帧增益分开配置,需要在sensor驱动中做相应的适配。
- 驱动需要适配相应的增益和曝光时间配置函数,需要交替配置长短帧,AE算法会回调这个函数对sensor进行曝光参数配置。
- 驱动需要通过cmos_get_ae_comm_default接口传递相应的参数到AE算法内部。
- ae_gain_sep_cfg:需要设置为True,使能增益分开配置模式
- diff_gain_support:用于长短帧配置不同的增益需要将该模式打开
- lhcg_support:如果是单快门双增益的sensor,需要将该配置打开。
- sns_lhcg_exp_ratio:单快门双增益sensor,需要将sensor内部的长短帧增益比例的配置给AE。AE在配置曝光比的时候会将sns_lhcg_exp_ratio考虑进去,即长帧曝光量/短帧曝光量*sns_lhcg_exp_ratio等于最终的曝光比。
【注意事项】
当前单快门双增益模式,只支持长帧优先,非扩展的AE Route。支持自动曝光,不支持手动设置曝光参数。
【案例】
cmos_get_ae_comm_default() {
ae_sns_dft->diff_gain_support = TRUE;
ae_sns_dft->lhcg_support = TRUE;
ae_sns_dft->sns_lhcg_exp_ratio = 64; / 6bit 精度/
...
}
cmos_gains_regs_set(gain)
{
static bool first_gain = 1;
if (first_gain == TRUE) {
deploy_long_gain_to_sensor(gain);
first_gain = FALSE;
} else {
deploy_short_gain_to_sensor(gain);
first_gain = TRUE;
}
return;
}
cmos_inttime_update(int_time)
{
static bool first_time = 1;
if (first_time == TRUE) {
deploy_long_time_to_sensor(int_time);
first_time = FALSE;
} else {
deploy_short_time_to_sensor(int_time);
first_time = TRUE;
}
return;
}
Sensor相关
如何解决对接sensor时,环境亮度变化引起图像出现裂屏
【现象】
Hi3519DV500对接某厂商 sensor,环境亮度变化时,AE刷新sensor的曝光时间和增益,图像上出现亮线或图像裂屏。
【分析】
Slave模式sensor 的模拟增益寄存器生效机制是实时生效的,当环境亮度变化时,AE刷新相关sensor寄存器,并对相关寄存器进行配置,当在图像数据的有效区(非消隐区)对其模拟增益进行配置时,模拟增益实时生效不在垂直消隐区,将会出现亮线或裂屏问题。
某厂商多数slave模式的sensor都存在模拟增益实时生效的问题,这就要求配置模拟增益的时间需要满足一定在垂直消隐区内完成。如保证了寄存器在消隐区生效,不会出现坏帧。
【解决】
使用ISP的寄存器配置机制(或客户设计相关配置机制),通过中断对寄存器进行配置,使其满足模拟增益实际生效在垂直消隐区内。而当客户应用程序业务量比较大时,可能导致中断响应不及时,从而导致配置不满足消隐区内,可能还是会导致上述问题,此时需要优化中断处理业务,尽量确保中断处理的及时性。
如何解决对接sensor时,环境亮度变化引起闪烁
【现象】
对接某厂商 Sensor时,当环境亮度变化,明显闪烁,同一SDK版本对接其他sensor不存在闪烁。
【分析】
上述sensor在第N帧刷新Shutter(曝光时间)寄存器,在N+2帧生效,在第N帧刷新Gain寄存器,在N+1帧生效。同时刷新Shutter和Gain寄存器会导致生效时间不一致。因此推荐先刷新Shutter寄存器,延迟一帧后再刷新Gain寄存器。
具体信息请参考某厂商提供的图示说明,其他sensor类似,如图1所示。

【解决】
ISP已经针对以上问题,设计了一套寄存器配置机制,确保相关的sensor寄存器配置之后生效在同一帧时间内,从而解决闪烁问题。
具体处理方法:通过xxx_cmos.c文件中cmos_get_sns_regs_info()函数进行配置修改,如修改参数delay_frame_num,它表示延迟多少帧对寄存器进行配置,而每一个需要配置的寄存器都有一个参数delay_frame_num,详见xxx_cmos.c文件。
如何解决不同的sensor器件实现50Hz/60Hz抗闪
【现象】
采用发布SDK的默认参数,打开抗闪,该功能不生效。
【分析】
交流电波形如图1所示。

sensor不同行的曝光起始时间不同,如果曝光时间较短,就会有的像素行处在比较亮的时候曝光,有的处在比较暗的时候曝光,可见sensor各行即使保持相同的曝光时间,累积的能量是有明显差异的,导致了图像前后帧的同一行,同一帧内的不同行亮暗差异,从而出现了闪烁。
如果控制曝光时间为频闪周期的整数倍,则每一帧图像的整体亮度基本一致。如下:
- 在50Hz环境下,要求曝光时间为1/100s的整数倍;
- 在60Hz环境,要求曝光时间为1/120s的整数倍。
【解决】
Hi3519DV500 ISP内部实现了抗闪,sensor的曝光时间以行为单位,不同sensor行与秒之间的转换比不同,用户需要根据自己的硬件环境,合理配置lines_per_500ms参数以实现抗闪。lines_per_500ms是行频的1/2,计算公式如下:
lines_per_500ms = 像素时钟频率/(图像宽度+水平消隐区宽度)/2。
如何解决sensor输出图像中间有黄圈问题
【现象】
图像中间出现同心圆状的偏色,一般表现为黄圈。
【分析】
sensor的CRA与采用的镜头不匹配,导致偏色。
【解决】
- 通过ISP中镜头阴影校正模块解决。默认的参数不能完美匹配每一款镜头,还需要用自己的镜头重新校正。在镜头的参数中,后焦长度与光圈大小影响最大。
- 当照度较低时,正常照度下正常的校正参数,会导致四周有较大的噪声,亮度也更高一些。所以在低照度时,可以换用限制最高增益的校正表,或关闭镜头阴影校正功能。
如何规避Sensor Built-in模式亮暗区域出现黄绿色彩问题
【现象】
Built-in sensor图像亮暗区域出现黄绿色彩、以及运动区域紫边明显。
【分析】
长短帧数据在sensor内部合成后(sensor内部做合成并分段压缩),其结果在拐点处会出现颜色不够线性,这是raw数据带来的问题。
【规避措施】
- 考虑采用帧合成WDR模式。
- 通过降低图像亮度,使颜色异常区域不落在关注区域。
如何实现图像裁剪
【说明】

【实现】
- Sensor内部一般可以做裁剪,但切换裁剪大小速度较慢。
- MIPI Rx模块,MIPI和LVDS均可以裁剪,并配置起始点。
- VI PIPE上可以裁剪。
- ISP模块可以裁剪。图像到这个位置,裁剪后必须只剩有效图像,否则会有一些不是正常图像的数据进入ISP,影响图像处理。
- VI CHN模块也可以裁剪,一般不会在此处裁剪。
如何理解接入性能
【说明】
-
串行(MIPI/LVDS/SLVS-EC)接入性能主要有两点限制:
(1)单lane速率
芯片MIPI单lane速率(bps)可以通过手册查询,sensor单lane速率(bps)可以在sensor序列里直接获取到。
(2)VI/ISP工作频率
VI/ISP频率可以等效为并口时的Pclk,单位为Pixel/s。
因为sensor序列一般只提供单lane速率,可以通过单lane速率换算。假设一个sensor单lane为1.14Gbps,共4lane,数据为12bit数据。
总数据量为1.14Gbps * 4 = 4.56Gbps
总像素频率为4.56 * 1000 Mbps / 12 bit/Pixel = 380 M Pixel/s
-
并行接口(DC)请参考芯片手册。
sensor WDR模式RHS两帧之间调节限制
【说明】
当前某sensor 4K@30fps WDR模式RHS1寄存器存在如下限制:
RHS1(N+1)>=RHS1(N) + 2*BRL – 2*VMAX +2
当前BRL=2200,对于30fps帧率VMAX=2250,即RHS1(N+1)>=RHS1(N)-98
即当前两帧之间RHS1限制变化对于30fps有98行的限制,由于SHR0>=RHS1+9行,导致SHR0寄存器两帧之间也有限制。该限制会导致当前帧率切换,如升高帧率和长帧和WDR切换画面无法平稳过渡。
Sensor offset配置不合理导致WDR模式下高亮场景出现分层问题
【说明】
在WDR模式下,Sensor offset当前配置不合理,容易导致Fusion模式下高亮场景区域出现分层问题。主要原因是Fusion模式下,对于曝光比的准确性要求比较高,导致高亮场景下,由于长短帧曝光时间短,例如短帧在2行左右,长帧因曝光比限制如16倍,长帧在32行左右,此时offset配置不合理会导致曝光比存在偏差。offset配置不正确导致WDR场景高亮分层问题,具体如图1所示。

ISP模式切换和分辨率切换,概率出现I2C报错问题
【说明】
在模式切换和分辨率切换模式下,可能概率出现如图1所示报错,原因是模式切换会关闭sensor时钟,i2c正在读写如果关闭sensor时钟,会收到一个异常中断。当后续重新打开sesnor时钟时,使用i2c配置寄存器时,发现该异常中断会提示打印下图错误日志,驱动之后会将i2c控制器先关闭后打开,清空fifo, 该打印异常是上次数据的异常,对当前操作无影响,该异常不会导致更多的时间消耗,对通路无影响。

