高斯滤波器(针对高斯噪声)
高斯噪声是指它的概率密度函数服从高斯分布(即正态分布)的一类噪声。常见的高斯噪声包括起伏噪声、宇宙噪声、热噪声和散粒噪声等等。
高斯滤波(Gaussian filter) 包含许多种,包括低通、带通和高通等,我们通常图像上说的高斯滤波,指的是 高斯模糊(Gaussian Blur) ,是一种 高斯低通滤波 ,其过滤调图像高频成分(图像细节部分),保留图像低频成分(图像平滑区域),所以对图像进行 '高斯模糊' 后,图像会变得模糊。
高斯模糊
对于抑制 高斯噪声
(服从正态分布的噪声) 非常有效。
高斯滤波是一种常用的图像去噪方法,它通过在图像上进行卷积操作来实现。
高斯滤波的计算过程:
高斯函数
在计算每个像素时,都把当前中心点看作坐标原点,可以使得均值 μ = 0 ,简化高斯函数的公式:
其中:
-
(x,y) 是核中某点相对于中心点的坐标
-
σ 是标准差(控制平滑程度)

高斯核的生成
高斯滤波的重要两步就是先找到高斯核然后再进行卷积
生成示例(3×3高斯核,σ=1)
python
import numpy as np
def gaussian_kernel(size, sigma=1):
kernel = np.fromfunction(
lambda x, y: (1/(2*np.pi*sigma**2)) *
np.exp(-((x-(size-1)/2)**2 + (y-(size-1)/2)**2)/(2*sigma**2)),
(size, size)
)
return kernel / np.sum(kernel) # 归一化
kernel = gaussian_kernel(3)
print(kernel)
输出结果:
python
[[0.07511361 0.1238414 0.07511361]
[0.1238414 0.20417996 0.1238414 ]
[0.07511361 0.1238414 0.07511361]]
卷积计算
高斯滤波的卷积计算步骤如下:
-
核中心对准:将高斯核中心对准图像的每个像素
-
对应相乘:核覆盖区域的像素值与核权重逐点相乘
-
求和:将所有乘积结果相加
-
替换中心像素:用求和结果替换原中心像素值

计算示例(3×3区域):
python
图像局部区域I:
[100 120 110]
[ 90 100 115]
[ 95 105 108]
高斯核:
[[0.07511361 0.1238414 0.07511361]
[0.1238414 0.20417996 0.1238414 ]
[0.07511361 0.1238414 0.07511361]]
计算后的结果:
[0.075 0.124 0.075]
[0.124 0.204 0.124]
[0.075 0.124 0.075]
计算过程:
新中心值 = 100*0.075 + 120*0.124 + 110*0.075 +
90*0.124 + 100*0.204 + 115*0.124 +
95*0.075 + 105*0.124 + 108*0.075
≈ 103.3
给原图加上高斯噪声,并绘制加噪后的像素值分布图

经过高斯滤波处理后的图像

归一化
归一化(Normalization)在图像滤波和卷积运算中是一个关键步骤,它确保滤波操作不会改变图像的整体亮度水平。
归一化的基本定义
归一化 指的是将滤波器(卷积核)的所有权重值进行缩放,使得它们的总和等于1。数学表达式为:
bash
归一化核 = 原始核 / ∑(原始核所有元素)
为什么需要归一化?
保持图像亮度恒定
未经归一化:卷积后图像整体会变亮或变暗
bash
kernel = np.array([[1, 1, 1],
[1, 1, 1],
[1, 1, 1]]) # 总和=9
# 应用该核会使每个像素值变为原来的9倍
归一化后:
bash
normalized_kernel = kernel / 9 # 总和=1
不需要归一化的特殊情况
某些滤波器故意不归一化:
- 边缘检测算子(如Sobel、Laplacian)
bash
sobel_x = np.array([[-1, 0, 1],
[-2, 0, 2],
[-1, 0, 1]]) # 总和=0
-
锐化滤波器
-
这些滤波器需要保留灰度变化信息
中值滤波器(针对椒盐噪声)
中值滤波(Median Filter)是一种非线性滤波方法,主要用于去除图像中的椒盐噪声(Salt-and-Pepper Noise)同时较好地保留图像边缘。它的计算过程与线性滤波器(如高斯滤波)完全不同。
基本计算步骤
对于一个像素点,中值滤波的计算过程如下:
-
定义滤波窗口:选择一个奇数尺寸的邻域窗口(如3×3、5×5等)
-
提取窗口内像素值:取出该窗口覆盖的所有像素值
-
排序像素值:将这些像素值按从小到大(或从大到小)排序
-
取中值:选择排序后的中间值作为该像素点的新值
-
替换原像素:用这个中值替换原图像中对应位置的像素值
具体计算示例
假设我们有一个3×3的图像区域和3×3的中值滤波窗口:
原始图像区域(3×3):
bash
[120, 125, 130,
115, 255, 120, ← 中心像素255可能是噪声(椒盐噪声)
110, 105, 140]
计算过程:
-
提取所有9个像素值:[120, 125, 130, 115, 255, 120, 110, 105, 140]
-
排序:[105, 110, 115, 120, 120, 125, 130, 140, 255]
-
取中值(第5个值):120
-
用120替换原中心像素255
中值滤波的特点
-
非线性处理:不能表示为核卷积
-
去噪效果:特别适合去除椒盐噪声
-
边缘保留:比均值滤波更好地保留边缘
-
计算复杂度:比线性滤波高,因为涉及排序操作
-
窗口大小:通常使用奇数尺寸(3×3, 5×5等)
给图像加入椒盐噪声,并去噪

均值滤波器(简单平滑)
均值滤波器(Mean Filter),也称为简单平滑滤波器 或箱式滤波器(Box Filter),是最基础的线性滤波器之一。
基本原理
均值滤波通过用邻域像素的平均值代替中心像素值来实现图像平滑:
-
线性操作:可以表示为卷积运算
-
均匀权重:滤波窗口内所有像素权重相同
-
平滑效果:减少图像噪声和细节
计算过程
对于一个N×N的均值滤波器:
-
定义滤波窗口:选择滤波器尺寸(如3×3、5×5等)
-
遍历图像:对每个像素应用滤波窗口
-
计算平均值:计算窗口内所有像素的算术平均值
-
替换中心像素:用平均值替换原中心像素值、
数学表达式:
bash
新像素值 = (1/N²) × Σ(窗口内所有像素值)
具体示例
考虑一个3×3的图像区域:
bash
[50, 60, 70]
[40, 255, 80] ← 中心像素255可能是噪声
[30, 20, 90]
计算过程:
-
提取所有9个像素值:[50, 60, 70, 40, 255, 80, 30, 20, 90]
-
计算平均值:(50+60+70+40+255+80+30+20+90)/9 = 85
-
用85替换原中心像素255
应用场景
-
快速平滑:需要简单快速平滑处理时
-
预处理:作为更复杂处理的预处理步骤
-
均匀区域处理:处理纹理较均匀的图像区域
高斯滤波、均值滤波与中值滤波的全面对比
基本性质对比
特性 | 高斯滤波 | 均值滤波 | 中值滤波 |
---|---|---|---|
滤波器类型 | 线性滤波器 | 线性滤波器 | 非线性滤波器 |
计算复杂度 | 中等(可分离优化) | 低 | 高(需要排序) |
权重分配 | 中心权重高,边缘权重低 | 均匀权重 | 无权重概念 |
归一化要求 | 需要 | 需要 | 不需要 |
去噪效果对比
噪声类型 | 高斯滤波表现 | 均值滤波表现 | 中值滤波表现 |
---|---|---|---|
高斯噪声 | 效果最好 | 效果较好 | 效果一般 |
椒盐噪声 | 效果较差 | 效果差 | 效果最好 |
脉冲噪声 | 效果差 | 效果差 | 效果极佳 |
边缘保持能力
边缘特性 | 高斯滤波 | 均值滤波 | 中值滤波 |
---|---|---|---|
边缘模糊程度 | 中等(σ越大越模糊) | 严重 | 最小 |
锐利边缘保持 | 较好 | 差 | 优秀 |
细节保留 | 中等 | 差 | 好 |
实际应用对比
高斯滤波最佳场景:
-
需要平滑但保留一定边缘
-
预处理步骤(如Canny边缘检测前)
-
光学系统产生的自然模糊建模
均值滤波适用场景:
-
快速简单平滑需求
-
计算资源有限的场景
-
均匀区域的噪声去除
中值滤波不可替代场景:
-
椒盐噪声去除(旧照片修复)
-
需要保留锐利边缘(医学影像)
-
脉冲噪声环境(工业检测)
参考文章: