SciPy - 滤波与边缘检测
SciPy 中的滤波是什么?
图像处理中的滤波 是一种基本技术,用于多种任务,如降噪、图像增强和特征提取。图像滤波器通过根据邻域像素值修改或处理图像的像素值,或应用数学变换来工作。
In SciPy 中,可以对图像应用滤波器来执行平滑、锐化和边缘检测等操作。在本章中,我们将了解关键概念、滤波器类型以及如何使用 SciPy 实现滤波器。
什么是边缘检测?
边缘检测 是图像处理中的一项关键技术,用于识别图像中像素强度急剧变化的点,这些点通常对应于图像不同区域之间的边界或过渡。从 SciPy 图像处理的视角来看,边缘检测通常通过使用滤波器来实现,这些滤波器突出显示强度快速变化的区域,通常通过计算梯度或二阶导数来完成。
In SciPy 中,可以使用多种技术进行边缘检测,如 Sobel、Prewitt、Scharr、Roberts 和 Laplacian 滤波器。这些滤波器应用于图像,以突出显示具有显著强度梯度的区域,这些区域通常对应于边缘。
在深入了解滤波和边缘检测技术之前,我们需要了解一些滤波的基本概念,如下所示 −
Kernel
kernel 也称为 mask、filter 或 convolution matrix,它是一个小型的、矩阵形状的数值权重集合,用于图像滤波。它通过执行数学运算(即通常是 kernel 与图像小区域之间的卷积)应用于图像。此操作根据 kernel 的用途为每个像素生成新值。
对于 kernel K 和图像 I,在像素 (x,y) 处的操作可以表示如下 −
其中 −
- I'(x,y): 位置 (x,y) 处的输出像素值。
- K(i,j): 偏移 (i,j) 处的 kernel 权重。
- n,m: kernel 宽度和高度的一半,例如,对于 3×3 kernel,n=m=1。
Kernel 在滤波中的作用
Kernel 被设计用于执行特定操作,如下所示 −
- 模糊 (Blurring): 减少噪声并平滑图像。
- 边缘检测 (Edge Detection): 突出边界和过渡区域。
- 增强细节 (Enhancing Details): 锐化图像的精细特征。
Kernel 的关键属性
以下是 SciPy 图像处理中 Kernel 的关键属性 −
- 对称性 (Symmetry): 某些 kernel 如 Gaussian 是对称的,确保在所有方向上产生相等效果。
- 归一化 (Normalization): 像均值滤波器这样的 kernel 通常会归一化值,即除以权重的总和,以保持强度平衡。
- 边缘效果 (Edge Effects): 处理图像边缘(即 kernel 延伸超出图像边界的情况)需要使用填充技术,如零填充或反射。
Kernel 类型
以下是不同的 kernel 类型,它们决定了 kernel 对图像的影响效果。
- 平滑 Kernel (Smoothing Kernels): 这些 kernel 通过平均相邻像素的强度来减少噪声并平滑图像。
- 锐化 Kernel (Sharpening Kernels): 增强图像中的精细细节和边缘。
- 边缘检测 Kernel (Edge Detection Kernels): 这些 kernel 通过识别高强度梯度区域来查找图像中的边缘。
- 浮雕 Kernel (Embossing Kernels): 突出边缘并为图像提供 3D 效果。
- 梯度 Kernel (Gradient Kernels): 此类 kernel 用于计算特定方向上的强度梯度。
- 专用 Kernel (Specialized Kernels): 专用 kernel 用于聚焦圆形区域或模拟特定方向上的运动模糊。
- 自定义 Kernel (custom Kernels): 通过自定义权重可以为特定用途设计 kernel。
卷积 (Convolution)
在图像处理中,convolution 是一种数学运算,用于将 filter 或 kernel 应用于图像。它涉及将 kernel 在图像上滑动,对 kernel 下方的图像像素执行逐元素乘法,然后对结果求和以获得新像素值。
在 SciPy 中,可以使用 scipy.ndimage.convolve() 或 scipy.signal.convolve2d() 函数进行卷积。这些函数允许我们将 kernel 应用于图像、时间序列或多维数据。
图像 I 和 kernel K 之间的卷积运算定义如下 −
其中 −
- I 是输入图像。
- K 是 kernel 或 filter。
- I' 是输出图像或卷积结果。
- Kernel 在图像上滑动,每个位置的逐元素乘法之和给出结果像素值。
卷积的关键属性
以下属性使卷积成为图像和信号处理中一种多功能且强大的运算 −
- 交换性 (Commutativity): 卷积顺序无关,表现为 I*K = K*I。
- 结合性 (Associativity): 卷积的分组无关,可表示为 I*(K*L) = (I*K)*L。
- 分配性 (Distributivity): 卷积对加法分配,可表示为 I*(K+L) = (I*K)+(I*L)。
- 单位元 (Identity Element): 单位 kernel(例如中心为 1、其他地方为 0 的 kernel)在卷积时不会改变图像。
- 位移不变性 (Shift Invariance): 卷积不受图像位移影响。卷积前后位移图像会得到相同结果。
- 线性 (Linearity): 卷积是线性的,因此缩放图像或 kernel 会相应缩放结果。
- 可分离性 (Separable): 如果 2D kernel 可以分离为两个 1D kernel,则可以通过顺序应用 1D kernel 更高效地进行卷积。
滤波器类型
滤波器是图像处理中用于增强、转换或从图像中提取特征的关键工具。有不同类型的滤波器,针对特定效果设计,这些效果取决于图像处理任务的预期结果。以下是滤波器的类型 −
- 低通滤波器(平滑滤波器)
- 高通滤波器
- 形态学滤波器