第3章 均值滤波

原理 · 核大小选择 · 运动检测局限性

均值滤波(Mean Filter)是最早、最直观的平滑去噪工具之一。它使用一个固定大小的滑动窗口(核),将窗口内所有像素的平均值作为中心像素的新值。本章深入剖析其数学本质、核参数的影响,以及在运动检测场景下不可忽视的缺陷。

1. 均值滤波原理

对于输入图像 I,输出图像 J 在位置 (x, y) 的值为:

J(x,y) = (1 / (K×L)) · Σi=-aa Σj=-bb I(x+i, y+j)

其中核尺寸为 K×L(通常 K=L 且为奇数),a = (K-1)/2, b = (L-1)/2。每个像素贡献均等权重,因此称为“均值”。

12 15 18 21 24 10 13 16 19 22 8 11 14 17 20 6 9 12 15 18 ➜ 均值 = (10+13+16+8+11+14+6+9+12)/9 = 11.0 → 新像素值 11 核大小 3×3,步长 1

2. 核大小选择

核尺寸直接影响平滑强度与细节保留。下表总结了常见核大小的特性:

核大小感受野去噪能力边缘模糊适用场景
3×3极小弱(仅抑制孤立噪点)轻微低噪声、实时性高
5×5小中等中等一般监控视频预处理
7×7中等较强较强高噪声但容忍模糊
9×9 及以上大强(但过度平滑)严重仅用于纹理不重要的区域

在运动检测中,通常选择 3×3 或 5×5 以平衡去噪与运动边缘保留。

3×3 核 5×5 核 7×7 核 核越大 → 平滑越强,但边缘越模糊

3. 运动检测中的局限性

⚠️ 核心问题: 均值滤波假设噪声为加性高斯,且所有邻域像素同等重要。但在运动检测中,运动边缘与静止区域交界处会产生严重的拖影与虚假运动。
  • 边缘模糊导致漏检: 运动物体轮廓被平滑,帧差法或背景减法难以提取精确边界。
  • 对椒盐噪声敏感: 均值滤波会将异常值扩散到周围,反而扩大噪声影响区域。
  • 无法区分运动与静止: 核内同时包含运动与背景像素时,平均结果产生“鬼影”,降低运动检测置信度。
  • 时域不连续性: 逐帧独立均值滤波忽略时间相关性,造成闪烁伪影。
原始边缘 运动 背景 ➜ 均值滤波后 拖影 运动边缘被平均,产生虚假过渡带

代码示例:OpenCV 均值滤波

import cv2
import numpy as np

# 读取含噪声帧
frame = cv2.imread('motion_frame.png', cv2.IMREAD_GRAYSCALE)

# 3x3 均值滤波
blurred_3 = cv2.blur(frame, (3, 3))
# 5x5 均值滤波
blurred_5 = cv2.blur(frame, (5, 5))

# 运动检测(帧差法示例)
diff = cv2.absdiff(blurred_3, background)
_, mask = cv2.threshold(diff, 30, 255, cv2.THRESH_BINARY)
cv2.imshow('Motion Mask', mask)