高通AEC10
0.参考资料[1]AEC10 SA计算整理 — 基础SA[2]AEC10 SA计算整理 — ADRCCapSA AuxRoleFrameSA AFBrktFrameSA[3]AEC10 SA计算整理 — QLL相关[4]AEC10 SA计算整理 — ExtremeColorSA SaliencySA[5]AEC10 SA计算整理 — Depth Tracker[6]AEC10 SA计算整理 — Agg相关[7]AEC10 SA计算整理 — SatPrev DarkPrev[8]AEC10 SA计算整理 — YHistSA BrightenImgSA[9]AEC10 SA计算整理 — Touch Face[10]AEC10 SA计算整理 — 3HDR相关[11]AEC10 SA计算整理 — flash部分1.各个变量作用1.1 LuxSALuxSALumaAvgLumaBE16x16 LuxSATarget[setparam/tr:luxlux] LuxSAAdjRatioLuxSATarget/LuxSALumaLuxSALuma: 计算16x16区域的平均亮度Luma值。LuxSATarget: 通过参数设置获取目标亮度值通常与当前光线条件相关。LuxSAAdjRatio: 计算调整比例即目标亮度与当前亮度的比值。1.2. FrameSAFrameSALumaFrameLumaBE16x16 FrameSATarget[setparam/tr:luxlux] FrameSAAdjRatioFrameSATarget/FrameSALumaFrameSALuma: 计算整帧的平均亮度Luma值。FrameSATarget: 与LuxSATarget相同或根据具体需求调整。FrameSAAdjRatio: 计算调整比例。1.3 EVFrameSAEVFrameSALumaNormalizedWeightedSum(FrameLumaBE16x16,FaceROILuma,TouchROILuma) EVFrameSATarget[setparam/tr:luxlux] EVFrameSAAdjRatioEVFrameSATarget/EVFrameSALumaEVFrameSALuma: 使用加权和计算包括面部区域和触摸区域在内的亮度值。EVFrameSATarget: 类 似FrameSATarget但可能考虑更多因素。EVFrameSAAdjRatio: 计算调整比例。1.4 SimpLuxSASimpleLuxSA_LumaAvgLumaBE16x16 SimpleLuxSA_Target[setparam/tr:luxlux] SimpleLuxSA_AdjRatioSimpleLuxSA_Target/SimpleLuxSA_LumaSimpleLuxSA_Luma: 与LuxSALuma相同。SimpleLuxSA_Target: 类似LuxSATarget。SimpleLuxSA_AdjRatio: 计算调整比例。1.5 IlluminanceSAIlluminanceSATargetFrameSATarget IlluminanceSALumaTriggerCtrlShortExp*[setparam/tr:luxTriggerCtrlInputIlluminance]/1000000 IlluminanceSAAdjRatioFSATgtIlluminanceSATarget/(IlluminanceSALuma*FrameSAAdjRatio) IlluminanceSAAdjRatio.Start0 IlluminanceSAAdjRatio.EndIlluminanceSAAdjRatioFSATgt*[setparam/tr:luxIlluminanceSAAdjRatioFSATgt]*FrameSAAdjRatioIlluminanceSATarget: 与FrameSATarget相同。IlluminanceSALuma: 结合短曝光时间和输入照度计算当前照度下的亮度。IlluminanceSAAdjRatioFSATgt: 计算最终调整比例考虑FrameSA的调整比例。IlluminanceSAAdjRatio.Start/End: 初始化及结束调整比例这里似乎有误通常不需要动态调整这两个值除非有特殊逻辑。1.6 QLLShortFrameSAQLLShortFrameSatAdjRatio[setparam/tr:luxlux]/QLLShortFrameSatPctlLuma QLLShortFrameSelAdjRatio[setparam/tr:luxlux]/QLLShortFrameHighPctlLuma QLLShortFrameSelAdjRatioSmallest(QLLShortFrameSatAdjRatio,QLLShortFrameSelAdjRatio,1) QLLShortFrameExpQLLShortFrameSelAdjRatio*TriggerCtrlShortExp QLLShortFrameSelAdjRatioQLLShortFrameSelAdjRatio1.7 QLLLongFrameShortSAQLLLongFrameDarkAdjRatio[setparam/tr:luxlux]/[set param/tr:luxQLLLongFrameDarkPctlLuma] QLLLongFrameSelAdjRatio[setparam/tr:luxlux]/[set param/tr:luxQLLLongFrameLowPctlLuma] QLLLongFrameSatPrevAdjRatio[setparam/tr:luxlux]/QLLLongFrameSatPctlLuma QLLLongFrameSelAdjRatioLargest(QLLLongFrameDarkAdjRatio,QLLLongFrameSelAdjRatio,1) QLLLongFrameSatPrevAdjRatioMin(QLLLongFrameSelAdjRatio,QLLLongFrameSatPrevAdjRatio) QLLLongFrameShortExpMax(QLLLongFrameSatPrevAdjRatioTriggerCtrlShortExp,TriggerCtrlLongExp) TriggerCtrlQLLDynamicRangeQLLLongFrameShortExpQLLShortFrameExp QLLMaxUnderExposureQLLLongFrameShortExp/TriggerCtrlSafeExp TriggerCtrlQLLUnderExposureSmallest(TriggerCtrlQLLUnderExposure,QLLMaxUnderExposure,TriggerCtrlQLLDynamicRange,256) QLLLongShortSensorExpRatioTriggerCtrlQLLDynamicRange/TriggerCtrlQLLUnderExposure QLLLongFrameShortExposureQLLShortFrameExp*[setparam/tr:luxQLLLongShortSensorExpRange] QLLLongFrameShortAdjRatioQLLLongFrameSHortExposure/TriggerCtrlShortExp1.8 QLLLongFrameSafeSAQLLADRC(QLLLongFrameShortExposure/QLLShortFrameExp)QLLADRCAdditional QLLADRCAdditionalMin(1,TriggerCtrlQLLUnderExposure) QLLLongFrameSafeExposureQLLLongFrameShortExposureQLLADRC QLLLongFrameSafeAdjRatioQLLLongFrameSafeExposure*TriggerCtrlShortExp1.9 QLLLongFrameLongSAQLLDarkBoostTriggerCtrlQLLUnderExposureQLLADRCAdditional QLLLongFrameLongExposureQLLLongFrameSafeExposureQLLDarkBoost QLLLongFrameLongAdjRatioQLLLongFrameLongExposure*TriggerCtrlShortExp1.10 ADRCCapSATriggerCtrlADRCCapMin(TriggerCtrlADRCCap,ADRCFlickerCap,ADRCExposureCountCap) TriggerCtrlADRCCap(FaceSAConfidence0.000100)?[setparam/tr:TriggerCtrlGyrolux]:[set param/tr:TriggerCtrlGyrolux] ADRCFlickerCap(TriggerCtrlIsFlickerDetected0.001)?TriggerCtrlADRCCap:[setparam/tr:luxlux] ADRCExposureCountCap[setparam/tr:luxTriggerCtrlExposureCount]在计算 TriggerCtrlADRCCap 时需要综合考虑多个限制条件包括闪烁检测、曝光次数限制等。优化后的公式如下触发控制自动动态范围压缩ADRC的能力值计算:TriggerCtrlADRCCap Min(TriggerCtrlADRCCap, # 初始或预设值ADRCFlickerCap, # 基于闪烁检测的限制ADRCExposureCountCap # 基于曝光次数的限制)如果人脸检测置信度极低则可能使用不同的计算方式但原公式似乎有误未明确展示不同计算假设这里是一个占位符实际应用中可能需要替换为具体的逻辑TriggerCtrlADRCCap (FaceSAConfidence 0.0001) ? 特定计算方式 : TriggerCtrlADRCCap_base闪烁检测限制ADRCFlickerCap (TriggerCtrlIsFlickerDetected 0.001) ? TriggerCtrlADRCCap : 更高值 # 假设’更高值’为2*lux但具体值需根据上下文确定曝光次数限制ADRCExposureCountCap lux TriggerCtrlExposureCount1.11 AuxRoleFrameSAAuxRoleFrameSALumaFrameLumaBE16x16 AuxRoleFrameSATarget[setparam/tr:luxlux] AuxRoleFrameSAAdjRatioAuxRoleFrameSATarget/AuxRoleFrameSALuma辅助角色帧的亮度调整AuxRoleFrameSALuma FrameLumaBE16x16 # 当前帧的亮度16x16块AuxRoleFrameSATarget lux lux # 目标亮度值这里假设是双倍当前亮度环境值需根据实际情况调整AuxRoleFrameSAAdjRatio AuxRoleFrameSATarget / AuxRoleFrameSALuma # 亮度调整比例1.12 AFBrktFrameSAAFBrktCDF10Flag(AFBrktCDF10Pctl0.2)?1:0 AFBrktCDF110Flag(AFBrktCDF110Pctl0.8)?0:1 AFBrktCDF145Flag(AFBrktCDF145Pctl0.9)?1:0 AFBrktMTFFlagAFBrktCDF10Flag*AFBrktCDF110Flag*AFBrktCDF145Flag AFBrktFlatFlagAFBrktCDF10Flag*AFBrktCDF110Flag*AFBrktCDF145Flag AFBrktFileScanFlagAFBrktCDF10Flag*AFBrktCDF110Flag*AFBrktCDF145Flag 相同的方法计算剩下三组而且值也相同 AFBrktCDF10Flag(AFBrktCDF10Pctl1)?1:0 AFBrktCDF110Flag(AFBrktCDF110Pctl0)?0:1 AFBrktCDF145Flag(AFBrktCDF145Pctl1)?1:0 AFBrktMultiDepthFlagAFBrktCDF10Flag*AFBrktCDF110Flag*AFBrktCDF145Flag自动对焦AF的曝光评估逻辑这里存在重复和可能的错误我们进行修正和统一自动对焦的曝光评估标志计算注意原公式中存在逻辑错误如阈值设置不合理这里进行了修正AFBrktCDF10Flag (AFBrktCDF10Pctl 0.2) ? 1 : 0AFBrktCDF110Flag (AFBrktCDF110Pctl 0.8) ? 0 : 1 # 注意这里通常检查是否小于阈值AFBrktCDF145Flag (AFBrktCDF145Pctl 0.9) ? 1 : 0使用上述标志进行进一步计算AFBrktMTFFlag AFBrktCDF10Flag * AFBrktCDF110Flag * AFBrktCDF145FlagAFBrktFlatFlag AFBrktMTFFlag # 假设FlatFlag与MTFFlag相同除非有特定逻辑区分AFBrktFileScanFlag AFBrktMTFFlag # 同样假设FileScanFlag与MTFFlag相同注意下面的重复计算部分已被移除因为值相同且逻辑重复如果确实需要基于不同阈值的类似计算请确保阈值和逻辑的正确性AFBrktCDF10Flag, AFBrktCDF110Flag, AFBrktCDF145Flag 重新计算部分已移除MultiDepthFlag可能基于相同的逻辑但通常用于不同的场景或处理AFBrktMultiDepthFlag AFBrktCDF10Flag * AFBrktCDF110Flag * AFBrktCDF145Flag1.13 SaliencySASaliencySALumaNormalizedWeightedSum(SaliencyLuma,FrameLumaBE16x16) SaliencySATarget[setparam/tr:lux] SaliencySALumaWeight[setparam/tr:luxTriggerCtrlSaliencyValue] SaliencySAFrameWeight1-SaliencySALumaWeight SaliencySAAdjRatioSaliencySaliencySATarget/SaliencySALuma SaliencySAAdjRatioHigh[setparam/tr:lux]/SaliencyHighPCTLLuma SaliencySAAdjRatioLow[setparam/tr:lux]/SaliencyLowPCTLLuma SaliencySAAdjRatioMinMin(SaliencySAAdjRatioSaliency,1.0,[setparam/tr:luxSaliencySAAdjRatioHigh]) SaliencySAAdjRatioMinMax(SaliencySAAdjRatioSaliency*0.4,SaliencySAAdjRatioMin) SaliencySAAdjRatioMaxMax(SaliencySAAdjRatioSaliency,[setparam/tr:luxSaliencySAAdjRatioLow]) SaliencySAAdjRatioMaxMin(SaliencySAAdjRatioSaliency*1.5,SaliencySAAdjRatioMax) SaliencySAAdjRatioSel(SaliencySAAdjRatioMin*[setparam/tr:luxSaliencySAAdjRatioSaliency])/(SaliencySAAdjRatioMax*[setparam/tr:luxSaliencySAAdjRatioSaliency] SaliencySAAdjRatioFSATgt(SaliencySAAdjRatioSel*FrameSALuma)/FrameSATarget SaliencySAAdjRatio[setparam/tr:luxSaliencySAAdjRatioFSATgt]*FrameSATarget/FrameSALumaSaliencySA 算法主要基于图像的显著性Saliency和亮度Luma来调整曝光参数以达到最佳的视觉效果。以下是该算法的详细优化步骤计算显著性亮度权重SaliencySALuma NormalizedWeightedSum(SaliencyLuma, FrameLumaBE16x16)SaliencySALumaWeight setparam[‘tr:lux’] TriggerCtrlSaliencyValueSaliencySAFrameWeight 1 - SaliencySALumaWeight这里SaliencyLuma 表示图像的显著性亮度图FrameLumaBE16x16 是图像块的亮度信息。通过调整显著性亮度的权重可以更好地控制曝光调整的方向。计算曝光调整比例SaliencySATarget setparam[‘tr:lux’]SaliencySAAdjRatioSaliency SaliencySATarget / SaliencySALumaSaliencySAAdjRatioHigh setparam[‘tr:lux’] / SaliencyHighPCTLLumaSaliencySAAdjRatioLow setparam[‘tr:lux’] / SaliencyLowPCTLLumaSaliencySAAdjRatioMin min(SaliencySAAdjRatioSaliency, 1.0, setparam[‘tr:lux’] SaliencySAAdjRatioHigh)SaliencySAAdjRatioMin max(SaliencySAAdjRatioSaliency * 0.4, SaliencySAAdjRatioMin)SaliencySAAdjRatioMax max(SaliencySAAdjRatioSaliency, setparam[‘tr:lux’] SaliencySAAdjRatioLow)SaliencySAAdjRatioMax min(SaliencySAAdjRatioSaliency * 1.5, SaliencySAAdjRatioMax)SaliencySAAdjRatioSel (SaliencySAAdjRatioMin * (setparam[‘tr:lux’] SaliencySAAdjRatioSaliency)) / (SaliencySAAdjRatioMax * (setparam[‘tr:lux’] SaliencySAAdjRatioSaliency))SaliencySAAdjRatioFSATgt (SaliencySAAdjRatioSel * FrameSALuma) / FrameSATargetSaliencySAAdjRatio (setparam[‘tr:lux’] SaliencySAAdjRatioFSATgt) * FrameSATarget / FrameSALuma通过计算一系列调整比例确保曝光调整既不过度也不过低同时考虑了图像的高亮和低亮区域。1.14 ExtremeColorSAExtremeColorSALumaFrameSALuma ExtremeColorSATargetExtremeColorFinalTarget ExtremeColorGreemZoneSumExtremeGreenColorZone1RatioExtremeGreenColorZone2RatioExtremeGreenColorZone3Ratio ExtremeColorLargestRatioLargest(ExtremeRedColorRatio,ExtremeColorGreemZoneSum,ExtremeBlueColorRatio,0.0) ExtremeColorRedTargetAdj[setparam/tr:luxExtremeRedColorRatio] ExtremeColorGreenTargetAdj[setparam/tr:luxExtremeColorGreenZoneSum] ExtremeColorBlueTargetAdj[setparam/tr:luxExtremeColorBlueZoneSum] ExtremeColorSmallestTargetAdjSmallest(ExtremeColorRedTargetAdj,ExtremeColorGreenTargetAdj,ExtremeColorBlueTargetAdj,1.0) ExtremeColorFinalTargetFrameSATarget*ExtremeColorSmallestTargetAdj ExtremeColorSAAdjRatioExtremeColorSATarget/ExtremeColorSALumaExtremeColorSA 算法专注于通过调整颜色通道红、绿、蓝的曝光目标来改善图像的色彩表现。首先计算了绿色区域的权重总和和最大的颜色区域比例。其次基于各颜色区域的相对重要性调整每个颜色通道的目标曝光值。最终根据调整后的颜色目标和当前颜色亮度计算出颜色曝光调整。1.15 DepthSADepthSALumaNormalizedWeightedSum(DepthLuma,FrameLumaBE16x16) DepthSATarget[setparam/tr:luxlux] DepthSADistanceStorage(TriggerCtrlDistance0.0)?TriggerCtrlDistance:DepthSADistanceStorage DepthSALumaWeight[setparam/tr:luxDepthSADistanceStorage] DepthSAFrameWeight1.0-DepthSALumaWeight DepthSADepthLumaScaleDepthSALuma1000000/TriggerCtrlSafeExp DepthSADepthLumaStorage(TriggerCtrlDistance0)?DeptjSADepthLumaScale:DepthSADepthLumaStorage DepthSADepthLumaSelectionDepthSADepthLumaStorageTriggerCtrlSafeExp/1000000 DepthSAAdjRatioDepthDepthSATarget/DepthSADepthLumaSelection DepthSAAdjRatioHigh[setparam/tr:luxlux]/DepthHighPCTLLuma DepthSAAdjRatioLow[setparam/tr:luxlux]/DepthLowPCTLLuma DepthSAAdjRatioMinMax(DepthSAAdjRatioDepth0.5,Min(DepthSAAdjRatioDepth,[settparam/tr:luxDepthSAAdjRatioHigh])) DepthSAAdjRatioMinMin(DepthSAAdjRatioDepth1.4,Max(DepthSAAdjRatioDepth,[settparam/tr:luxDepthSAAdjRatioLow])) DepthSAAdjRatioSelDepthSAAdjRatioMin*[setparam/tr:luxDepthSAAdjRatioDepth]DepthSAAdjRatioMax*[setparam/tr:luxDepthSAAdjRatioDepth] DepthSAAdjRatioFSATgtDepthSAAdjRatioSel*FrameSALuma/FrameSATarget DepthSAAdjRatio[setparam/tr:luxDepthSAAdjRatioFSATgt]*FrameSATarget/FrameSALuma1.16 TrackerSATrackerSALumaTrackerSALumaSelection TrackerSATarget[setparam/tr:luxlux] TrackerSALumaScaleTrickerROILuma1000000/TriggerCtrlSafeExp TrackerSALumaStorage(TrackerROI0)?0:TrackerSALumaStorage TrackerSALumaStorage(TrackerROI0)?TrackerSALumaStorage:TrackerSALumaStorage TrackerSALumaSelectionTrackerSALumaStorageTriggerCtrlSafeExp/1000000 TrackerSAWeightSelection(TrackerROI0)?0:TrackerSAWeightSelection AdjRatioTrackerTrackerSATarget/TrackerSALuma AdjRatioHighTracker[setparam/tr:luxlux]/TrackerHighPCTLLuma AdjRatioLowTracker[setparam/tr:luxlux]/TrackerLowPCTLLuma CappedAdjRatioMinTrackerMin(AdjRatioTracker,[setparam/tr:luxAdjRatioHighTracker]) CappedAdjRatioMinTrackerMax(AdjRatioTracker*[setparam/tr:luxlux],CappedAdjRatioMinTracker) CappedAdjRatioMaxTrackerMax(AdjRatioTracker,[setparam/tr:luxAdjRatioLowTracker]) CappedAdjRatioMaxTrackerMin(AdjRatioTracker*[setparam/tr:luxlux],CappedAdjRatioMaxTracker) AdjRatioSelectionTrackerCappedAdjRatioMinTracker*[setparam/tr:luxAdjRatioTracker]CappedAdjRatioMaxTracker*[setparam/tr:luxAdjRatioTracker] AdjRatioFSATgtTrackerAdjRatioSelectionTracker*FrameSALum/FrameSATarget AdjRatioTracker[setparam/tr:luxAdjRatioFSATgtTracker]*FrameSATarget/FrameSALuma1.17 SafeAggSASafeAggSATargetMinWeightedAbsDiff(FrameSAAdjRatio,SatPrevSAAdjRatio,DarkPrevSAAdjRatio,BrightenImgSAAdjRatio,FaceSAAdjRatio,TouchSAAdjRatio,DepthSAAdjRatio,AdjRatioTacker,ExtremeColorSAAdjRatio,SaliencySAAdjRatio,IlluminanceSAAdjRatio) SafeAggSA3HDRSafeExpSafeAggSATarget*TriggerCtrlShortExp EV0SafeAdjFactorSafeAggSATarget/FrameSAAdjRatio SafeAggSAAdjRatioSafeAggSATarget在SafeAggSA模块中我们旨在通过最小化加权绝对差异来优化调整比例以达到最佳的图像质量。具体计算如下SafeAggSATarget MinWeightedAbsDiff(FrameSAAdjRatio,SatPrevSAAdjRatio,DarkPrevSAAdjRatio,BrightenImgSAAdjRatio,FaceSAAdjRatio,TouchSAAdjRatio,DepthSAAdjRatio,AdjRatioTacker,ExtremeColorSAAdjRatio,SaliencySAAdjRatio,IlluminanceSAAdjRatio)计算HDR安全曝光下的调整因子SafeAggSA3HDRSafeExp SafeAggSATarget * TriggerCtrlShortExp计算EV0下的安全调整因子EV0SafeAdjFactor SafeAggSATarget / FrameSAAdjRatio最终确定SafeAggSA的调整比例SafeAggSAAdjRatio SafeAggSATarget1.18 ShortAggSAShortAggSATargetMinWeightedAbsDiff(SafeAggSAAdjRatio,ShortSatPrevSAAdjRatio) ShortAggSAAdjRatioShortSafeAggSAAdjRatio/ShortAggSATarget ShortAggSAADRCGainMin([setparam/tr:luxShortAggSAAdjRatioShort],TriggerCtrlADRCCap) TriggerCtrlEVNegativeOverride[setparam/tr:luxShortAggSAAdjRatioShort] EV0ShortDRCGainShortAggSAADRCGain ShortAggSAAdjRatioSafeAggSAAdjRatio/ShortAggSAADRCGainShortAggSA专注于短期内的调整优化具体计算流程如下计算短期目标调整比例ShortAggSATarget MinWeightedAbsDiff(SafeAggSAAdjRatio, ShortSatPrevSAAdjRatio)计算短期调整比例相对于目标ShortAggSAAdjRatioShort SafeAggSAAdjRatio / ShortAggSATarget计算ADRC增益并限制在最大值内ShortAggSAADRCGain Min([setparam/tr:lux ShortAggSAAdjRatioShort], TriggerCtrlADRCCap)短期曝光负向调整覆盖TriggerCtrlEVNegativeOverride [setparam/tr:lux ShortAggSAAdjRatioShort]EV0下的DRCGainEV0ShortDRCGain ShortAggSAADRCGain计算最终的短期调整比例ShortAggSAAdjRatio SafeAggSAAdjRatio / ShortAggSAADRCGain1.19 LongAggSALongAggSATargetMinWeightedAbsDiff(SafeAggSAAdjRatio,LongDarkPrevSAAdjRatio) LongAggSADRCGainRemainder8/ShortAggSAADRCGain LongAggSAAdjRatioLongLongAggSATarget/SafeAggAdjRatio LongAggSADarkBoostGain[setparam/tr:luxLongAggSAAdjRatioLong]/[setparam/tr:luxLongAggSADRCGainRemainder] EV0LongDarkboostGainLongAggSADarkBoostGain CompenDarkBoostGainMin([setparam/tr:luxLongAggSAAdjRatioLong],[setparam/tr:luxLongAggSADRCGainRemainder] TriggerCtrlEVPositiveOverride[setparam/tr:luxLongAggSAAdjRatioLong] LongAggSAAdjRatioShortAggSAAdjRatio*LongAggSADarkBoostGainLongAggSA处理长期曝光调整以优化暗部细节计算长期目标调整比例LongAggSATarget MinWeightedAbsDiff(SafeAggSAAdjRatio, LongDarkPrevSAAdjRatio)计算长期ADRC增益的剩余部分LongAggSADRCGainRemainder 8 / ShortAggSAADRCGain计算长期调整比例相对于SafeAggLongAggSAAdjRatioLong LongAggSATarget / SafeAggSAAdjRatio # 注意这里假设SafeAggSAAdjRatio为基准计算暗部增强增益LongAggSADarkBoostGain ([setparam/tr:lux LongAggSAAdjRatioLong] / [setparam/tr:lux LongAggSADRCGainRemainder])EV0下的暗部增强增益EV0LongDarkboostGain LongAggSADarkBoostGain补偿暗部增强增益此处有遗漏的闭合括号CompenDarkBoostGain Min([setparam/tr:lux LongAggSAAdjRatioLong], [setparam/tr:lux LongAggSADRCGainRemainder])长期曝光正向调整覆盖TriggerCtrlEVPositiveOverride [setparam/tr:lux LongAggSAAdjRatioLong]计算最终的长期调整比例LongAggSAAdjRatio ShortAggSAAdjRatio * LongAggSADarkBoostGain1.20 LLSSafeAggSASnapshotSafeAdj TriggerCtrlSafeTgt / TriggerCtrlSafeExp1.21 LLSShortAggSASnapshotADRCGain Min(TriggerCtrlSafeTgt / TriggerCtrlShortTgt, 16) SnapshotShortAdj TriggerCtrlSafeTgt / (SnapshotADRCGain * TriggerCtrlShortExp)1.22 LLSLongAggSASnapshotDarkBoostGain Min(1.0, TriggerCtrlLongTgt / TriggerCtrlSafeTgt) SnapshotLongAdj TriggerCtrlSafeTgt * SnapshotDarkBoostGain / TriggerCtrlShortExp1.23 EVSafeAggSAEVSafeAggSATarget[setparam/tr:luxEV0SafeAdjFactor]*EVFrameSAAdjRatio EVSafeAggSAAdjRatioEVSafeAggSATarget1.24 EVShortAggSAEVShortAggSATargetRatioValue(EVSafeAggSAAdjRatio,[setparam/tr:luxEV0ShortDRCGain]) EVShortAggSAAdjRatioEVShortAggSATarget1.25 EVLongAggSAEVLongAggSATargetEVSafeAggSAAdjRatio*[setparam/tr:luxEV0LongDarkboostGain] EVLongAggSAAdjRatioEVLongAggSATarget1.26 HDRSnapshotSafeAggSASnapshotSafeAdjTriggerCtrlSafeTgt/TriggerCtrlSafeExp1.27 HDRSnapshotShortAggSASnapshotShortAdjTriggerCtrlShortTgt/TriggerCtrlShortExp1.28 HDRSnapshotLongAggSASnapshotLongAdjTriggerCtrlLongTgt/TriggerCtrlLongExp1.29 SatPrevSASatPreSALumaSatPrevHighPCTLLuma SatPrevSATarget[setparam/tr:luxlux] SatPrevSAAdjRatioFSAATgtSatPrevTarget*FrameSALuma/(SatPrevSALuma*FrameSATarget) SatPrevSAAdjRatio.Start0 SatPrevSAAdjRatio.End[setparam/tr:luxSatPrevSAAdjRatioFSATgt*FrameSATarget/FrameSALuma在SatPrevSA的计算中我们首先定义亮部预览的亮度Luma为SatPrevHighPCTLLuma。目标饱和度SATarget通过参数设置获取形式为[setparam/tr:luxlux]这里假设lux为变量占位符实际使用中需替换为具体值。接着我们计算调整比率Adjustment Ratio的帧内平均目标值FSATgt该值基于目标饱和度、当前帧与目标帧的亮度比。调整比率的起始值设为0结束值则根据FSATgt、当前帧与目标帧的饱和度与亮度计算得出具体公式为SatPrevSAAdjRatio.End [setparam/tr:lux (SatPrevTarget * FrameSATarget) / (SatPrevSALuma * FrameSALuma) * FrameSATarget / FrameSALuma]1.30 DarkPrevSADarkPrevSALuma [set param/tr:luxDarkPrevLowPCTLLuma] DarkPrevSATarget [set param/tr: luxlux] DarkPrevSAAdjRatioStartFSATgt(DarkPrevSATarget*FrameSALuma)/(DarkPrevSALuma*FrameSATarget) DarkPrevSAAdjRatioEndFSATgt(DarkPrevSATarget*FrameSALuma)/(DarkPrevSALuma*FrameSATarget) DarkPrevSAAdjRatio.Start[setparam/tr:luxDarkPrevSAAdjRatioStartFSATgt]*FrameSATarget/FrameSALuma DarkPrevSAAdjRatio.End[setparam/tr:luxDarkPrevSAAdjRatioEndFSATgt]*FrameSATarget/FrameSALuma对于暗部预览DarkPrevSA我们类 似地定义了暗部预览的亮度DarkPrevLowPCTLLuma和目标饱和度[setparam/tr:luxlux]。调整比率的起始和结束值计算采用了相同的逻辑但分别基于暗部预览的参数DarkPrevSAAdjRatioStartFSATgt (DarkPrevSATarget * FrameSALuma) / (DarkPrevSALuma * FrameSATarget)DarkPrevSAAdjRatio.Start [setparam/tr:lux DarkPrevSAAdjRatioStartFSATgt] * FrameSATarget / FrameSALumaDarkPrevSAAdjRatio.End 同上逻辑但通常暗部调整范围较小或固定可能无需变化故这里也使用相同公式或设定为固定值。1.31 LongDarkPrevSALongDarkPrevSALuma [set param/tr: luxLongDarkPrevLowPCTLLuma] LongDarkPrevSATarget [set param/tr: lux] LongDarkPrevSAAdjRatioFSATgt (LongDarkPrevSATarget * FrameSALuma) / (LongDarkPrevSALuma * FrameSATarget) LongDarkPrevSA3HDRLongExp LongDarkPrevSATarget * TriggerCtrlShortExp / LongDarkPrevSALuma LongDarkPrevSA3HDRRealDRCGain LongDarkPrevSA3HDRLongExp / ShortSatPrevSA3HDRShortExp LongDarkPrevSAAdjRatio.Start [set param/tr:luxLongDarkPrevSAAdjRatioFSATgt] * FrameSATarget / FrameSALuma LongDarkPrevSAAdjRatio.End 256长期暗部预览LongDarkPrevSA的计算考虑了更长时间的暗部信息。我们定义了长期暗部预览的亮度LongDarkPrevLowPCTLLuma和目标饱和度[setparam/tr:lux]。此外还计算了与HDR相关的曝光时间LongDarkPrevSA3HDRLongExp和动态范围控制增益LongDarkPrevSA3HDRRealDRCGain。调整比率的起始值基于FSATgt计算结束值固定为256或根据具体需求调整LongDarkPrevSAAdjRatioFSATgt (LongDarkPrevSATarget * FrameSALuma) / (LongDarkPrevSALuma * FrameSATarget)LongDarkPrevSAAdjRatio.Start [setparam/tr:lux LongDarkPrevSAAdjRatioFSATgt] * FrameSATarget / FrameSALumaLongDarkPrevSAAdjRatio.End 2561.32 ShortSatPrevSAShortSatPrevSALuma ShortSatPrevHighPCTLLuma ShortSatPrevSATarget [set param/tr:lux] ShortSatPrevSAAdjRatioFSATgt (ShortSatPrevSATarget*FrameSALuma)/(ShortSatPrevSALuma*FrameSATarget) ShoartSatPrevSA3HDRShortExp ShortSatPrevSATarget*TriggerCtrlShortExp/ShortSatPrevSALuma ShortSatPrevSAAdjRatio.Start 0.0 ShortSatPrevSAAdjRatio.End [set param/tr:luxShortSatPrevSAAdjRatioFSATgt]*FrameSATarget/FrameSALuma短期亮部预览ShortSatPrevSA的计算较为直接定义了短期高亮度区域的亮度ShortSatPrevHighPCTLLuma和目标饱和度[setparam/tr:lux]。调整比率的起始值设为0.0结束值根据FSATgt计算得出ShortSatPrevSAAdjRatioFSATgt (ShortSatPrevSATarget * FrameSALuma) / (ShortSatPrevSALuma * FrameSATarget)ShortSatPrevSAAdjRatio.Start 0.0ShortSatPrevSAAdjRatio.End [setparam/tr:lux ShortSatPrevSAAdjRatioFSATgt] * FrameSATarget / FrameSALuma1.33 YHistSAYHistClampValueYHistLowPctlLuma- [set param/tr:luxlux] YHistClampValueMax(YHistClampValue,0.0) YHistClampValueMin(YHistClampValue,[setparam/tr:luxlux]) HighPctlLumaTargetMax(YHistHighPctlLuma,[setparam/tr:luxlux]) HighPctlLumaRemoveOffsetYHistHighPctlLuma- YHistClampValue YHistScaleValueHighPctlLumaTarget/HighPctlLumaRemove YHistScaleValueMin(YHistScaleValue,1.25)在YHistSA部分我们主要对图像的亮度直方图进行动态调整以适应不同的光照条件。具体步骤如下计算亮度钳制值YHistClampValue YHistLowPctlLuma - [set param/tr:luxlux]YHistClampValue Max(YHistClampValue, 0.0)YHistClampValue Min(YHistClampValue, [set param/tr:luxlux])这里我们根据设定的光照参数调整亮度直方图的低阈值并确保其值在合理范围内。确定高亮目标值HighPctlLumaTarget Max(YHistHighPctlLuma, [set param/tr:luxlux])设定高亮部分的目标亮度值确保图像的高光部分不会过曝。计算亮度缩放比例HighPctlLumaRemoveOffset YHistHighPctlLuma - YHistClampValueYHistScaleValue HighPctlLumaTarget / HighPctlLumaRemoveOffsetYHistScaleValue Min(YHistScaleValue, 1.25)通过计算高亮部分的缩放比例调整图像的亮度分布同时限制最大缩放比例以防止失真。1.34 BrightenImgSABrightenImgSALumaBrightenImgPCTLLuma BrightenImgSATarget[setparam/tr:luxlux] BrightenImgSAAdjRatioBrightBrightenImgSATarget/BrightenImgSALuma BrightenImgSAAdjRatioSat[setparam/tr:luxlux]/BrightenImgSatPCTLLuma BrightenImgSAAdjRatioMinMin(BrightenImgSAAdjRatioBright,BrightenImgSAAdjRatioSat) BrightenImgSAAdjRatioFSATgtBrightenImgSAAdjRatioMin*FrameSALum/FrameSATarget BrightenImgSAAdjIncBrightenImgSAMinRatio*((BrightenImgSAAdjRatioFSATgt-1)*[setparam/tr:luxCtrlLuma])1 BrightenImgSAMinRatioMin([setparam/tr:luxBrightenImgStatsRoughness],[setparam/tr:luxBrightenImgFlatRatio]) BrightenImgSAAdjRatioFSATgt(BrightenImgSAAdjRatioFSATgt1)?BrightenImgSAAdjInc:BrightenImgSAAdjRatioFSATgt BrightenImgSAAdjRatio.Start[setparam/tr:luxBrightenImgSAAdjRatioFSATgt]*FrameSATarget/FrameSALum BrightenImgSAAdjRatio.End256在BrightenImgSA部分我们专注于根据光照条件动态调整图像的亮度和饱和度以提升视觉质量。初始化亮度和饱和度调整比例BrightenImgSALuma BrightenImgPCTLLumaBrightenImgSATarget [set param/tr:luxlux]BrightenImgSAAdjRatioBright BrightenImgSATarget / BrightenImgSALumaBrightenImgSAAdjRatioSat [set param/tr:luxlux] / BrightenImgSatPCTLLuma分别计算基于亮度和饱和度的调整比例。确定最小调整比例BrightenImgSAAdjRatioMin Min(BrightenImgSAAdjRatioBright, BrightenImgSAAdjRatioSat)取亮度和饱和度调整比例中的较小值作为最终的调整基准。计算帧级别的调整目标和增量BrightenImgSAAdjRatioFSATgt BrightenImgSAAdjRatioMin * FrameSALum / FrameSATargetBrightenImgSAMinRatio Min([set param/tr:luxBrightenImgStatsRoughness], [set param/tr:luxBrightenImgFlatRatio])BrightenImgSAAdjInc BrightenImgSAMinRatio * ((BrightenImgSAAdjRatioFSATgt - 1) * [set param/tr:luxCtrlLuma]) 1根据帧级别的亮度和目标值计算调整增量。应用调整比例BrightenImgSAAdjRatioFSATgt (BrightenImgSAAdjRatioFSATgt 1) ? BrightenImgSAAdjInc : BrightenImgSAAdjRatioFSATgtBrightenImgSAAdjRatio.Start [set param/tr:luxBrightenImgSAAdjRatioFSATgt] * FrameSATarget / FrameSALumBrightenImgSAAdjRatio.End 256如果调整后的目标比例大于1则应用调整增量否则保持原比例。最后设置调整比例的起始和结束值。1.35 Safe3HDRSnapshotSASafe3HDRSnapshotSAAdjRatio SafeAggSA3HDRSafeExp / TriggerCtrlShortExp在探讨Safe3HDRSnapshotSA的计算时我们首先需要明确其调整比例AdjRatio的计算方式。这一比例是基于SafeAggSA模式下的3HDR安全曝光 值SafeExp与触发控制短曝光值TriggerCtrlShortExp之间的比值来确定的。具体公式如下Safe3HDRSnapshotSAAdjRatio SafeAggSA3HDRSafeExp / TriggerCtrlShortExp1.36 Short3HDRSnapshotSASafe3HDRSnapshotSAScaledExp SafeggSA3HDRShortExp * [set param/tr:luxTriggerCtrlSatRatio] Short3HDRSnapshotSASelExp (SafeAggSA3HDRSafeExp Short3HDRSnapshotSAScaledExp) ? SafeAgg3HDRSafeExp: Short3HDRSnapshotSAScaledExp Short3HDRSnapshotSAAdjRatio Short3HDRSnapshotSASelExp / TriggerCtrlShortExp接下来我们进入Short3HDRSnapshotSA的计算。这里涉及到缩放曝光值ScaledExp和选择曝光值SelExp的计算以及最终调整比例AdjRatio的确定。缩放曝光值通过当前设置的参数如光照强度lux和触发控制饱和度比例TriggerCtrlSatRatio来调整SafeAggSA模式下的3HDR短曝光值。选择曝光值根据缩放曝光值与SafeAggSA模式下的3HDR安全曝光值的大小关系来决定最终的曝光值。具体公式如下Safe3HDRSnapshotSAScaledExp SafeggSA3HDRShortExp * [set param/tr:lux TriggerCtrlSatRatio]Short3HDRSnapshotSASelExp (SafeAggSA3HDRSafeExp Short3HDRSnapshotSAScaledExp) ? SafeAggSA3HDRSafeExp : Short3HDRSnapshotSAScaledExpShort3HDRSnapshotSAAdjRatio Short3HDRSnapshotSASelExp / TriggerCtrlShortExp1.37 Long3HDRSnapshotSALong3HDRSnapshotSAScaledDRCGain Min([set param/tr:lux 64], LongDarkPrevSA3HDRLongExp * [setparam/tr:luxTriggerCtrlDarkRatio] / Short3HDRSnapshotSASelExp Long3HDRSnapshotSAScaledExp Long3HDRSnapshotSAScaledDRCGain * Short3HDRSnapshotSASelExp Long3HDRSnapshotSASelExp (SafeAggSA3HDRSafeExp * Long3HDRSnapshotSAScaledExp) /(Long3HDRSnapshotSAScaledExp * SafeAggSA3HDRSafeExp) Long3HDRSnapshotSAAdjRatio Long3HDRSnapshotSASelExp / TriggerCtrlShortExp最后我们分析Long3HDRSnapshotSA的计算过程这涉及到动态范围控制增益DRCGain的计算、缩放曝光值的应用以及选择曝光值和最终调整比例的确定。缩放DRC增益首先根据光照强度参数和触发控制暗光比例TriggerCtrlDarkRatio结合之前的Short3HDRSnapshotSA选择曝光值来计算一个缩放后的DRC增益。同时确保增益不超过预设的最大值如64。缩放曝光值利用计算出的DRC增益与Short3HDRSnapshotSA的选择曝光值相乘得到Long3HDRSnapshotSA的缩放曝光值。选择曝光值与调整比例通过特定的数学变换这里可能是一个简化的表达实际可能更复杂确定最终的Long3HDRSnapshotSA选择曝光值并计算其调整比例。具体公式如下Long3HDRSnapshotSAScaledDRCGain Min([set param/tr:lux, 64], LongDarkPrevSA3HDRLongExp * [set param/tr:lux TriggerCtrlDarkRatio] / Short3HDRSnapshotSASelExp)Long3HDRSnapshotSAScaledExp Long3HDRSnapshotSAScaledDRCGain * Short3HDRSnapshotSASelExp这里的Long3HDRSnapshotSASelExp计算可能是一个简化的描述实际逻辑可能更复杂假设简化为直接采用缩放曝光值作为选择曝光值仅为示例Long3HDRSnapshotSASelExp Long3HDRSnapshotSAScaledExp # 实际应用中需根据具体算法确定Long3HDRSnapshotSAAdjRatio Long3HDRSnapshotSASelExp / TriggerCtrlShortExp