ISP HDR Tuning Guide


REVISION HISTORY

Revision No.
Description
Date
0.1
  • Initial release
  • 02/20/2020
    0.2
  • Corrected AE HDR API
  • Corrected HDR API
  • 07/20/2020
    0.3
  • Updated HDR and WDR description.
  • 06/17/2021

    1. HDR 调适参考

    • HDR

      HDR (High Dynamic Range),透过合成两张不同曝光条件的图像,从而得到一张动态范围较传统单一曝光条件(Linear mode) 更高的图像。

      Figure 1: HDR On / HDR Off

      HDR的调整首要着重在画面亮度的分配,如何在8-bit 0~255的范围里挤入最多想要的信息。所以首先我们会从AE的设定开始讲起,接着切入与亮度分配有关的HDR/WDR调整,最后再到NR/Edge的搭配以及一些常见问题的处理方式。

    • Compress HDR

      Compress HDR是由Sensor端就合成出HDR,仅由一张影像由ISP调整动态范围。

      此方式决定权在于Sensor端,而ISP端仅能透过Sensor特性来发挥HDR效果:

      1. 可以借由降低原本的AE Target数值(建议可降至原本的¼ or ⅓);

      2. 透过WDR - GlobalDarkToneEnhance or WDR Curve参数来决定暗区亮度要提升多少。


    1.1. AE 设置

    HDR mode透过长短曝光两张合成的方式,让原本单张容易过曝的区域用短曝光的影像来合成,进而获取到长曝原本过曝区的信息,所以长、短两张的曝光比例(HDR Ratio)便直接关系到了HDR的动态范围大小。

    然而HDR Ratio却并非愈大愈好,短曝的影像必须乘上HDR Ratio的比例后才能在线性上和长曝的影像匹配,所以HDR Ratio的比例愈大,乘上的gain也就愈多,影像noise的问题也就愈大。

    在AE的环节我们主要需要决定三个参数:

    1. Max Short Shutter

    2. HDR Ratio

    3. AE Target

    Max Short Shutter 与sensor运作的fps及频率有关,可由sensor specification中推算出此项的最大限制,建议就设为最大值。

    可通过启动camera open之后的log中会有提供当前sensor driver内的gain/shutter/fps等信息,如下图:

    • isp_gain_max :ISP gain的最大值

    • sgl_min / sgl_max :长曝sensor gain的最小值/最大值

    • sgs_min / sgs_max :短曝sensor gain的最小值/最大值

    • shl_min / shl_max :长曝sensor shutter的最小值/最大值 (μs)

    • shl_step :长曝sensor - 1 line的所需时间 (ns)

    • shs_min / shl_max :短曝sensor shutter的最小值/最大值 (μs)

    • shs_step :短曝sensor - 1 line的所需时间 (ns)

    HDR Ratio 需视场景的动态范围需要来决定,但必须要注意的是HDR ratio决定的是HDR效果的 “最大” 动态范围,而实际画面的动态范围还会受后面WDR内的Global Dark Tone Enhance设定所影响,所以建议不一定要追求很高的HDR ratio,而过小的Ratio又会限制到长曝的曝光时间导致长曝张提早拉gain而带来noise问题,一般我们建议设为10x (= 10240),亦可支持16x (= 16384)。

    AE Target 控制画面的整体亮度,通常设成和单张Linear mode相同即可。如果WDR等都调过后觉得最终HDR效果暗区noise有些不好控制,可以适当调高一些target让AE协助将画面拉亮,noise效果会比用WDR拉亮的小。

    1. 依照sensor specification及fps计算出短曝的最长、最短曝光时间后分别填入短曝的曝光表中。然后将欲使用的HDR Ratio填入HDR Ratio的字段中,横轴为by total gain可设定相同的HDR ratio [尚未支持动态改变HDR Ratio机制]。

    2. 依照HDR Ratio,将短曝曝光表中的Shutter乘上HDR Ratio后填入长曝曝光表中(ex:短曝2100μs、长曝21000μs)。


    1.2. HDR 设置

    HDR API中包含各项基本的HDR参数设定,其中SensorExpRatio需参照前项AE章节中的HDR ratio进行设置,其余参数功能介绍如下:

    参数 功能介绍
    NrEn 针对短曝张的额外2DNR
    开启可让短曝影像变干净,但需注意是否有模糊问题
    YwtTh1及YwtTh2 HDR合成中长短曝选用的上下界
  • th1以下的亮度会选用长曝影像数据,th2以上则选用短曝,th1与th2之间则会采用长、短曝blending的方式(限制:th2 > th1)。
  • 调整上可先将th2设0,然后改变th1直到尽量高,可是画面中没有因长曝饱和而颜色偏差的位置(批注1)。
  • th1决定后,th2建议设为th1 + (50 ~ 100) 之间的数值,如th2设得很大,则对亮区的noise表现会有帮助,但同时也代表着细节会流失(blending到已过曝无细节的长曝)。
  • NoiseLevel Noise level,用于判断动静
    横轴为亮度,值越大越容易判断为静。 只用默认值即可,如果需要可依据默认值来微调。
    MotionTh 动静阀值
    长短曝对齐后的差值,减去NoiseLevel,若大于MotionTh,则判断为动区,依据动的程度来混合长短曝,若小于MotionTh,则判断为静区,依据亮度来混合。
    MotionAdjLut 动区长曝比例表纵轴
    横轴为静到动,纵轴为混合长曝比例。
    值越大,使用长曝越多;值越小,使用短曝越多,越脏但可以减轻鬼影。
    通常偏静区使用长曝较多,偏动区使用短曝较多,所以会是一个递减的曲线。
    SensorExpRatio 长短曝frame的亮度比
    正常状况下需填与AE章节中的HDR Ratio相同之数值。
    DynRatioEn 动态长短曝亮度补偿
    如果sensor长、短曝的实际亮度差与SensorExpRatio设定的数值有差异,则开启动态补偿功能可在一定程度内消平这个差异(ex:长、短曝shutter计算因精度问题无法刚好是指定倍数时,开启此功能可消弥这个误差)。
    DynRatioSrcSel 动态长短曝亮度补偿的参考张选择
    0:长曝、1:短曝
    YSrcSel 静区亮度来源
    静区会依据当前亮度(Yin)和YwtTh1、YwtTh2来决定长短曝的比例。当前亮度可以透过4种方式获得。
    0:长曝周围平均值、1:长曝周围最大值、2:短曝周围平均值、3:短曝周围最大值。
    预设为1,不建议调整。
    NoiseLevelSrcSel NoiseLevel的横轴,亮度来源
    NoiseLevel会依据亮度来查表,亮度可以透过4种方式获得。
    0:长曝、1:短曝、2:长短曝较小值、3:长短曝较大值。
    预设为3,不建议调整。
    MotionMaxVal 动区上限值
    长短曝对齐后的差值,减去NoiseLevel,会再卡此上限值,值越小,上限值越小,则小差异会被判断成较大的移动,所以越容易把噪声当动区,进而使用较多短曝,导致较脏。
    预设为3,不建议调整。
    MotionLumaTh 动区全短曝亮度阀值
    若判断为动区,且亮度大于此值,则全部使用短曝。
    预设为1000,不建议调整。
    MotionAdjSft 动区长曝比例表横轴
    横轴为长短曝差异,减去NoiseLevel,也就是静到动。
    不建议调整。

    批注1 因为AWB gain apply的位置在HDR合成前,故长曝影像饱和的位置常会出现各种异常色彩但不一定是白色的状况,共同的特色是会细节丢失,故需要向下调整th1来避免过曝的长曝区段出现在最终的影像中。

    1.3. WDR调整

    长、短曝两张影像经过HDR在16-bit的空间里合成之后,会再经过WDR的Global Dark Tone Enhance来重新进行亮度分配并下降为12-bit,一般我们需透过Global Dark Tone Enhance来将画面中原本属于长曝的暗区数据拉亮或是还原到正常单张应有的亮度,仅中高亮或过曝区透过曲线把短曝张的信息整合进来。

    Global Dark Tone Enhance预设有16条curve可供选择,0是维持线性不做亮度提升的曲线,随着数字上升拉亮的程度会逐渐增加,但第7条之后的第8条开始亮度增加的幅度会下降一次,然后再重新上升;0 ~ 7与8 ~ 15可以视为是用了两种不同型态的曲线来达成亮度的提升。可以两种都分别使用看看再选一个效果较喜欢的。如果调整Global Dark Tone Enhance后仍有暗区不够亮的情形,此时可尝试再搭配调整主Gamma来将暗区提亮。

    透过Global Dark Tone Enhance将画面亮度整体拉亮后,通常会出现对比度差、通透性不足的问题,此时可适当增加一点WDR strength在曲线之外额外加一些LTM(Local Tone Mapping)的效果来提升层次感。其余细部的调整参数列表说明如下:

    参数 功能介绍
    BoxNum 改变Local Tone Mapping中local分析的尺度
    数字愈大分析的尺度愈小,可关注愈小范围的亮度优化;而尺度设大整体画面较自然。
    建议可先设最大最小比较看看再朝某一个方向调整。
    不建议by iso切换不同的曲线,因会导致闪烁问题。
    PreEnhance 亮区动态区间比例
    值越大,亮区分配到的动态区间越大,值越小,暗区分配到的动态区间越大,索引值16,索引值2为默认值;另外新增索引值1115,依据索引值2做为基准,当索引值越大暗处越亮,但整体越朦胧;其他索引值(7~10)皆无效。不建议by iso切换不同的曲线,因会导致闪烁问题。若开启GammaSyncEn,则PreEnhance会失效。
    AutoDetailEnhance 自动细节补强
    如开启则在拉亮拉暗的过程中,系统会自动做对应的锐度补强
    ManualDetailEnhance 手动细节补强
    当自动细节补偿的勾选取消后,随WDR gain而增减的锐度补强控制会改参考Manual Detail Enhance。
    128为一倍gain、小于128影像会变模糊、大于128影像会变锐利。
    GlobalDarkToneEnhance 全局的暗处增亮曲线
    共16条默认的曲线可供选择,详情可再参考本章节前半段的说明。
    不建议by iso切换不同的曲线,因会导致闪烁问题。
    如需要by iso设定不同的拉亮程度,可用WDRStrByY搭配Strength来达到效果。
    若开启WDRCurve,则GlobalDarkToneEnhance会失效。
    WDRStrByY WDR强度控制by Y
    可依照画面中不同的亮度位置来控制WDR作用的强度,表格由左至右分别对应由暗至亮的区块,建议在预设的基础上视需要微调即可
    Strength Local Tone Mapping的强度
    可在调整完GlobalDarkToneEnhance后用来提升画面的对比与层次感
    DarkLimit 暗区拉亮强度限制
    当调整完WDR其他参数后,如果有暗区拉亮导致的不良反应出现如色彩异常、noise过大等可尝试调整DarkLimit设定,透过限制暗区拉亮的程度来减轻不良反应的问题
    BrightLimit 亮区拉暗强度限制
    同上方DarkLimit的用法,惟改为限制亮区
    GammaSyncEn WDR与Gamma连动的开关。
    当WDR与Gamma连动设为enable可达到最佳效果,但如果Gamma有切换时,此连动会导致画面闪烁。
    举例:当Gamma有by iso切换时,此时建议将GammaSyncEn关闭(设disable)。
    WDRCurve 全局的暗处增亮曲线
    功能同GlobalDarkToneEnhance,提供手动控制整条曲线。

    2. 常见问题

    2.1. Flicker

    HDR模式下由于短曝光shutter往往受限无法达到de-flicker的最短物理限制,故短曝光区在阴极射线管光源下常无可避免会出现Flicker问题,此时建议只能调整fps到与电源频率成倍数的fps张数来让banding问题定住而不滚动(ex: 60hz/30fps、50hz/25fps),目前尚无法根除这个问题。如下图所示:

    → 当flicker与fps未对齐时,会看到banding滚动现象。

    → 当flicker与fps有对齐时,会看到banding定住现象,但banding现象无法根除。

    当HDR于短曝影像上出现banding现象时,建议调整方式:

    可使用AE StrategyEx – BrightTone模式,主要调整是控制过曝区域降低到某一个亮度值内,HDR th1、th2尽量设高(合成贴长曝为主),MotionTh、MotionAdjLut静态至动态区则偏向长曝为主;当画面中的亮度非常亮时,才会去贴短曝影像,则banding现象无法避免,如下图:

    HDR静态区贴短曝影像有banding & HDR静态区贴长曝影像无banding现象

    2.2. 长短曝融合区破碎状的闪动

    此问题多由长、短曝光张亮度不匹配所导致,建议可先check AE中的HDR Ratio与HDR API中的SensorExpRatio两边设定是否一致,或者关闭Dynamic Ratio的动态补偿机制以及调整MotionTh设为256(最大值)不考虑Motion的变动,最后让长、短曝光合成完全只参考YwtTh1及YwtTh2的设定,并观察长、短曝光交界处是否存在明显的边界,从而厘清是否确实有两张亮度不匹配的问题。

    1. 验证Sensor – Gain/Shutter是否线性匹配以及检查Long & Short – Gain/Shutter是否符合HDR Ratio比例。如何判断Sensor是否线性匹配的验证方式,使用单一场景(非复杂场景)且光源环境为固定,将AE切至manual mode,先调整shutter由小至大观察长、短曝影像亮度是否呈现线性变化(最大值需确保画面亮度尚未过曝);相同的步骤再调整Sensor Gain由小至大观察长、短曝影像亮度是否呈现线性变化(最大值需确保画面亮度尚未过曝),最终得到长、短曝影像亮度都呈现线性变化且比例符合HDR Ratio数值时,则可以判断sensor的亮度输出为正确。

    2. 确认linear mode & HDR mode时,设定相同的gain & shutter得到的亮度是否接近符合

    3. 上述两步骤都确认过,实际得到的gain/shutter依然有不线性时,则可以透过HDR的DynamicRatio来进行补偿,如下图(左图:灯源周围亮度不线性;右图:透过HDR参数进行补偿):

    DynamicRatio = Disabled & DynamicRatio = Enabled

    2.3. 中高亮度局部色彩异常且细节丢失

    解决方式:尝试调低HDR API中YwtTh1的值。

    2.4. 室内/室外/背光人脸过暗

    可尝试以下建议,依序调整:

    1. 将PreEnhance调至11~15,值越大暗处越亮,但整体越濛。

      举例:PreEnhance参数由左至右、由上至下依序为2、11、12、13。

    2. 调整WDRcruve,将暗处拉亮。

    3. 拉高AE target,但可能会牺牲室外过曝区细节。

    4. BoxNum不要设太多,虽然设大会让整体对比感较好,但相对暗的人脸会更暗。

    5. WDRStrByY暗处不要调太小,如果有需要限制暗区拉亮程度,可以调整DarkLimit。

    2.5. 如何由HDR 16x设定调整至HDR 32x接近的亮度

    1. 当只单独改变HDR Ratio和Long/Short Shutter时,会得到亮度不一致效果,如下图:

      HDR Ratio = 16x & HDR Ratio = 32x (Before)

    2. 应同步调整WDR – GlobalDarkToneEnhance or WDR Curve参数,尽可能地去调整HDR Ratio = 32x时符合HDR Ratio = 16x时的场景亮度 [黄色曲线:WDR Curve = 16x;绿色曲线:WDR Curve = 32x]。

      举例:黄色曲线由index 31 = 2304,绿色曲线则index 16 = 2304的方式来调整,而后面的index设定值则沿着黄色曲线进行smooth微调。

    3. 调整完毕WDR Curve 16x = 32x参数后,可得到的效果,如下图

      HDR Ratio = 16x & HDR Ratio = 32x (After)

    2.6. HDR当出现鬼影时,选用长曝光、短曝光影象补偿的差异

    当选择长曝光为主时,则运动物体区域呈现移动较模糊、较少的鬼影现象(上图)。

    当选择短曝光为主时,则运动物体区域呈现移动较清楚、较多的鬼影现象(下图)。

    HDR运动区域选长曝光为主 & HDR运动区域选短曝光为主