pg下载官方版打开即玩v1022.速装上线体验.中国 讨论卷积在数字图像处理中的应用

频道:生活应用 日期: 浏览:2

卷积于信号处理范畴有着极为广泛的运用,并且存在着严谨的物理以及数学定义。本文单单探讨卷积在数字图像处理方面的应用。

在数字图像处理这个领域当中,存在一种基本的处理方式,即线性滤波。至于需要进行处理的平面数字图像,则能够被视作为一个规模颇大的矩阵。而图像里的每一个像素,都与矩阵的每一个元素彼此对应。假定我们所探讨平面的分辨率为1024 * 768,那么与之相对应的大矩阵的行数便等于1024,列数则等于768。

对于滤波而言,所使用的是一个滤波器小矩阵,这个小矩阵也被称作卷积核,滤波器小矩阵通常是个方阵,方阵意味着行数跟列数是相同的,就像常见的用于边缘检测的 Sobel 算子,其就是两个 3*3 的小矩阵。

对于大矩阵里的每个像素,要进行滤波。计算它周围像素与滤波器矩阵相向位置元素的乘积,之后把这些结果统统加在一起,最后所得的值当作该像素的新值,如此便完成了一回滤波。

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

图像卷积计算示意图:

那一种操作,是把图像大矩阵以及滤波小矩阵对应位置的元素,进行相乘,之后再求和,这种操作就被称作卷积(Convolution),又或者是协相关(Correlation)。

协相关这个玩意儿,也就是Correlation啦,和卷积也就是Convolution很有点类同之处,二者之间唯一存在的不同之处在于,卷积在进行计算之前是需要把卷积核进行翻转处理的,然而协相关并不需要进行这样的翻转操作,就是这样的情况了。

以 Sobel 算子为例

Sobel 算子,也就是 Sobel 滤波,它是一组两个 3 × 3 的矩阵 ,主要用于计算图像里某一点在横向以及纵向上的梯度。看过许多网络上讲解这 Sobel 算子的文章 ,能发现人们常常会将它的横向梯度矩阵和纵向梯度矩阵搞混。这或许跟 Sobel 算子在其两个主要应用场景里的不同用法存在关联。

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

此地是以Wiki资料作为基准的,Sobel算子存在有两个滤波矩阵,分别是Gx以及Gy ,Gx的用途是用以计算横向的梯度,Gy的作用是用来计算纵向的梯度,下面所展示的图便是具体的滤波器了。

• 留意哦:在此处罗列出来的这般两个梯度矩阵,它们是对应着横向依据从左朝着右的方向,纵向按照从上向着下的方向的坐标轴的,也就是呈现出这样一种情形:

原点 O ------->  x轴 | | | V  y轴

Sobel 算子的用途

它能够被用以针对图像开展边缘检测,亦或是用以算出某一像素点的法线向量,在此需要留意的是:

在进行边缘检测这个操作的时候,Gx 是被用来检测纵向方面边的边缘情况的,而 Gy 则是被用于检测横向方面边的边缘情形的。

在进行法线计算这个工作的时候:用于算法线横向偏移的是Gx ,用于算法线纵向偏移的则是 Gy。

计算展开

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

那么用 Gx 计算展开为:

横向新的值等于,负一乘以,加上,负二乘以,加上,负一乘以,加上,一乘以,加上,二乘以,加上,一乘以。

用 Gy 计算展开为:

纵向新的值等于,负一乘以,加上,负二乘以,加上,负一乘以,加上,一乘以,加上,二乘以,加上pg下载,一乘以。

之前提到过,进行图像卷积操作的时候是需要使卷积核进行翻转的,可是我们上面所进行的计算流程并没有进行显式的翻转操作,这实际是由于Sobel算子围绕中心元素旋转180度之后就变成和最初的时候相同的样子了。然而并不是所有卷积核都是如此,有一些卷积核在翻转之后就会出现变化,接下来我们会详尽地阐述究竟该如何去翻转卷积核。

卷积核翻转

像之前所讲的那样,对于图像卷积予以计算时,要先开展卷积核的翻转操作,这翻转操作具体是指围绕卷积核的中心位置去进行足足180度的旋转动作,当然啦,也能够分开沿着两条对角线各自进行一次翻转,或者是同时针对行与列展开翻转行径,而这三种不同的处理方式最终都能够得到一模一样的效果,是这样的情况没错的。

对于第一种卷积核翻转方式,有一种简易的演示办法是,将卷积核书写于一张纸上,借助笔尖固定住中心元素,进行一百八十度的旋转,这般便能看到翻转之后的卷积核了。

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

假设原始卷积核为:

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

先沿着处在左下角到右上角方向的对角线进行翻转,此翻转的具体表现是,a与i相互交换位置,b和f彼此交换位置pg下载麻将胡了安卓专属特惠.安卓应用版本.中国,d以及h进行位置的互换,最终所得到的结果是:

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

方法3:同时翻转行和列

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

还是将卷积核的行列一块儿翻转,我们能够先翻转行,把a、b、c跟g、h、i变换位置,结果进而为:

再次进行翻转列的操作,要将g、d、a和i、f、c相互交换位置,所得到的结果如下:

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

留意:在此处需与矩阵乘法区分开来,此处仅仅是借用了矩阵符号,实际上进行的是对应项相互相乘,并再次求和。

图像边缘像素的处理

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

在左上角位置的那像素点,其周边仅仅是右侧以及下方存在有相邻的像素,当遭遇这样状况时,就得去补全它所欠缺的相邻像素,关于补全的具体方法,可参照下一节的代码。

用GPU进行图像卷积

若在CPU之上达成图像卷积算法,需开展4重循环,效率颇为不佳,故而我们尝试将这些卷积计算放置于GPU之上,借助shader予以实现,结果发觉性能相当出色pg下载,并且鉴于顶点着色器以及片段着色器实质就是一种循环结构,我们甚而无需显式的循环,代码也明晰了许多。

图像卷积于代码里的实际运用,下面有一个以GLSL形式呈现的着色器,它能够依据纹理贴图去生成相对应的法线图。

网友留言(0)

评论

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。