135、视频降噪与时域滤波:运动自适应与3D降噪算法实战
135、视频降噪与时域滤波:运动自适应与3D降噪算法实战去年冬天,我在调试一台车载环视系统的夜间降噪时,遇到了一个让人抓狂的问题。白天效果完美,一到晚上,停车场的路灯下,画面里静止的车辆轮廓清晰,但稍微一动,车尾就拖出一条“鬼影尾巴”。更诡异的是,当车辆完全停下,鬼影还会残留两三帧才消失。产线那边催得紧,说隔壁竞品已经跑通了3D降噪。我盯着示波器上的时序图,突然意识到——这不是算法不对,是运动检测的阈值和帧缓存策略没匹配上场景的动态范围。时域滤波的本质:用过去换现在视频降噪和单帧降噪最大的区别在于,我们手里多了一张“时间牌”。单帧降噪只能在一个画面里找像素相关性,比如用双边滤波保边,但代价是纹理细节被抹成塑料感。时域滤波的思路更直接:如果当前像素和前一帧对应位置的像素差异很小,说明是噪声,直接平均掉;如果差异很大,说明是运动物体,得保留。这个逻辑听起来简单,但落地时第一个坑就来了——帧缓存的管理。我见过不少新手直接开一个全局的帧缓冲区,每帧都存整张图。对于1080P@30fps的视频,一帧YUV420的数据量大约是1.5MB,存三帧就是4.5MB。在嵌入式平台上,这4.5MB可能直接挤掉了ISP pipeline里其他模块的DDR带宽。别这样写——正确的做法是用双缓冲或者环形缓冲区,只保留当前帧和前一帧的缩略版本,比如先做2x2下采样再存,运动检测的精度损失几乎可以忽略。运动自适应:别让静止的树叶“跳舞”运动自适应是3D降噪的核心。它的目标很简单:静止区域狠狠降噪,