分为线性滤波器(均值/加权滤波器)和非线性滤波器(中值/最大值/最小值/双边滤波器)
- 线性的权重是固定的,非线性的权重是动态的(根据像素值差异调整权重)
线性滤波器
- 均值滤波器(Mean filter):用邻域内像素的平均值替代中心像素,会出现方块状伪阴影。
- 加权滤波器(Weighted filter):给邻域内不同位置的像素分配不同的权重,然后计算加权平均值,可以实现更精细的滤波效果。
高斯滤波器
一个常见的加权滤波器是高斯滤波器(Gaussian filter),其权重由高斯函数定义:
定义为相对于卷积核中心的偏移量, 是高斯函数的标准差,控制权重的分布范围。
当用高斯核对图像做卷积时:
-
将高斯核的中心对齐到图像当前像素 。
-
对于核上的每一个偏移位置 ,从图像中取出对应像素值 ,具体正负需要约定(通常 向右为正, 向下为正)
-
乘以核权重 ,累加。

性质:
-
核心参数 控制滤波器的平滑程度, 越大,滤波效果越强。
-
属于低通滤波器,能有效滤除“高频”分量。
-
高斯核是可分离核:先进行一维横向高斯模糊,再进行一维纵向高斯模糊,计算复杂度从 降为 。
-
两次使用标准差为 的高斯核进行卷积,等价于使用一次标准差为 的高斯核进行卷积。
-
滤波器尺寸和 的关系: 因为高斯分布在 范围内包含了 99.7% 的能量。
-
有时候使用的权重是 , 归一化确保核的亮度不变性(平滑后平均亮度不变)。
基于sigma产生高斯核:
use std::f64::consts::PI;
/// 生成二维高斯核/// - `size`: 核尺寸,必须是奇数(如 3, 5, 7)/// - `sigma`: 高斯标准差 (σ)/// 返回值:size x size 的二维浮点数组,已归一化(所有元素之和为 1)fn gaussian_kernel(size: usize, sigma: f64) -> Vec<Vec<f64>> { assert!(size % 2 == 1, "核尺寸必须是奇数"); let radius = (size / 2) as i32; let sigma2 = sigma * sigma; let denom = 2.0 * sigma2; let norm = 1.0 / (2.0 * PI * sigma2);
let mut kernel = vec![vec![0.0; size]; size]; let mut sum = 0.0;
for i in 0..size { let x = (i as i32 - radius) as f64; for j in 0..size { let y = (j as i32 - radius) as f64; let value = norm * (-(x*x + y*y) / denom).exp(); kernel[i][j] = value; sum += value; } }
// 归一化,使所有权重之和为 1 for row in &mut kernel { for val in row { *val /= sum; } } kernel}非线性滤波器
假设滤波器尺寸为 ,以中心像素为基准,定义邻域为 ,其中 。
- 中值滤波器(Median filter):用邻域内像素的中位数替代中心像素,能有效去除椒盐噪声,同时保持边缘。
- 最大值滤波器(Max filter):用邻域内像素的最大值替代中心像素,常用于突出亮区域。
- 最小值滤波器(Min filter):用邻域内像素的最小值替代中心像素,常用于突出暗区域。
双边滤波器(Bilateral filter)
高斯滤波只考虑“空间距离”,不考虑“像素值差异”,会模糊边缘
双边滤波只和“距离近 + 像素值相似”的点做加权平均
通过两个高斯函数分别对空间距离和像素值差异进行加权:
用 表示像素的坐标,用 表示像素的灰度值,用 表示核内部的偏移坐标:
空间距离核(Domain Kernel,衡量像素在空间上的远近):
像素值核(Range Kernel,衡量像素在灰度上的差异):
其中 是归一化因子, 控制空间距离的权重, 控制像素值差异的权重。
- 控制模糊的范围,越大,越多邻域像素参与计算,平滑的范围越广;
- 控制对灰度差异的敏感度,越大,越多像素值差异较大的像素参与计算。
每个像素都要重新计算权重,不能用卷积优化
:::tip 双边滤波调参直觉
和 分别控制”多大范围的邻居被纳入”和”多大差异的邻居被纳入”。实际调参时可以记住几条规律:
- 固定时, 过小 → 像素值差异被严格限制,边缘保留极好但平滑效果很弱(只有颜色完全一致的区域被平均); 过大 → 像素值核趋近于 1,双边滤波退化为高斯滤波。
- 固定时, 过小 → 只有几个像素被平均,去噪不够; 过大 → 远处的像素即使灰度值差异大也会被纳入( 控制跨边缘能力,但 过大还是会模糊细节)。
- 实践经验: 设为图像灰度方差的 10%–20% 作为初始值, 设为 2–5 像素。
:::
:::tip 各滤波器速查
| 滤波器 | 类型 | 抗噪 | 保边 | 计算速度 | 典型噪声 |
|---|---|---|---|---|---|
| 均值 | 线性 | 弱 | 差 | 最快 | 高斯噪声(轻度) |
| 高斯 | 线性 | 中 | 差 | 快 | 高斯噪声 |
| 中值 | 非线性 | 强 | 好 | 中 | 椒盐噪声 |
| 双边 | 非线性 | 强 | 极好 | 慢 | 高斯噪声+保边 |
:::