目录一、利用ISO分级进行全链路ISP参数联动调整二、利用Lv值识别场景亮度在利用不同主控调试ISP图像质量的时候会发现主控端会提供LvBv值和利用ISO进行节点划分用以进行图像效果参数BLC、sharp、3dnr等模块参数标定的两套系统。这两套系统和曝光参数都有关联。计算Lv的系统中假设Lv的计算如下其中T表示以秒(S)为单位的曝光时间ISO表示总的增益倍数C为某一常数。以ISO为节点进行图像效果参数标定的系统中ISO一般表示相应的增益倍数。诸如海思的去马赛克ISO节点表示如下诸如Novatek去马赛克ISO节点参数设置Novatek白平衡Lv值的设置海思白平衡Bv值的设置那么我们就有必要探究下为什么ISP图像效果调试中设计这两套系统呢或者说这两套系统有什么不一样的侧重点呢我们可以先总结下结论稍后再详细分析。利用ISO(增益阶)设计的节点主要是为了适配各个增益下的画质底噪。由于曝光时间主要影响图像的运动拖影、频闪、画面的进光量不直接决定原生高斯噪声、彩噪、噪声的颗粒表现。由于增益越大放大电路对噪声也不同程度的放大直接影响噪声的具体表现。因此利用ISO节点对应的调试好的ISP参数可以内部根据增益大小进行线性插值生成对应不同ISO下的图像画质参数避免图像画质存在可能的突变使得画质表现更加平滑稳定。否则可能在收敛过程中某些场景存在噪声、色噪跳变的表现污染画质。利用Lv主要表征纯环境的客观亮度。一般用来判断场景亮度用来测光。一、利用ISO分级进行全链路ISP参数联动调整我们知道图像的噪声主要受到增益的影响包括模拟增益、数字增益以及ispdgain。增益越大其对噪声的放大程度越大。因此我们标定ISO对应的ISP参数时是以增益为档位进行标定调试。标定用的「ISO / 增益节点」只代表噪点放大倍数图像底噪等级管3DNR、2DNR、锐化、彩噪抑制。凡是需要随增益变化调整的模块都需要按照ISO调整。不管画面亮不亮、环境明暗、快门多长特点离散档位100/200/400…按 2 倍 EV 跳如下海思的去马赛克ISO节点表示如下ISO100 → 基准最低增益原生最干净ISO200 → ×2 增益ISO400 → ×4 增益ISO800 → ×8 增益……后面超大 ISO几十万、几百万是超高数字增益档位对应极暗光全拉高增益场景只用来切极限强降噪、压彩噪、锁色彩。如果我们从十进制数值看到的是前密后疏的数值分布情况。比如100→200(差 100)、1600→3200(差 1600)、几十跳几百万。这是十进制数字的视觉假象在感光/ EV / 数域里间隔完均等虽然是十制制数字看着大不均等分布当是在对数域长永远匀。关于对数域这部分的数学科普推荐参考《数学的雨伞下--理解世界的乐趣》第一章。那曝光时间快门去哪了快门不进 ISP 画质插值节点只做两件事AE 闭环控亮度、防 50/60Hz 频闪控拖影低帧限最大快门比如你 10fps 限 0.1s同一 ISO同一增益节点下快门可以随便变长 / 变短ISP 降噪 / 色彩参数不插值、不跳变—— 因为噪点底子没变只是进光多少变了为什么以2的n次方进行isp参数锚点的构建呢每一个档位对应人眼物理SNR的一阶恶化阶梯。Sensor噪声随增益指数级上涨。2的n次方刚好匹配SNR衰减曲线。分档位做NR/Sharp/3dnr/BLC标定逻辑最顺、调试工作最少原生的sensor模拟增益大多数是线性分段数字增益细调进行平滑增益实际调整也是相对平滑的并不是纯2倍的跳变。工具端或者ISP驱动库内部根据这些ISO基准锚点进行全链路ISP模块参数的线性插值减少图像调试工作量、减少ISP参数占用内存的大小量产维护成本低通过线性插值使得画质过渡更加自然平滑。噪声涨多少参数就平滑多少无断层无跳变另外对齐通用标称规范。我们使用手机的专业模式拍照时常常有看到有ISO的设置适配上层协议、客户端UI、测试标准相反如果使用非2的n次方档位。比如线性档位进行ISP参数的标定那么在高ISO区噪声暴增如果档位太过稀疏的话NR/3dnr/Sharp等参数一档抗不住要么噪声太多要么太过模糊。那么需要分过多档位进行ISP参数调试增加调试工作量。二、利用Lv值识别场景亮度Lv值是剥离当前快门 增益后的「纯环境客观亮度」跟当前增益大小无关、跟当前快门无关只反映现在室外 / 室内 / 暗光到底有多亮特点连续浮点 / 定点无限平滑作用判场景、判亮度、做平滑联动。比如我们需要根据场景亮度对各个色温的统计数据做权重设置通过权重设置的方式避免诸如室外对着土黄色识别为低色温场景的情况也可以通过权重的设置调整白平衡色调的偏向。比如Sigmastart下的这种设置通过控制不同色温不同亮度下的权重进行色调的偏向和干扰色的排除。Lv值可以用来区分室内、室外、暗光、极暗光等不同亮度场景。可以用来ircut的日夜切换、HDR开关、帧率切换、黑电平调整等等LV阈值触发策略。这种LV阈值触发的策略如果单独使用ISO值是无法做到的。假设曝光优先的情况下在曝光没打满的前提下AE都是使用的1倍ISO如果单独使用ISO值做亮度相关的触发策略的发曝光时间所覆盖的对应的场景则无法区分。此外也有利用EVagain*dgain*ispdgain*exp的方式来对场景亮度进行分级。但是由于isp驱动库内部一般都是定点计算即上述的所有增益需要转换到整数进行计算。比如1倍增益为1024,2倍增益为2048,后续以此类推。使用定点后的增益计算EV值的时候有可能发生溢出的情况。而且如果需要对分级亮度的某些场景对应的权重参数进行插值的时候有可能出现插值失效的情况。具体可以参考博文线性插值中当x,y坐标的数值大小数量级相差太大导致的问题那么是否可以利用LV值作为调试画质参数的锚点呢我们知道同样亮度的场景下假设我们使用10ms、2倍增益达到合适亮度也可以使用20ms,1倍增益达到一样的合适亮度。这两种情况下计算的Lv值基本一样。但是10ms、2倍增益的噪声表现和20ms,1倍增益的噪声表现天差地别。特别是低照度下的这种情况噪声表现差异将更大。如果使用LV进行画质参数的锚点此时这两种情况下计算的Lv值基本一致而噪声表现差异较大。不可能使用一套参数兼顾这两种噪声不一样的情况。因此绝对不能使用Lv值对画质参数进行锚点插值操作。另外我们计算Lv值的时候会使用对数函数计算的Lv值也是小数。如果驱动库底层需要在利用Lv值触发相关策略时。由于驱动底层绝大部分都只能使用整数而非小数直接利用小数是进行触发是行不通的。此时我们需要将对数计算的值进行定点处理。比如对对数函数计算的值放大256或者1024倍底层驱动利用放大后的值进行相应处理或者利用定点对数函数实现相关计算。那么如何构建一个LV计算的公式呢是否认为直接使用上述文章开头的公式就可行呢或者说是根据文章开头的公式进行适当变形得到其变体计算LV值得到合适的计还是说另有其他更合适的公式计算待思考验证