图像卷积详细解释 常用卷积核解释说明

神经网络中的卷积层,它的原理就来源于图像卷积

概述

卷积在信号处理领域有极其广泛的应用, 也有严格的物理和数学定义. 本文只讨论卷积在数字图像处理中的应用.

在数字图像处理中, 有一种基本的处理方法:线性滤波. 待处理的平面数字图像可被看做一个大矩阵, 图像的每个像素对应着矩阵的每个元素, 假设我们平面的分辨率是 1024*768, 那么对应的大矩阵的行数1024列数=768.

用于滤波的是一个滤波器小矩阵(也叫卷积核), 滤波器小矩阵一般是个方阵, 也就是 行数 和 列数 相同, 比如常见的用于边缘检测的 Sobel 算子 就是两个 3*3 的小矩阵.

进行滤波就是对于大矩阵中的每个像素, 计算它周围像素和滤波器矩阵对应位置元素的乘积, 然后把结果相加到一起, 最终得到的值就作为该像素的新值, 这样就完成了一次滤波.

上面的处理过程可以参考这个示意图:

图像卷积计算示意图:

对图像大矩阵和滤波小矩阵对应位置元素相乘再求和的操作就叫卷积(Convolution)或协相关(Correlation).

协相关(Correlation)和卷积(Convolution)很类似, 两者唯一的差别就是卷积在计算前需要翻转卷积核, 而协相关则不需要翻转.

以 Sobel 算子为例

Sobel 算子 也叫 Sobel 滤波, 是两个 3*3 的矩阵, 主要用来计算图像中某一点在横向/纵向上的梯度, 看了不少网络上讲解 Sobel 算子 的文章, 发现人们常常把它的横向梯度矩阵和纵向梯度矩阵混淆. 这可能与 Sobel 算子 在它的两个主要应用场景中的不同用法有关.

Sobel 算子的两个梯度矩阵: Gx 和 Gy

这里以 Wiki 资料为准, Sobel 算子 有两个滤波矩阵: Gx 和 GyGx 用来计算横向的梯度, Gy 用来计算纵向的梯度, 下图就是具体的滤波器:

 

  • 注意:这里列出的这两个梯度矩阵对应于横向从左到右, 纵向从上到下的坐标轴, 也就是这种:
原点
O ------->  x轴
|
|
|
V  y轴

Sobel 算子的用途

它可以用来对图像进行边缘检测, 或者用来计算某个像素点的法线向量. 这里需要注意的是:

  • 边缘检测时: Gx 用于检测纵向边缘, Gy 用于检测横向边缘.
  • 计算法线时: Gx 用于计算法线的横向偏移, Gy 用于计算法线的纵向偏移.

计算展开

假设待处理图像的某个像素点周围的像素如下:

左上右上
中心像素
左下右下

那么用 Gx 计算展开为:

横向新值 = (-1)*[左上] + (-2)*[左] + (-1)*[左下] + 1*[右上] + 2*[右] + 1*[右下]

用 Gy 计算展开为:

纵向新值 = (-1)*[左上] + (-2)*[上] + (-1)*[右] + 1*[左下] + 2*[下] + 1*[右下]

前面说过, 做图像卷积时需要翻转卷积核, 但是我们上面的计算过程没有显式翻转, 这是因为 Sobel 算子 绕中心元素旋转 180 度后跟原来一样. 不过有些 卷积核 翻转后就变了, 下面我们详细说明如何翻转卷积核.

卷积核翻转

前面说过, 图像卷积计算, 需要先翻转卷积核, 也就是绕卷积核中心旋转 180度, 也可以分别沿两条对角线翻转两次, 还可以同时翻转行和列, 这3种处理都可以得到同样的结果.

对于第一种卷积核翻转方法, 一个简单的演示方法是把卷积核写在一张纸上, 用笔尖固定住中心元素, 旋转 180 度, 就看到翻转后的卷积核了.

下面演示后两种翻转方法, 示例如下:

假设原始卷积核为:

abc
def
ghi

方法2:沿两条对角线分别翻转两次

先沿左下角到右上角的对角线翻转, 也就是 aibfdh交换位置, 结果为:

ifc
heb
gda

再沿左上角到右下角的对角线翻转, 最终用于计算的卷积核为:

ihg
fed
cba

方法3:同时翻转行和列

在 Wiki 中对这种翻转的描述:

convolution is the process of flipping both the rows and columns of the kernel and then multiplying locationally similar entries and summing.

也是把卷积核的行列同时翻转, 我们可以先翻转行, 把 a b c跟 g h i 互换位置, 结果为:

ghi
def
abc

再翻转列, 把 g d a 和 i f c 互换位置, 结果为:

ihg
fed
cba

在 Wiki 中有一个计算展开式, 也说明了这种翻转:

 

  • 注意:这里要跟矩阵乘法区分开, 这里只是借用了矩阵符号, 实际做的是对应项相乘, 再求和.

图像边缘像素的处理

以上都默认待处理的像素点周围都有像素, 但是实际上图像边缘的像素点周围的像素就不完整, 比如顶部的像素在它上方就没有像素点了, 而图像的四个角的像素点的相邻像素更少, 我们以一个图像矩阵为例:

左上角... ...右上角
...............
左侧.........右侧
...............
左下角... ...右下角

位于左上角的像素点的周围就只有右侧和下方有相邻像素, 遇到这种情况, 就需要补全它所缺少的相邻像素,就是网络中的padding操作;

时域卷积 = 频域相乘

时域卷积 = 频域相乘

时域卷积 = 频域相乘

 

不同卷积核下卷积意义

我们经常能看到的,平滑,模糊,去燥,锐化,边缘提取等等工作,其实都可以通过卷积操作来完成,下面我们一一举例说明一下: 
(1)一个没有任何作用的卷积核: 
这里写图片描述 
将原像素中间像素值乘1,其余全部乘0,显然像素值不会发生任何变化。 
(2)平滑均值滤波: 
选择卷积核: 
这里写图片描述 
该卷积核的作用在于取九个值的平均值代替中间像素值,所以起到的平滑的效果: 
这里写图片描述 
这里写图片描述 
(3)高斯平滑: 
卷积核: 
这里写图片描述 
高斯平滑水平和垂直方向呈现高斯分布,更突出了中心点在像素平滑后的权重,相比于均值滤波而言,有着更好的平滑效果。 
这里写图片描述 
(4)图像锐化: 
卷积核: 
这里写图片描述 
该卷积利用的其实是图像中的边缘信息有着比周围像素更高的对比度,而经过卷积之后进一步增强了这种对比度,从而使图像显得棱角分明、画面清晰,起到锐化图像的效果。 
这里写图片描述 
除了上述卷积核,边缘锐化还可以选择: 
这里写图片描述 
(5)梯度Prewitt: 
水平梯度: 
这里写图片描述 
这里写图片描述 
垂直梯度: 
这里写图片描述 
这里写图片描述

梯度Prewitt卷积核与Soble卷积核的选定是类似的,都是对水平边缘或垂直边缘有比较好的检测效果。

(6)Soble边缘检测: 
Soble与上述卷积核不同之处在于,Soble更强调了和边缘相邻的像素点对边缘的影响。 
水平梯度: 
这里写图片描述 
这里写图片描述 
垂直梯度: 
这里写图片描述 
这里写图片描述

以上的水平边缘与垂直边缘检测问题可以参考:Soble算子水平和垂直方向导数问题

(7)梯度Laplacian:

卷积核: 
这里写图片描述

这里写图片描述

Laplacian也是一种锐化方法,同时也可以做边缘检测,而且边缘检测的应用中并不局限于水平方向或垂直方向,这是Laplacian与soble的区别。下面这张图可以很好的表征出二者的区别:来源于OpenCV官方文档 
这里写图片描述

卷积的一些作用还参考了网上的一些解释,罗列如下:

(1)

(2)

一种是滤波,比如最简单的高斯模板,就是把模板内像素乘以不同的权值然后加起来作为模板的中心像素值,如果模板取值全为1,就是滑动平均;如果模板取值为高斯,就是加权滑动平均,权重是中间高,四周低,在频率上理解就是低通滤波器;如果模板取值为一些边缘检测的模板,结果就是模板左边的像素减右边的像素,或者右边的减左边的,得到的就是图像梯度,方向不同代表不同方向的边缘;

另一种理解是投影,因为当前模板内部图像和模板的相乘累加操作就是图像局部patch和模板的内积操作,如果把patch和模板拉直,拉直的向量看成是向量空间中的向量,那么这个过程就是patch向模板方向上的投影,一幅图像和一个模板卷积,得到的结果就是图像各个patch在这个方向上的response map或者feature map;如果这样的模板有一组,我们可以把这一组看成一组基,得到的一组feature map就是原图像在这组基上的投影。常见的如用一组Garbor滤波器提取图像的特征,以及卷积神经网络中的第一层,图像在各个卷积核上的投影。

  • 22
    点赞
  • 107
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: nn.conv2d 平均卷积核(average kernel)是卷积神经网络的一种卷积操作,它在输入特征图上应用一个平均卷积核来计算输出特征图。 平均卷积核通常是一个维度为(K,K,Cin,Cout)的四维张量,其K是卷积核大小,Cin是输入特征图的通道数,Cout是输出特征图的通道数。平均卷积核的作用是在每个位置上对相应感受野内的像素值进行求平均操作,并将结果作为输出特征图的相应位置的像素值。 平均卷积核的应用场景多种多样。例如,在图像处理任务常用于模糊操作,可以平滑图像,减少图像的细节和噪声。此外,平均卷积核还可以用于特征降维,通过将原始特征图进行平均池化操作,减少特征图的维度,提取输入特征图的主要信息。 在使用平均卷积核时,可以通过调整卷积核大小(K),输入特征图的通道数(Cin)和输出特征图的通道数(Cout)来控制输出特征图的大小和特征提取能力。一般来说,较大的平均卷积核可以更好地模糊图像或降低特征图的维度,而较小的平均卷积核则可以保留更多的细节信息。 总而言之,nn.conv2d 平均卷积核是一种常用卷积操作,可以平滑图像、降低特征维度,并在各种图像处理和特征提取任务发挥重要作用。 ### 回答2: nn.conv2d 平均卷积核是一种卷积操作的特殊类型,它的作用是对输入数据进行平均池化操作。 平均卷积核的目的是通过取卷积窗口所有元素的平均值来降低数据的维度,并减少空间尺寸。在卷积神经网络,常常使用平均卷积核来减少特征图的尺寸,以便降低计算复杂度并提高模型的效率。 平均卷积核大小通常是一个正方形或长方形的矩阵,以窗口大小为单位,它可以在二维矩阵的每个位置进行移动并与输入数据进行卷积操作。在卷积操作,平均卷积核的每个元素都采用相同的权重,即权重全部设置为 1/n,其 n 为卷积核的总元素个数。 平均卷积核的主要优点是可以有效地降低特征图的尺寸,从而减少计算量和内存消耗。它可以帮助网络快速捕捉到特征的整体信息,并在保持重要特征的前提下减小特征图的空间维度。然而,由于平均卷积核具有相同的权重,可能会导致模糊化的结果,因此在某些任务可能不适用。 综上所述,nn.conv2d 平均卷积核是一种在卷积神经网络用于降低特征图尺寸和提高计算效率的卷积操作。它通过取卷积窗口元素的平均值,帮助网络捕捉到特征的整体信息,并减小特征图的空间维度。然而,也需要根据具体任务的需要来选择是否使用平均卷积核。 ### 回答3: nn.conv2d 平均卷积核是一种常用卷积操作,主要用于图像处理和深度学习卷积神经网络。它的功能是对输入的图像或特征进行平均池化,从而减少图像的维度和特征的数量。 平均卷积核通常是一个正方形的矩阵大小为n x n,其n是一个正整数。它的每个元素值都是1/n^2,表示权重均等,即对于输入图像或特征的每个像素或单元素特征,平均卷积核会分别在其周围的n x n邻域内计算平均值。 具体的操作是,平均卷积核将依次在图像或特征的每个位置上滑动进行卷积计算,并将计算得到的邻域内像素或特征的平均值作为输出结果。因此,该操作能有效地降低图像或特征的维度,减少冗余信息的同时保留主要特征。 平均卷积核的应用非常广泛,比如在图像处理用于平滑图像、去除噪声和降低图像的细节等;在深度学习,它通常与其他卷积层和激活函数结合使用,用于提取图像或特征的低级语义信息。 总而言之,nn.conv2d 平均卷积核是一种常见的卷积操作,通过对输入的图像或特征进行平均池化来减少维度和保留主要特征。它在图像处理和深度学习有着广泛的应用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值