持续变化背景检测:累积残差法

2023 年 8 月 13 日 星期日
/ , , , ,
2
摘要
用累积残差法区分扶梯、告示牌等"一直在动但不属于前景"的区域。100 帧残差累积 + 二值化 + 形态学 + 连通域过滤,轻量级纯 CPU 方案。

持续变化背景检测:累积残差法

编写时间:2023-08

监控视频的背景建模通常假设背景是静止的。但真实场景里有一些东西虽然一直在动,却不属于前景——扶梯在运行、电子告示牌在滚动文字、喷泉在喷水。它们不应该触发"运动检测",但又确实在变化。这个模块就是处理这个边界情况。

问题定义

核心判断标准不是"有没有变化",而是变化是否持续。一个人走过,残差只在那几帧;扶梯一直在转,残差会在几十上百帧里持续累积。

算法思路

累积残差

对固定长度的帧窗口,逐帧计算相邻帧差并累加:

accum=i=1Nframeiframei1 accum = \sum_{i=1}^{N} |frame_i - frame_{i-1}|

二值化与后处理

累积残差图拿到后,走一条标准的 mask 生成管线:

消除前景干扰

人走动也会产生残差,但人的残差是局部的、不会在同一个像素位置持续整整 100 帧。两种辅助手段:

手段作用代价
人脸/人体检测剔除含人区域的残差需要额外模型
边缘检测辅助利用边缘一致性确认区域对纹理弱区效果有限

实际效果上,因为背景运动(扶梯、告示牌)的位置非常固定,即使不加人脸检测,100 帧的累积也已经能把前景残差稀释到阈值以下。人脸检测更多是兜底。

参数选择

参数直觉
累积帧数100足够让前景残差被稀释,背景残差充分累积
残差阈值10/255低于此的帧间变化视为噪声(压缩伪影、传感器噪点)
二值化阈值70/255累积残差归一化后,多高算"持续变化"
连通面积阈值500 px过滤零星噪点聚集

参数调的思路是:累积帧数决定"持续"的定义严格程度;二值化阈值决定对"变化剧烈程度"的敏感度;面积阈值是最后的安全网,清理碎片。

边界与局限

  1. 不适合短时场景切换。如果背景变化本身只持续几秒就停了(比如临时施工),100 帧窗口可能捕捉不到。
  2. 依赖固定相机。相机抖动会导致全图残差异常升高,需要先做稳像或全局运动补偿。
  3. 光照突变(开关灯、闪电)会在残差图上制造大面积的假阳性。可以考虑在残差计算前做光照归一化。
  4. 缓慢变化的背景(如日落时分的光影移动)帧间残差很小,可能需要更长的累积窗口或更低的残差阈值。

工程判断

这个模块属于"小而有用的算法笔记"。它不涉及深度学习,也不用 GPU,核心是一个观察:持续性和规律性可以把背景变化和前景运动分开。累积残差本质上是把时间维度的信息折叠到一张图里,然后用经典图像处理手段(阈值、形态学、连通域)做决策。

在工程上,这种轻量级方法很适合作为监控视频分析的前置步骤——先把扶梯和告示牌区域标出来,后续的运动检测、目标跟踪、异常检测就可以直接跳过这些区域,减少误报。

使用社交账号登录

  • Loading...
  • Loading...
  • Loading...
  • Loading...
  • Loading...