目录
这一节要说的东西只有内核,内容虽少,但是理解难度却不低。但是下一节就是边缘检测,把几个合在一起说未免太多了,所以把内核这一章单独拿出来说,推荐看了上一节的高斯滤波详细分析再来看这个。
在图像处理中,内核(kernel),也称为卷积核或滤波器,是一个小的矩阵或窗口,用于对图像中的像素进行数学运算。内核用于定义如何对图像中的每个像素及其周围的像素进行加权求和,从而实现平滑、锐化、边缘检测等操作。
1. 内核的基本概念
- 内核是一个二维矩阵,通常比图像要小,尺寸如 3×3, 5×5, 或 7×7 等。内核的每个元素都是一个权重,用于与图像中对应位置的像素值进行乘积运算。
- 卷积操作指的是内核矩阵在图像上逐像素滑动,计算每个像素的新值。每次计算时,内核会与图像的某一区域重叠,内核的元素与该区域的像素值相乘并求和,生成新像素值。
假设我们有一个 3×3 的内核
如果这个内核应用在图像的某个像素上,内核矩阵会覆盖该像素及其周围的 8 个像素。通过周围的权重计算出矩阵的中心像素的值。内核通过滑动到图像中的每个像素,重复这一操作,生成滤波后的图像。
当内核(kernel)在图像的边缘像素处进行计算时,由于内核的尺寸通常大于 1(如 3×3 或 5×5),内核可能会“溢出”图像的边缘,导致内核的一部分超出图像范围。因此,在处理图像边缘像素时,需要采取一些特殊策略来处理这种情况。这些策略统称为填充(padding)。
常见填充策略:
1.1 零填充(Zero Padding)
在图像的边缘添加 0 值像素,这样内核的计算能够正常进行。零填充会使得边缘的像素值减少,因为周围补充了许多 0 值。
- 优点:实现简单,计算高效。
- 缺点:边缘区域可能会被过多的 0 值影响,导致边缘模糊或变暗。
举例:如果你在一个 3×3 内核上应用零填充,对于位于图像边缘的像素,例如左上角的像素,其计算可能如下:
其中,I(x,y) 代表图像像素值,0 表示填充的边缘像素。
1.2 镜像填充(Reflect Padding)
通过镜像图像边缘的像素来填充,使得边缘像素“延伸”到外部区域。这种方式可以避免图像边缘出现突然的黑边或异常的值。
- 优点:保留图像边缘的连续性,使得内核不会受到过多异常值的影响。
- 缺点:对某些滤波器可能会引入小的边界效应。
举例:对于图像的左边缘像素,内核超出图像的部分会用左侧的相邻像素填充。
在这种情况下,I(0,0)(是10) 的左侧像素就会用 I(0,1)(镜像)(是20)的值来填充。
1.3 重复填充(Replicate Padding)
使用图像边缘的像素值进行扩展,将超出图像的部分填充为边缘像素本身的值。这种方式也能保留图像边缘的连续性。
- 优点:简单有效,避免引入过多新的信息。
- 缺点:边缘区域的像素会被过度复制,可能导致滤波结果中边缘部分的失真。
举例:对于一个 3×33×3 的内核,位于图像左上角的像素,计算过程如下:
I(0,0) 周围超出图像范围的像素都用它自己来填充。
1.4 包裹填充(Wrap Padding)
当内核溢出图像边缘时,从图像的另一边“包裹”取像素进行填充。这种方式类似于在一个“环”形空间中计算卷积,适合某些特殊的周期性图像处理任务。
- 优点:可以在某些周期性图像处理中保持边缘的连续性。
- 缺点:对普通图像不适用,容易引入伪影或噪声。
举例:如果内核在图像的左边缘超出,那么超出的部分会从图像的右边缘取像素进行填充:
N−1 是图像的最后一个像素坐标。
1.5 填充方式
- 零填充:适合快速计算,但可能导致边缘像素的值不准确。
- 镜像填充和重复填充:能更好地保留图像边缘的连续性,适合一般的图像处理任务。
- 包裹填充:适合处理具有周期性或循环结构的图像,但对普通图像可能会产生不理想的结果。
1.6 卷积神经网络中的填充
在深度学习中的卷积神经网络(CNN)也会遇到类似的问题。典型的 CNN 中会使用两种填充方式:
SAME 填充:即零填充,使得输出图像与输入图像保持相同的大小。
VALID 填充:不进行填充,因此输出图像的尺寸会比输入图像小。
2. 内核的工作原理
内核在图像上的操作通常包括以下几个步骤:
- 内核对齐:内核的中心与图像中的某个像素对齐,通常是一个 k×k 矩阵的中心像素。例如,对于 3×3 的内核,中心像素是第 2 行第 2 列的元素。这一点我上一节有说过,这边再说一次:
- 卷积核的 (0, 0) 对应图像的 (1, 1) 像素点。
- 卷积核的 (1, 1) 对应图像的 (2, 2) 像素点(这是卷积核的中心对齐图像的位置)。
- 卷积核的 (2, 2) 对应图像的 (3, 3) 像素点。
- 邻域操作:内核的每个元素会与图像中相应位置的像素值相乘。
- 加权求和:将所有乘积求和,结果作为内核中心像素的新值。
- 滑动内核:内核在图像上逐像素滑动,重复步骤 1-3 直到处理完所有像素,这个过程被称为卷积操作。
3. 内核的常见类型与应用
内核的类型和权重分布决定了它在图像处理中的用途。以下是几种常见内核及其对应的应用场景。
3.1 均值滤波内核
-
概念:均值滤波是一种简单的平滑滤波器,主要用于降低图像中的噪声。内核的每个元素都具有相同的值,即每个像素的贡献相等。对某个像素进行均值滤波时,取该像素及其邻域像素的平均值。
-
公式:对于一个 3×3 的均值滤波器:
-
应用:均值滤波主要用于图像平滑和噪声抑制。它可以去除一些高频噪声(如椒盐噪声),但由于所有像素的权重相同,图像的边缘和细节信息会丢失。
3.2 高斯模糊内核
-
概念:高斯模糊通过高斯分布函数分配权重,离中心像素越远,权重越小。因此,相比均值滤波,高斯模糊能够在平滑噪声的同时保留更多的边缘细节。
-
公式:高斯模糊内核是基于二维高斯函数生成的。一个 5×5 的高斯模糊内核可能如下:
-
应用:高斯模糊广泛用于图像去噪、图像平滑,以及作为边缘检测(如 Canny 边缘检测)的预处理步骤。
3.3 边缘检测内核
-
概念:边缘检测内核用于检测图像中的边缘,即图像中亮度变化较大的区域。边缘检测内核通常通过计算邻域内像素的梯度变化来识别图像中的边缘。
-
Sobel 滤波器:Sobel 滤波器是一种常用的边缘检测内核。水平(x 方向)的 Sobel 滤波器如下:
垂直(y 方向)的 Sobel 滤波器如下:
-
应用:Sobel 滤波器用于提取图像中的水平和垂直边缘。
3.4 锐化内核
-
概念:锐化内核用于增强图像的细节和边缘,增加图像的对比度。与平滑滤波器相反,锐化内核会使边缘和细节更加突出。
-
公式:一个常见的 3×3 锐化内核为:
-
应用:用于增强图像的清晰度,尤其适用于模糊图像的恢复或增强。
4. 内核大小的影响
- 内核大小直接影响图像处理的效果。较小的内核(如 3×3)主要用于微小的平滑或锐化效果,而较大的内核(如 7×7 或更大)则用于更明显的效果,如模糊或更强的去噪。
小内核
- 优点:小内核保留更多的图像细节,只对局部区域进行平滑或增强。
- 缺点:效果较弱,对于较大的噪声或细节不足的图像,作用不明显。
大内核
- 优点:大内核更适合处理大型图像噪声和需要较强模糊效果的图像。
- 缺点:会导致更多的图像细节丢失,可能使图像看起来过于模糊。
例如:
- 使用 3×3 高斯模糊内核对图像进行轻微模糊,保留细节。
- 使用 7×7 高斯模糊内核对图像进行更强的模糊,适合背景模糊等效果。
用过ps这种抠图软件的话应该对这个会比较熟悉。
5. 卷积操作的计算细节
卷积的数学操作是线性滤波中的基本过程。计算过程如下:
1.翻转内核:为了实现卷积运算,内核需要在应用之前进行翻转(通常是水平和垂直方向的翻转),这与数学定义的卷积一致。然而,在实际图像处理中,常常省略翻转这一步。
卷积操作最早来源于信号处理领域。在严格的数学定义中,卷积是一个涉及翻转和位移的操作。对于一维信号来说,卷积定义如下:
- x(t) 是输入信号;
- h(t) 是系统的响应(也叫脉冲响应或滤波器);
- y(t) 是系统对输入信号的响应;
- 是积分变量。
在这个公式中,h(t−τ) 代表对系统响应的时间翻转和平移。通过这种操作,当前时刻的输出 y(t) 可以通过过去的信号输入 x(τ) 和滤波器的倒置形式 h(t−τ) 之间的卷积来计算。
因此,时间翻转是为了确保滤波器在每个时刻“从过去到现在”逐步捕捉输入信号,最终计算出系统对当前时刻的响应。
打个比方:
假设你在用麦克风录制声音。在任何时刻,你的录音都是当前和过去的声音叠加产生的。你不可能预测未来的声音,所以你只能考虑过去和当前的声音对现在的影响。
- 卷积中的翻转相当于把滤波器(或者系统的特征)反过来,这样它能处理过去的信号,看看过去的输入是如何影响现在的输出。
- 也就是说,卷积中的翻转帮助我们计算一个系统(例如,声音录制设备)对之前时间输入的响应,确保计算结果符合实际物理意义。
举个更直观的例子:
假设你要计算一个系统对输入信号的响应,系统的响应是根据过去一段时间内的输入来决定的。比如说,系统对输入信号的反应可能是这样的:
- 1秒前的输入信号影响最大;
- 2秒前的输入信号影响稍小一些;
- 3秒前的输入影响更小。
这意味着,系统对信号的响应随着时间的推移逐渐变弱。为了让卷积操作能够准确计算这种影响,我们需要把滤波器(或系统响应)翻转过来。
在图像处理中,卷积就是把一个滤波器(比如模糊或锐化效果)应用到图像上。数学上,为了符合卷积的定义,我们先把滤波器翻转过来,这样就像是我们在做一个“反向匹配”,这个做法其实是从信号处理领域沿用过来的。
通过翻转滤波器,卷积操作确保每个像素和它周围的像素(邻域)按照卷积的数学规则进行计算。这个过程实现了图像处理中的许多效果,比如边缘检测、模糊处理等。
翻转的重要性:对于非对称内核来说,翻转会影响卷积结果;但对于对称内核或大多数图像处理任务,翻转可以安全地省略。因此,是否需要翻转取决于具体应用场景和内核的对称性。
为什么实际图像处理会省略翻转?
在大多数图像处理应用中,使用的内核通常是对称的。对称内核意味着内核矩阵沿水平和垂直方向翻转后结果与原矩阵相同,因此翻转操作没有实际意义。例如,常用的高斯模糊内核、均值滤波内核、拉普拉斯算子等,都是对称的。
翻转的目的是为了遵循数学上严格的卷积定义。简单理解,翻转让内核像是在图像的某个区域做一个“反向匹配”,确保卷积操作的准确性。
2.内核的滑动窗口操作:内核会在图像上逐像素滑动,并对每个像素及其邻域像素进行加权求和。边缘区域的处理可以通过填充(padding)来解决,即在图像边缘添加额外的像素(通常为 0 值),以便内核能够处理图像的所有像素。
3.结果赋值:卷积运算的结果是将新的像素值赋给内核中心对应的原图像位置。
6. 内核的扩展
除了常见的 3×3 或 5×5 内核之外,还有更复杂的内核设计用于更高级的图像处理任务,如:
- 自适应滤波:根据图像局部区域特性动态调整内核的权重。
- 多尺度卷积:使用不同大小的内核同时对图像进行卷积,以提取不同尺度的图像特征(如在深度学习中的卷积神经网络(CNN)中)。