图像卷积与滤波

参考资料:

  • 图像卷积与滤波的一些知识点
  • 图像处理基本概念——卷积,滤波,平滑

1.卷积的基本概念

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

图像卷积与滤波_第1张图片
滤波操作示意图

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

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

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

2.1 啥也不做

图像卷积与滤波_第2张图片
啥也不做的卷积核示例

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

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


图像卷积与滤波_第3张图片

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


图像卷积与滤波_第4张图片

另外,下面的滤波器会更强调边缘:
图像卷积与滤波_第5张图片

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


图像卷积与滤波_第6张图片

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

2.3 边缘检测(Edge Detection)

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

图像卷积与滤波_第7张图片

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

再下面这个滤波器可以找到45度的边缘:取-2不为了什么,只是为了让矩阵的元素和为0而已。
图像卷积与滤波_第9张图片

那下面这个滤波器就可以检测所有方向的边缘:
图像卷积与滤波_第10张图片

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

2.4 浮雕(Embossing Filter)

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


图像卷积与滤波_第12张图片

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


图像卷积与滤波_第13张图片

2.5 均值模糊(Box Filter)

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

图像卷积与滤波_第14张图片

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

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

2.6 高斯模糊(Gaussian Blur)

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

图像卷积与滤波_第16张图片
高斯模糊卷积核

2.7 运动模糊(Motion Blur)

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


图像卷积与滤波_第17张图片

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

3.卷积的计算

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

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

  • 计算方法:

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


    图像卷积与滤波_第18张图片

    直接的实现也称为暴力实现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. 低通滤波:将会是边缘部分变得平滑。注意:高斯滤波是一种线性平滑滤波,即低通滤波,适用于消除高斯噪声。
    常用的高斯模板有如下几种形式:
    图像卷积与滤波_第19张图片

    高斯模板中的参数是通过高斯函数计算出来的。计算高斯模板参数时,通过如下公式:
    图像卷积与滤波_第20张图片

    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.结语

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

你可能感兴趣的:(图像卷积与滤波)