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()
相关推荐
北京耐用通信6 小时前
破解AGV多协议互联难题:耐达讯自动化Profinet转Devicenet网关如何实现高效协同
人工智能·科技·物联网·网络协议·自动化·信息与通信
平安的平安6 小时前
空间智能AI模型的推理加速优化实践
人工智能
baby_hua6 小时前
20251217_大模型的分布式训练
人工智能
哈哈你是真的厉害6 小时前
CANN生态核心算子库合集:赋能AIGC多模态落地的全链路算力支撑
人工智能·aigc·cann
imbackneverdie6 小时前
2026国自然申请书模板大改版,科研人员如何应对?
人工智能·自然语言处理·aigc·科研·学术·国自然·国家自然科学基金
哈哈你是真的厉害6 小时前
驾驭万亿参数 MoE:深度剖析 CANN ops-transformer 算子库的“核武库”
人工智能·深度学习·aigc·transformer
忆~遂愿6 小时前
CANN ATVOSS 算子库深度解析:基于 Ascend C 模板的 Vector 算子子程序化建模与融合优化机制
大数据·人工智能
喵叔哟6 小时前
02-YOLO-v8-v9-v10工程差异对比
人工智能·yolo·机器学习
玄同7656 小时前
SQLite + LLM:大模型应用落地的轻量级数据存储方案
jvm·数据库·人工智能·python·语言模型·sqlite·知识图谱
L、2186 小时前
CANN 内存管理深度解析:高效利用显存,突破 AI 推理瓶颈
人工智能