公司动态
133、洞察驱动的实战标题——3D降噪的“联合炼金术“——空域+时域+频域联合降噪的工程实现,以及如何用运动自适应权重避免“果冻感“
133、洞察驱动的实战标题——3D降噪的"联合炼金术"——空域+时域+频域联合降噪的工程实现,以及如何用运动自适应权重避免"果冻感"去年夏天,某款旗舰机在夜景模式下的预览流里出现了一种奇怪的“呼吸感”——画面静止时噪点颗粒像潮水一样有节奏地涌来退去,而一旦镜头轻微摇动,整个画面就像果冻一样软塌塌地晃。当时我们团队的第一反应是去查ISP的AE曲线,怀疑是曝光时间抖动,但示波器抓了半小时,曝光参数稳如老狗。后来把3DNR关掉,现象立刻消失,问题锁定在时域滤波上。但真正让人头疼的是,这颗sensor的读出噪声在低照度下呈现明显的1/f特性,单纯靠时域累加根本压不住,而且运动区域一旦被时域滤波“粘住”,那种果冻感比噪点本身更让人抓狂。那段时间我翻遍了手头的参考代码,发现大多数方案都是把空域、时域、频域三个模块串成流水线,各自为政。空域用双边滤波,时域用帧间加权平均,频域塞一个小波阈值。听起来很合理,但实际跑起来,空域把高频细节磨掉一层,时域又把运动区域的边缘拖出残影,频域阈值稍微调高一点,整个画面就像蒙了一层纱。问题出在三个模块之间没有信息交互,空域不知道哪些像素是运动区域,时域不知道哪些频率成分是真实纹理,频域更不知道空间上哪些位置需要保护。这种“串联式”降噪,本质上是在三个维度上各自做了一次盲人摸象,最后叠加出来的结果自然顾此失彼。真正的转机来自一次偶然的调试。当时我在看一帧运动物体的边缘,发现时域滤波的权重如果直接取像素灰度差,那么在纹理密集区域,哪怕物体静止,帧间灰度差也会因为sensor的随机噪声而波动,导致时域权重被错误地压低,降噪强度不够。反过来,在平坦区域,灰度差很小,时域权重被拉满,但一旦有轻微抖动,平坦区域的大块像素就会一起被“拖”向上一帧的位置,形成明显的果