036、Dual Conversion Gain的巧妙之处——一个电容如何解决低光和高光不可兼得的矛盾——DCG切换的时序控制与HDR融合的联动调优
036、Dual Conversion Gain的巧妙之处——一个电容如何解决低光和高光不可兼得的矛盾——DCG切换的时序控制与HDR融合的联动调优去年夏天在调试一颗车规级前视摄像头时客户反馈了一个极其刁钻的场景傍晚六点半车头正对西边低角度太阳路面阴影里蹲着一个穿深色衣服的行人。ISP的HDR融合算法在明暗交界处拉出了明显的鬼影而更让人头疼的是同一帧画面里天空的云层已经过曝成了纯白而行人身上的纹理却还埋在噪声里。我们当时用的是一颗支持DCG的BSI传感器标称动态范围120dB理论上不该是这个表现。我盯着寄存器表看了半天突然意识到问题可能不在HDR融合算法本身而在DCG的切换时序上——传感器在帧内切换高低转换增益时如果切换点落在曝光积分的中段等效于给像素的电荷积分过程人为制造了一个“阶梯”而这个阶梯的台阶高度恰好就是高低增益的比值。这个比值在融合算法里被当作常数来用但实际像素的响应曲线在切换点附近是非线性的于是融合权重算错了鬼影和噪声就都冒出来了。DCG的基本原理说白了就是给像素的浮置扩散节点FD并联一个额外的电容。低增益模式下这个电容接入FD的电荷-电压转换系数变小满阱容量变大能存下更多光生电子高光不饱和高增益模式下电容断开转换系数变大同样数量的电子能产生更高的电压低光信号被放大噪声被压下去。一个电容两种状态理论上解决了“一像素既要能看暗又要能看亮”的矛盾。但问题在于这个电容的接入和断开不是瞬间完成的它需要时间而且这个时间点必须精确地落在曝光积分结束之后、读出开始之前。如果落在积分中间电荷还在源源不断地从光电二极管转移到FD此时突然改变FD的电容FD上的电压会跳变这个跳变幅度等于电荷量乘以电容变化量而电荷量本身又是光强的函数——于是高光像素的跳变幅度大低光像素的跳变幅度小整个响应曲线在切换点处出现一个拐点这个拐点就是非线性失真的来源。我们当时在实验室里用积分球均匀光源拍了一组灰阶卡把DCG切换点从曝光积分的10%位置逐步挪到90%位置每个位置拍20帧然后提取灰阶卡上每个色块的灰度值拟合成响应曲线。结果非常直观切换点越靠近积分末端响应曲线的线性度越好切换点越靠近积分前端曲线在中间灰度区域出现明显的“S”形弯曲。这个S形弯曲就是融合算法里鬼影和噪声的元凶——因为HDR融合通常会把高增益帧和低增益帧的像素按权重混合权重系数是根据两帧的响应曲线标定出来的如果响应曲线在某个灰度区间发生了非线性偏移权重就会算错导致暗部像素被错误地赋予了高增益帧的权重而高增益帧在这个灰度区间的噪声是放大的于是暗部噪声被放大亮部像素被错误地赋予了低增益帧的权重而低增益帧在这个灰度区间的信号已经接近饱和于是亮部细节丢失。找到根因之后解决方案其实就两条路要么把DCG切换点严格锁定在曝光积分结束后的消隐期内要么在融合算法里引入一个“切换点位置”的补偿项。第一条路受限于传感器硬件设计有些传感器允许你通过寄存器配置切换点的精确位置有些则固定死在某个位置没法改。我们当时用的那颗传感器切换点位置是可配的但配置范围只有积分时间的5%到95%而且最小步进是1%——听起来很灵活但实际调起来发现切换点位置对响应曲线的影响不是线性的靠近积分末端时1%的步进对应的灰度偏差可能只有半个LSB但靠近积分前端时1%的步进对应的灰度偏差可能达到十几个LSB。所以光靠寄存器配置很难做到在所有光照条件下都完美。于是我们把重心放在第二条路上在融合算法里加一个“切换点位置”的实时估计器。具体做法是在每一帧的曝光积分开始前读取当前帧的曝光时间和增益配置然后根据传感器手册里给出的切换点位置与曝光时间的对应关系表插值出当前帧的切换点位置再把这个位置作为参数输入到融合权重计算模块里。这个对应关系表不是固定的它跟温度有关——电容的充放电速度受温度影响温度升高切换时间变长等效切换点位置会后移。所以我们又加了一个温度传感器每100ms读一次温度动态修正对应关系表。这套方案在实验室里跑了两周把温度从-20℃到85℃扫了一遍响应曲线的线性度偏差从原来的最大12%压到了2%以内鬼影和暗部噪声的问题基本消失。但这里有个坑必须提醒你切换点位置的估计不能只看曝光时间还得看光强。因为DCG切换的本质是FD电容的变化而FD上的电荷量是光强和曝光时间的乘积。同样的曝光时间强光下FD上的电荷多切换时电压跳变大弱光下电荷少跳变小。所以单纯用曝光时间查表在强光场景下会低估切换点的影响在弱光场景下会高估。我们后来在估计器里加了一个光强前馈项——用上一帧的全局平均亮度作为当前帧光强的近似然后把这个近似值乘到切换点位置的修正系数上。这个前馈项不需要很精确因为融合算法本身对切换点位置的敏感度在弱光下本来就低在强光下敏感度高所以只要保证强光下的修正方向正确弱光下的误差可以容忍。另一个容易被忽略的联动点是DCG切换和HDR融合的帧同步。很多传感器的DCG切换是逐帧进行的也就是说一帧用高增益下一帧用低增益然后两帧融合成一张HDR。这种情况下切换点位置只影响单帧的响应曲线不影响帧间融合。但有些传感器支持帧内DCG切换——在一帧的曝光积分过程中前半段用高增益后半段用低增益这样一帧就能同时获得高低增益信息但代价就是前面说的响应曲线拐点问题。我们当时用的就是帧内切换模式因为帧间切换在运动场景下容易产生鬼影帧内切换可以避免这个问题。但帧内切换对时序的要求极其苛刻切换点必须落在曝光积分的精确位置而且这个位置要跟传感器的行读出时序对齐——因为不同行的曝光积分起始时间不同如果切换点按全局时间固定那么不同行的实际切换点位置会随行号偏移导致画面上下部分的响应曲线不一致。我们当时用示波器抓了传感器的VSYNC和行同步信号发现切换点寄存器配置的是全局时间但实际生效是按行同步信号逐行触发的所以每行的切换点位置会有一个固定的行偏移。这个偏移量在传感器手册里没有明确写是我们通过拍均匀光场然后逐行分析灰度值才发现的。解决这个行偏移问题我们用了两个手段一是把切换点配置值减去一个行偏移补偿量这个补偿量等于行同步周期乘以行号二是把融合算法的权重计算从逐像素改成逐行——因为同一行的切换点位置一致所以同一行的响应曲线一致权重可以按行计算然后行内像素共享权重。这个改动让融合算法的计算量下降了不少因为权重计算从像素级变成了行级而且行级权重可以用查表实现不用每个像素都做除法。但代价是如果画面里有局部高光或局部阴影行级权重会在明暗交界处产生轻微的块状伪影——这个伪影在最终图像上表现为横向的细线不仔细看发现不了但用专业测试卡一测就能测出来。我们后来在行级权重的基础上加了一个3x3的平滑滤波把块状伪影抹掉了但代价是边缘锐度略有下降。这个取舍最终跟客户确认了他们更在意暗部噪声和鬼影边缘锐度下降1%以内可以接受。最后说点个人经验。DCG这个东西从原理上看就是一个电容开关但真正量产调优时你会发现它牵扯到传感器时序、ISP融合算法、温度补偿、行同步对齐、光强前馈五个维度任何一个维度没对齐最终图像上都会以噪声或鬼影的形式暴露出来。我的建议是如果你在调DCG相关的HDR问题先别急着动融合算法的权重先用均匀光场拍一组灰阶卡把响应曲线拉出来看如果曲线在中间灰度有拐点那八成是DCG切换点位置不对而不是融合算法的问题。另外传感器手册里给的切换点配置值往往是在常温下测的温度一变就要重新标定所以量产时一定要留一个温度补偿的校准接口别把切换点配置值写死。还有帧内DCG切换的行偏移问题很多传感器手册不会写你得自己用示波器抓时序或者用均匀光场逐行分析灰度值来反推——这个坑我踩过希望你别再踩一遍。

相关新闻

企业EEAT内容建设四步落地法|从理论到可执行的技术方案

企业EEAT内容建设四步落地法|从理论到可执行的技术方案

企业EEAT内容建设四步落地法|从理论到可执行的技术方案 一、从“理论认知”到“可执行动作” 很多技术管理者面临的实际问题是:“我知道EEAT很重要,但具体怎么做?” 这篇文章把EEAT的理论框架,拆解成四步可执行的落…

2026/10/23 18:58:13 阅读更多 →
小红书店群自动化管理系统:20核引擎全开,百店并发零报错零中断

小红书店群自动化管理系统:20核引擎全开,百店并发零报错零中断

小红书店群自动化管理系统:20核引擎全开,百店并发零报错零中断 搞店群运营这行,小红书的自动化上架,是店群运营中最耗人力也最容易出错的环节。 手动上架一个商品从填写标题、上传主图、设置SKU、填写详情到发布,熟练…

2026/10/24 2:24:26 阅读更多 →
小红书客服系统:React Event层注入,表单填充速度碾压人工200倍

小红书客服系统:React Event层注入,表单填充速度碾压人工200倍

小红书客服系统:React Event层注入,表单填充速度碾压人工200倍 电商自动化圈子里流传一句话:小红书的自动回复与客服,是店群运营中最耗人力也最容易出错的环节。 店群客服是纯人力消耗战。一个店日均50条咨询,20个店…

2026/10/26 9:54:23 阅读更多 →

最新新闻

Electron桌面应用开发实战:从环境搭建到打包发布全流程

Electron桌面应用开发实战:从环境搭建到打包发布全流程

做前端这些年,我大部分时间都在跟浏览器标签页打交道,直到第一次把桌面应用跑起来,才发现原来自己一直被限制在地址栏和刷新按钮围起来的框框里。Electron这个词,最开始是在某段时间频繁出现在同事的讨论里,一个用HTML…

2026/10/30 0:01:36 阅读更多 →
滑盖智能锁T109深度解析:结构原理、安装调试与故障排查

滑盖智能锁T109深度解析:结构原理、安装调试与故障排查

简介:亚太天能T109滑盖智能锁产品说明书是一份PDF格式的官方技术文档,主要面向智能锁安装人员、终端用户及售后维护者,帮助快速掌握产品安装、配置与常见故障处理。全包仅1个PDF文件,大小4.37MB,内容结构清晰&#xff…

2026/10/30 9:20:34 阅读更多 →
PMSM弱磁控制原理与Simulink建模:高速AGV驱动系统设计指南

PMSM弱磁控制原理与Simulink建模:高速AGV驱动系统设计指南

上个月我在调试一台高速AGV的驱动系统,整车要求空载跑到8m/s,电机转速已经拉到额定点,驱动器的输出电压也顶到了母线电压极限附近。再往上踩速度指令,转速纹丝不动,三相电流反而开始震荡。那会儿我的第一反应就是&…

2026/10/30 10:19:21 阅读更多 →
C++核心知识点:从内存管理到STL的实战指南

C++核心知识点:从内存管理到STL的实战指南

C 这门语言我前前后后折腾了十几年,用它写过嵌入式驱动、做过游戏服务端,也搭过基础组件库。每次看到新人一头扎进"C 核心知识点"这个搜索词,我其实挺感慨的——这门语言的难点从来不是语法多,而是知识点之间的耦合太深…

2026/10/30 0:01:37 阅读更多 →
T109滑盖智能锁怎么装?安装调试与故障排查全攻略

T109滑盖智能锁怎么装?安装调试与故障排查全攻略

简介:亚太天能T109滑盖智能锁产品说明书以PDF格式发布,适合智能锁用户、安装人员与售后维修人员阅读。内容围绕T109系列指纹密码刷卡锁展开,先介绍前面板、后面板、锁体、机械钥匙、电池盒盖等部件名称与功能,再给出完整安装步骤&…

2026/10/30 10:19:39 阅读更多 →
LLM知识降熵:从信息垄断到理解权下放

LLM知识降熵:从信息垄断到理解权下放

你有没有过这种经历:翻开源码注释、论文摘要或者一份专业报告,每个字都认识,连在一起却像天书。想找人聊聊,身边要么没人懂,要么懂的懒得跟你解释。后来我试着把同一段内容丢给一个大语言模型,几秒钟之后&a…

2026/10/30 9:21:37 阅读更多 →

日新闻

周新闻

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/30 17:32:24 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/30 10:28:40 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/30 0:01:33 阅读更多 →