OpenCV(二十五):方盒滤波与均值滤波

滤波的基本概念

滤波的核心思想是:

对每个像素,以其邻域(通常为 k×k 窗口)为基础进行计算,使输出像素值更平滑或者更符合某种特定需求。

线性滤波的一般形式为:

其中 k(i,j) 为滤波核(kernel)。

归一化的意义

  1. 避免数值溢出

卷积核的所有元素之和被缩放到 1,不会把像素变得太大。

  1. 保持图像亮度不改变

例如均值滤波后,亮度不会"变亮"。

  1. 使滤波核有明确的物理意义

例如平均滤波核:

表示每个像素的权重是 1/9。

  1. 让不同大小的滤波窗口输出可比较

3×3、5×5 核都保持统一尺度,不会因为窗口大而输出更大值。

总结:

归一化 = 除以滤波窗口权重之和,使输出像素保持与输入同样的范围和尺度。

在 OpenCV 中:

  • normalize=True → 均值滤波
  • normalize=False → 求区域和(不缩放)

方盒滤波(Box Filter)原理

方盒滤波属于线性滤波的一种,它的滤波核为常数,因此又称 Box Kernel。其基本思想是:

在邻域窗口内对像素值求和,然后乘以一个归一化因子(可选择是否归一化)。

滤波核一般形式为:

若需要归一化,则:

OpenCV 中对应函数为:

python 复制代码
cv2.boxFilter(src, ddepth, ksize, anchor=None,
              normalize=True, borderType=None)

参数说明:

参数 含义
src 输入图像
ddepth 输出类型,-1 最常用
ksize 滤波核大小
anchor 内核中心,默认即可
normalize 是否均值化
borderType 边界处理方式

特点

优点:

  1. 速度快
    内部通过积分图(Integral Image)优化,可实现 O(1) 的均值计算。
  2. 能支持不归一化情况下的求和滤波
    normalize=False 时可用于快速求区域和。
  3. 灵活度高
    可指定目标深度 ddepth(如 CV_16S、CV_32F)。

缺点:

  1. 对边缘模糊明显
    因为所有邻域像素权重相同,不能保留边缘。
  2. 容易产生较大程度的模糊
    比高斯滤波更容易导致图像信息丢失。

均值滤波(Mean Filter / Blur)原理

均值滤波是方盒滤波的特例。其核心思想是:

取邻域窗口内所有像素的平均值作为输出像素。

数学形式:

OpenCV 函数:

复制代码
cv2.blur(src, ksize)

其内部实际上调用的是带 normalize=True 的 boxFilter,因此结果与归一化的 boxFilter 完全一致

特点

优点:

  1. 简单高效,计算速度快
  2. 实现平滑效果明显
  3. 使用最广泛的基础平滑方法

缺点:

  1. 边缘模糊严重
  2. 去噪能力一般
  3. 无法区分噪声与细节信息(容易破坏边缘)

方盒滤波 vs. 均值滤波 对比

项目 方盒滤波(boxFilter) 均值滤波(blur)
本质 区域像素求和(可归一也可不归一) 归一化的 boxFilter
算法 可使用积分图优化 调用 boxFilter(normalize=True)
是否可控制归一化 可以 不可以(默认归一化)
速度 快(本质同 boxFilter)
灵活性 高(支持 ddepth) 较低
常见用途 ROI 求和、快速滤波 普通平滑降噪

示例

python 复制代码
import cv2
import numpy as np

img = cv2.imread('test.jpg')

# 均值滤波
blur_img = cv2.blur(img, (5, 5))

# 方盒滤波(与 blur 等效)
box_img = cv2.boxFilter(img, ddepth=-1, ksize=(5, 5), normalize=True)

# 方盒滤波(不归一:仅求和)
box_sum = cv2.boxFilter(img, ddepth=-1, ksize=(5, 5), normalize=False)

cv2.imshow('original', img)
cv2.imshow('mean blur', blur_img)
cv2.imshow('box filter', box_img)
cv2.imshow('box sum', box_sum)
cv2.waitKey(0)
cv2.destroyAllWindows()
相关推荐
百泰派克生物科技2 分钟前
串联质量标签(TMT)
人工智能·机器学习·蛋白质组学·蛋白质·质谱
草莓熊Lotso2 分钟前
Linux 实战:从零实现动态进度条(含缓冲区原理与多版本优化)
linux·运维·服务器·c++·人工智能·centos·进度条
渡我白衣1 小时前
多路转接之epoll:理论篇
人工智能·神经网络·网络协议·tcp/ip·自然语言处理·信息与通信·tcpdump
明月照山海-1 小时前
机器学习周报二十八
人工智能·机器学习
weixin_437497777 小时前
读书笔记:Context Engineering 2.0 (上)
人工智能·nlp
喝拿铁写前端7 小时前
前端开发者使用 AI 的能力层级——从表面使用到工程化能力的真正分水岭
前端·人工智能·程序员
goodfat7 小时前
Win11如何关闭自动更新 Win11暂停系统更新的设置方法【教程】
人工智能·禁止windows更新·win11优化工具
北京领雁科技7 小时前
领雁科技反洗钱案例白皮书暨人工智能在反洗钱系统中的深度应用
人工智能·科技·安全
落叶,听雪7 小时前
河南建站系统哪个好
大数据·人工智能·python
清月电子8 小时前
杰理AC109N系列AC1082 AC1074 AC1090 芯片停产替代及资料说明
人工智能·单片机·嵌入式硬件·物联网