请注意:笔记内容片面粗浅,请读者批判着阅读!
一、空间滤波的基本概念
空间滤波是通过对图像局部邻域内的像素进行数学运算来实现图像增强的技术。其核心思想是 “滑动窗口” 操作:将滤波器(模板)逐像素移动,计算邻域内像素与滤波器权重的组合结果,生成新的像素值。空间滤波器的别名:核(kernel)、空间掩膜(mask)、模板(template)和窗口(window)。
分类:
- 线性滤波:输出是邻域像素的线性组合(如均值滤波、高斯滤波)。
- 非线性滤波:输出基于邻域像素的非线性操作(如中值滤波、最大值滤波)。
数学表达:
对于图像 f ( x , y ) f(x,y) f(x,y) 和滤波器 w ( s , t ) w(s,t) w(s,t),滤波结果 g ( x , y ) g(x,y) g(x,y) 可表示为:
g ( x , y ) = ∑ s = − a a ∑ t = − b b w ( s , t ) ⋅ f ( x + s , y + t ) g(x,y) = \sum_{s=-a}^{a} \sum_{t=-b}^{b} w(s,t) \cdot f(x+s, y+t) g(x,y)=s=−a∑at=−b∑bw(s,t)⋅f(x+s,y+t)
其中 a = ( m − 1 ) / 2 a = (m-1)/2 a=(m−1)/2, b = ( n − 1 ) / 2 b = (n-1)/2 b=(n−1)/2, m × n m \times n m×n 为滤波器尺寸。
二、空间相关(Correlation)与卷积(Convolution)
1. 空间相关
- 定义:直接按滤波器模板的原始方向与图像进行逐点乘加运算,不需要旋转滤波器。
- 特点:
- 用于模板匹配、边缘检测等场景。
- 结果中滤波器的响应是位移的函数。
- 与离散单位冲激相关时,会得到滤波器的 翻转版本。
import numpy as np
from scipy.signal import correlate2d
# 定义图像和滤波器
image = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
kernel = np.array([[0, 1], [1, 0]])
# 执行相关操作(边界填充0)
corr_result = correlate2d(image, kernel, mode='same', boundary='fill')
print("相关结果:\n", corr_result)
结果打印:
相关结果:
[[ 6 8 6]
[12 14 9]
[ 8 9 0]]
2. 卷积
- 定义:先将滤波器旋转180°,再执行与相关相同的乘加运算。
- 特点:
- 满足交换律和结合律,是线性系统理论的核心操作。
- 与离散单位冲激卷积时,会得到滤波器的 原版拷贝。
import numpy as np
from scipy.signal import convolve2d
# 定义图像和滤波器
image = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
kernel = np.array([[0, 1], [1, 0]])
# 执行卷积操作(等效于旋转后的相关)
conv_result = convolve2d(image, kernel, mode='same', boundary='fill')
print("卷积结果:\n", conv_result)
结果打印:
卷积结果:
[[ 0 1 2]
[ 1 6 8]
[ 4 12 14]]
注意:当滤波器对称时(如高斯核),相关与卷积结果相同。
三、边界处理策略
由于滤波器移动时可能超出图像边界,需采用填充策略:
- 零填充(Zero-padding):外部区域补0。
- 镜像填充(Mirror):复制边界像素的镜像值。
- 重复填充(Replicate):复制最邻近的边界值。
四、应用实例:高斯滤波
高斯滤波是一种线性平滑滤波,通过加权平均抑制噪声。其核函数为:
w ( x , y ) = 1 2 π σ 2 e − x 2 + y 2 2 σ 2 w(x,y) = \frac{1}{2\pi\sigma^2} e^{-\frac{x^2+y^2}{2\sigma^2}} w(x,y)=2πσ21e−2σ2x2+y2
import numpy as np
from scipy.signal import convolve2d, correlate2d
# 定义高斯核生成函数
def gaussian_kernel(size, sigma=1):
kernel = np.zeros((size, size))
k = (size-1) // 2
for x in range(-k, k+1):
for y in range(-k, k+1):
kernel[x+k, y+k] = np.exp(-(x**2 + y**2)/(2*sigma**2))
return kernel / np.sum(kernel)
# 定义输入图像
image = np.array([[1, 2, 3],
[4, 5, 6],
[7, 8, 9]])
# 生成3x3高斯核
gauss_kernel = gaussian_kernel(3, sigma=1)
print("高斯核:\n", gauss_kernel)
# 使用卷积对图像进行高斯滤波
smoothed = convolve2d(image, gauss_kernel, mode='same')
print("卷积滤波后的图像:\n", smoothed)
corr_result = correlate2d(image, gauss_kernel, mode='same', boundary='fill')
print("相关结果:\n", corr_result)
总结:
- 高斯滤波通过加权平均的方式平滑图像,能够有效抑制噪声。
- 通过调整 sigma 参数,可以控制滤波器的平滑程度。
- 高斯核的对称性使得卷积和相关操作结果相同。
五、总结
- 相关与卷积的区别:卷积需旋转滤波器180°,两者在对称核下等效。
- 实践意义:
- 相关用于模式匹配(如边缘检测中的Sobel算子)。
- 卷积用于线性系统建模(如高斯模糊)。
- 边界处理:需根据场景选择策略,避免边缘失真。
实际效果对比:
- 相关操作适合需要保留方向信息的场景(如梯度计算)。
- 卷积操作更符合物理系统的响应特性(如光学成像)。