第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。每个像素贡献均等权重,因此称为“均值”。
2. 核大小选择
核尺寸直接影响平滑强度与细节保留。下表总结了常见核大小的特性:
| 核大小 | 感受野 | 去噪能力 | 边缘模糊 | 适用场景 |
|---|---|---|---|---|
| 3×3 | 极小 | 弱(仅抑制孤立噪点) | 轻微 | 低噪声、实时性高 |
| 5×5 | 小 | 中等 | 中等 | 一般监控视频预处理 |
| 7×7 | 中等 | 较强 | 较强 | 高噪声但容忍模糊 |
| 9×9 及以上 | 大 | 强(但过度平滑) | 严重 | 仅用于纹理不重要的区域 |
在运动检测中,通常选择 3×3 或 5×5 以平衡去噪与运动边缘保留。
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)