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()
相关推荐
Setsuna_F_Seiei3 小时前
前端的 AI 学习之路 02 之 Provider 与 Structured Output - 规范化模型输入输出
人工智能·agent·ai编程
JavaPub-rodert4 小时前
王仕宇RAG 实战教程(二):从 0 搭建一个可运行的 RAG 知识库——Embedding、Qdrant 与问答实战
人工智能·embedding
Setsuna_F_Seiei4 小时前
前端的 AI 学习之路 01 之 Agent API 调用 - 和 Agent 的基础对话
前端·人工智能·ai编程
咔咔学姐kk5 小时前
小白程序员必收藏:轻松入门AI Agent开发,大厂校招新风口!
人工智能·深度学习·ai·程序员·大模型·就业·大模型学习
2601_967097225 小时前
园区巡检机器人推荐:4项评估维度与主流产品横评
大数据·人工智能·信息可视化
stuartevil5 小时前
零基础怎么用AI文生漫剧做出一条完整视频
人工智能·音视频
极客猴子6 小时前
能提取抖音视频文案的APP推荐:短视频文案工具合集
人工智能·智能手机·音视频·语音识别
sel_96 小时前
【强化学习】Hands-on Modern RL项目实践|OPD 算法完整解析
人工智能·深度学习·算法·机器学习·语言模型
xushichang123_6 小时前
Agentic AI 应用 Token 开销居高不下,可借助哪些云平台与架构实现成本管控?
人工智能
世岩清上6 小时前
新能源宣传片怎么拍?如何用画面讲好你的绿色能源故事
大数据·人工智能·能源·宣传片·宣传片拍摄