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 小时前
整体设计 全面梳理复盘 之38 3+1 工具套件(思维工具为根)设计共识暨 DevOps 融合落地路径
人工智能·架构·transformer
后端小张2 小时前
【AI 学习】AI Agent 开发进阶:架构、规划、记忆与工具编排
java·人工智能·ai·架构·系统架构·agent·智能体
亚马逊云开发者3 小时前
阿尔特携手 Amazon AgentCore ,打造懂你的AI,智能搜索成本降低34%
人工智能
说私域3 小时前
定制开发AI智能名片S2B2C预约服务小程序的定制开发与优势分析
大数据·人工智能·小程序
No.Ada3 小时前
《基于机器学习的脑电认知负荷识别研究与应用》论文笔记
人工智能·机器学习
中文Python3 小时前
小白中文Python-双色球LSTM模型出号程序
开发语言·人工智能·python·lstm·中文python·小白学python
WKJay_3 小时前
VSCode 1.106 版本发布 —— 更强 AI 特性,更丝滑的编程体验!
ide·人工智能·vscode
superbadguy3 小时前
用curl实现Ollama API流式调用
人工智能·python
N 年 后4 小时前
dify的是什么?怎么使用?
人工智能