图像卷积与滤波参考资料:

参考资料:

1.卷积的基本概念

首先,我们有一个二维的滤波器矩阵(有个高大上的名字叫卷积核)和一个要处理的二维图像。然后,对于图像的每一个像素点,计算它的邻域像素和滤波器矩阵的对应元素的乘积,然后加起来,作为该像素位置的值。这样就完成了滤波过程。 注意:卷积和协相关的差别是,卷积需要先对滤波矩阵进行180的翻转,但如果矩阵是对称的,那么两者就没有什么差别了。

滤波操作示意图

对于滤波器,也有一定的规则要求:

  1. 滤波器的大小应该是奇数,这样它才有一个中心,例如3x3,5x5或者7x7。有中心了,也有了半径的称呼,例如5x5大小的核的半径就是2。
  2. 滤波器矩阵所有的元素之和应该要等于1,这是为了保证滤波前后图像的亮度保持不变。当然了,这不是硬性要求了。
  3. 如果滤波器矩阵所有元素之和大于1,那么滤波后的图像就会比原图像更亮,反之,如果小于1,那么得到的图像就会变暗。如果和为0,图像不会变黑,但也会非常暗。
  4. 对于滤波后的结构,可能会出现负数或者大于255的数值。对这种情况,我们将他们直接截断到0和255之间即可。对于负数,也可以取绝对值。

2.各个卷积核的使用效果

2.1 啥也不做

啥也不做的卷积核示例

2.2 图像锐化滤波器(Sharpness Filter)

图像的锐化和边缘检测很像,首先找到边缘,然后把边缘加到原来的图像上面,这样就强化了图像的边缘,使图像看起来更加锐利了。这两者操作统一起来就是锐化滤波器了,也就是在边缘检测滤波器的基础上,再在中心的位置加1,这样滤波后的图像就会和原始的图像具有同样的亮度了,但是会更加锐利。

我们把核加大,就可以得到更加精细的锐化效果

另外,下面的滤波器会更强调边缘:

主要是强调图像的细节。最简单的3x3的锐化滤波器如下:

实际上是计算当前点和周围点的差别,然后将这个差别加到原来的位置上。另外,中间点的权值要比所有的权值和大于1,意味着这个像素要保持原来的值。

2.3 边缘检测(Edge Detection)

我们要找水平的边缘。需要注意的是,这里矩阵的元素和是0,所以滤波后的图像会很暗(数字图像中,255对应纯白,0对应纯黑),只有边缘的地方是有亮度的。

为什么这个滤波器可以寻找到水平边缘呢?因为用这个滤波器卷积相当于求导的离散版本:你将当前的像素值减去前一个像素值,这样你就可以得到这个函数在这两个位置的差别或者斜率。下面的滤波器可以找到垂直方向的边缘,这里像素上和下的像素值都使用:

再下面这个滤波器可以找到45度的边缘:取-2不为了什么,只是为了让矩阵的元素和为0而已。

那下面这个滤波器就可以检测所有方向的边缘:

为了检测边缘,我们需要在图像对应的方向计算梯度。用下面的卷积核来卷积图像,就可以了。但在实际中,这种简单的方法会把噪声也放大了。另外,需要注意的是,矩阵所有的值加起来要是0.

2.4 浮雕(Embossing Filter)

简单看一下实现浮雕效果所使用的卷积核: 浮雕滤波器可以给图像一种3D阴影的效果。只要将中心一边的像素减去另一边的像素就可以了。这时候,像素值有可能是负数,我们将负数当成阴影,将正数当成光,然后我们对结果图像加上128的偏移。这时候,图像大部分就变成灰色了。 下面是45度的浮雕滤波器

我们只要加大滤波器,就可以得到更加夸张的效果了

2.5 均值模糊(Box Filter)

我们可以将当前像素和它的四邻域的像素一起取平均,然后再除以5,或者直接在滤波器的5个地方(注意:图中卷积核中心写错了,应该是0.2)取0.2的值即可,如下图:

可以看到,这个模糊还是比较温柔的,我们可以把滤波器变大,这样就会变得粗暴了:注意要将和再除以13.

所以,如果你想要更模糊的效果,加大滤波器的大小即可。或者对图像应用多次模糊也可以。

2.6 高斯模糊(Gaussian Blur)

均值模糊很简单,但不是很平滑。高斯模糊就有这个优点,所以被广泛用在图像降噪上。特别是在边缘检测之前,都会用来移除细节。高斯滤波器是一个低通滤波器。

高斯模糊卷积核

2.7 运动模糊(Motion Blur)

简单看一下实现浮雕效果所使用的卷积核: 运动模糊可以通过只在一个方向模糊达到,例如下面9x9的运动模糊滤波器。注意,求和结果要除以9。

这个效果就好像,摄像机是从左上角移动的右下角。

3.卷积的计算

对图像处理而言,存在两大类的方法:空域处理和频域处理!空域处理是指直接对原始的像素空间进行计算,频率处理是指先对图像变换到频域,再做滤波等处理。

3.1 空域计算-直接2D卷积

  • 计算方法: 直接2D卷积就是一开始说的那样,对于图像的每一个像素点,计算它的邻域像素和滤波器矩阵的对应元素的乘积,然后加起来,作为该像素位置的值。

直接的实现也称为暴力实现brute force,因为它严格按照定义来实现,没有任何优化。当然了,在并行实现里面,它也是比较灵活的。另外,也存在一个优化版本,如果我们的kernel是separable可分的,那么就可以得到一个快5倍左右的卷积方法。

  • 边界处理 那卷积核遇到图像边缘怎么办?例如图像顶部的像素,它的上面已经没有像素了,那么它的值如何计算?目前有四种主流的处理方法,我们用一维卷积和均值滤波来说明下。 我们在1D图像中,用每个像素和它的二邻域的平均值来取代它的值。假设我们有个1D的图像I是这样的:

对非图像边界的像素的操作比较简单。假设我们对I的第四个像素3做局部平均。也就是我们用2,3和7做平均,来取代这个位置的像素值。也就是,平均会产生一副新的图像J,这个图像在相同位置J (4) = (I(3)+I(4)+I(5))/3 = (2+3+7)/3 = 4。同样,我们可以得到J(3) = (I(2)+I(3)+I(4))/3 =(4+2+3)/3 = 3。需要注意的是,新图像的每个像素都取决于旧的图像,在计算J (4)的时候用J (3)是不对的,而是用I(3),I(4)和I(5)。所以每个像素都是它和它邻域两个像素的平均。平均是线性的操作,因为每个新的像素都是旧像素的线性组合。 对卷积,也有必须要考虑的情况是,在图像边界的时候,怎么办?J(1)的值应该是什么?它取决于I(0),I(1)和I(2)。但是我们没有I(0)呀!图像左边没有值了。有四种方式来处理这个问题:

方法一:想象I是无限长的图像的一部分,除了我们给定值的部分,其他部分的像素值都是0。在这种情况下,I(0)=0。所以J(1) = (I(0) + I(1) + I(2))/3 = (0 + 5 + 4)/3= 3. 同样,J(10) = (I(9)+I(10)+I(11))/3 = (3+ 6 + 0)/3 = 3.

方法二:想象I是无限图像的一部分。但没有指定的部分是用图像边界的值进行拓展。在我们的例子中,因为图像I最左边的值I(1)=5,所以它左边的所有值,我们都认为是5 。而图像右边的所有的值,我们都认为和右边界的值I(10)一样,都是6。这时候J(1) = (I(0) + I(1) + I(2))/3 = (5 + 5 + 4)/3= 14/3. 而J(10) = (I(9)+I(10)+I(11))/3 = (3 + 6 + 6)/3 = 5。

方法三:认为图像是周期性的。也就是I不断的重复。周期就是I的长度。在我们这里,I(0)和I(10)的值就是一样的,I(11)的值和I(1)的值也是一样的。所以J(1) = (I(0) + I(1) + I(2))/3= (I(10) + I(1)+ I(2))/3 = (6 + 5 + 4)/3 = 5 。

3.2 频域计算-快速傅里叶变换FFT卷积

后面的部分还没学习,详见:http://blog.csdn.net/zouxy09/article/details/49080029

4.图像滤波

4.1 图像滤波的目的

滤波就是要去除没用的信息,保留有用的信息,可能是低频,也可能是高频

4.2 图像的滤波方法

图像的滤波方法很多,主要可以分为频率域法空间域法两大类。频率域法的处理是在图像的某种变换域内,对图像的变换系数值进行运算,然后通过逆变换获得增强图像。这是一种间接的图像滤波方法。空间滤波方法是一类直接的滤波方法,它在处理图像时直接对图像灰度作运算。

  • 频率域滤波 将图像从空间或时间域转换到频率域,再利用变换系数反映某些图像特征的性质进行图像滤波。 傅立叶变换是一种常用的变换。在傅立叶变换域,频谱的直流分量正比于图像的平均亮度,噪声对应于频率较高的区域,图像实体位于频率较低的区域。图像在变换具有的这些内在特性可被用于图像滤波。可以构造一个低通滤波器,使低频分量顺利通过而有效地阻于高频分量,即可滤除图像的噪声,再经过反变换来取得平滑的图像。

低通的数学表达式如下所示:

F(u,v)表示原图的在傅里叶域的图像 H(u,v)表示传递函数(即低通滤波器) G(u,v)表示经过低通滤波的F(u,v)


选择适当的传递函数H (u, v)对频率域低通滤波关系重大。常用的传递函数有梯形函数指数函数巴特沃思函数等。 频域常用的几种低通滤波器为:理想低通滤波器(Ideal circular Iow-passfilter)巴特沃思(Butterworth)低通滤波器指数低通滤波器梯形低通滤波器。这些低通滤波器,都能在图像内有噪声干扰成分时起到改善的作用。

  • 平面空间域滤波

平面空间域滤波法主要分为两类:

  1. 拟合图像的方法,包括n阶多项式拟合、离散正交多项式拟合、二次曲面拟合等
  2. 平滑图像的方法,包括领域平均法、中值滤波法、梯度倒数加权法、选择式掩模法等

平面空间域滤波主要使用两种滤波器:

  1. 高通滤波器:边缘提取与增强。边缘区域的灰度变换加大,也就是频率较高。所以,对于高通滤波,边缘部分将被保留,非边缘部分将被过滤
  2. 低通滤波:将会是边缘部分变得平滑。注意:高斯滤波是一种线性平滑滤波,即低通滤波,适用于消除高斯噪声。 常用的高斯模板有如下几种形式:

高斯模板中的参数是通过高斯函数计算出来的。计算高斯模板参数时,通过如下公式:

x的平方和y的平方分别表示的是邻域内其他像素与邻域内中心像素的距离,Sigmma代表的是标准差。


实验效果图:(后面补)

常见的低通滤波实验效果图

线性与非线性滤波

  • 线性滤波: 线性滤波器的原始数据与滤波结果是一种算术运算,即用加减乘除等运算实现,如均值滤波器(模板内像素灰度值的平均值)高斯滤波器(高斯加权平均值)等。由于线性滤波器是算术运算,有固定的模板,因此滤波器的转移函数是可以确定并且是唯一的(转移函数即模板的傅里叶变换)。
  • 非线性滤波: 非线性滤波器的原始数据与滤波结果是一种逻辑关系,即用逻辑运算实现,如最大值滤波器最小值滤波器中值滤波器等,是通过比较一定邻域内的灰度值大小来实现的,没有固定的模板,因而也就没有特定的转移函数(因为没有模板作傅里叶变换),另外,膨胀和腐蚀也是通过最大值、最小值滤波器实现的。五种常见的非线性滤波算子,这五种滤波算子对不同的图像都会有不同的作用,最常用的是中值滤波,因为它的效果最好且信息损失的最少。
    • 极大值滤波: 极大值滤波就是选取像素点领域的最大值作为改点的像素值,有效率去了灰度值比较低的噪声,也可作为形态学里面的膨胀操作。
    • 极小值滤波: 与极大值滤波相反。
    • 中点滤波: 中点滤波器将邻域的最大和最小值求平均来代替当前像素点值。
    • 中值滤波: 中值滤将邻域内像素点值排序,用序列中的中值取代当前像素点值。可以消除图像中的长尾噪声,例如负指数噪声和椒盐噪声。
    • 加权中值滤波(中值滤波的改进) 网上的解释: 加权中值滤波是在中值滤波的基础上加以改进,其性能在一定程度上优于中值滤波。 下面是自己在算法上的改进,以例子说明: 若说选模板的大小为5,那么这个模板就唯一确定为: 1 1 5 1 1 1 1 5 1 1 5 5 5 5 5 1 1 5 1 1 1 1 5 1 1 上图中的数字表式改点像素在序列中出现的次数。然后根据模板平滑图像。实验证明该方法好于传统中值滤波。 自己的理解: 加权中值滤波就是在对邻域像素值进行排序时,有些像素值让它多出现几次。比如上面的模板,就是让与当前像素点同行同列的像素点的值都出现5次。

5.结语

图像的卷积核滤波是图像处理中比较基础又很重要的部分,主要应用在去除图像噪声,提取图像边缘等场合。 文中如有不当之处欢迎留言。我们下次再见。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏人工智能LeadAI

用TensorFlow做Kaggle“手写识别”达到98%准确率-详解

这是一个TensorFlow的系列文章,本文是第三篇,在这个系列中,你讲了解到机器学习的一些基本概念、TensorFlow的使用,并能实际完成手写数...

4669
来自专栏人工智能LeadAI

机器学习必须熟悉的算法之word2vector

word2vector已经成为NLP领域的基石算法。作为一名AI 从业者,如果不能主动去熟悉该算法,应该感到脸红。本文是一篇翻译的文章,原文链接是:http:/...

96115
来自专栏大数据挖掘DT机器学习

判别模型 和 生成模型

【摘要】 - 生成模型:无穷样本==》概率密度模型 = 产生模型==》预测 - 判别模型:有限样本==》判别函数 = 预测模型==》预测 【...

2846
来自专栏人工智能LeadAI

TensorFlow从0到1 | 第十五章 重新思考神经网络初始化

上一篇14 交叉熵损失函数——克服学习缓慢从最优化算法层面入手,将二次的均方误差(MSE)更换为交叉熵作为损失函数,避免了当出现“严重错误”时导致的学习缓慢。 ...

3268
来自专栏机器学习算法与Python学习

主流机器学习算法优缺点总结,先从基础玩起!

决策树分类方法,采用基于最小距离的基尼指数估计函数,用来决定由该子数据集生成的决策树的拓展形。决策树回归方法,采用切分点与切分变量来计算的损失来估计函数。如果目...

1352
来自专栏机器学习算法工程师

Mask-RCNN论文解读

Mask R-CNN是基于Faster R-CNN的基于上演进改良而来,FasterR-CNN并不是为了输入输出之间进行像素对齐的目标而设计的,为了弥补这个不足...

6908
来自专栏人工智能LeadAI

TensorFlow从0到1丨 第六篇:解锁梯度下降算法

上一篇 5 TF轻松搞定线性回归,知道了模型参数训练的方向是由梯度下降算法指导的,并使用了TF的封装tf.train.GradientDescentOptimi...

3199
来自专栏ATYUN订阅号

【测试】技能测试问题和答案:测试图像处理数据科学家的25个问题

1)将以下图像格式匹配到正确的频道数。 灰度 RGB I.1个通道 II.2个通道 III.3个通道 IV.4个通道 A)RGB – > I,灰度-> II...

3565
来自专栏技术随笔

[译] Perceptual Losses for Real-Time Style Transfer and Super-Resolution(Stanford University)

50312
来自专栏IT技术精选文摘

机器学习之预测分析模型

介绍 预测分析是基于以前收集的数据来预测未来的结果。它包括两个阶段: 训练阶段:从训练数据中学习一个模型。 预测阶段:使用模型预测未知或未来的结果。 预测模...

2986

扫码关注云+社区