Convolutions&Image denoising
(卷积和图像去噪)
目录
卷积贯穿着很多计算机视觉的任务,包括现在热门的深度学习网络——卷积神经网络。
在这篇文章中,主要介绍卷积的线性操作,通过理解卷积在图像去噪的应用,引出高斯函数,深入理解卷积。
(一)Types of Images
(图像类型)
1.Binary
(二进制图像)
在一个分辨率为pq(宽度高度)的图像中,每一个元素要么是0(黑色),要么是1(白色),每一个点用1bit表示
2.Gray Scale
(灰度图像)
在一个分辨率为p*q的图像中,每个像素点的取值有256种,每一个点用1byte表示
3.Color
(彩色图像)
在一个分辨率为p*q的图像中,一个点有三个通道,分别是R、G、B,每个通道上元素的取值有256种,因此每个点用3byte表示
(二)Convolution
(卷积操作)
噪声点指该点相比周围的像素点而言比较突兀
去除噪声点的一种最直接的思想就是把该点和周围的点平均一下,即用周围点的加权平均值作为该点的值。权值称为卷积核,也成为滤波核。我们通过卷积核可以得知该点周围的点所占的权重是多少。
卷积核模板一般是奇数的,33、55、7*7
具体是如何做的呢?
假设现在有一个图像f和一个卷积核g。
首先卷积核需要进行翻转(图像上的卷积核已经完成了翻转),然后放到图像当中,从左上角开始对这个点进行运算。
具体运算方法就是将卷积核模板的值(权值)跟对应位置的图像的像素值进行相乘,将相乘的结果累加起来我们就得到了新的图像(去噪后的图像)上这个点的值,这就是一个点的卷积操作的全过程。对于整个图像的卷积操作就是将卷积核平移,让每个点都进行一次卷积操作。
解释公式各符号的含义:k,l的取值有-1、0、1;[m,n]为卷积核的中心点在图像上的坐标;f[x,y]为该点的图像的像素值;m-k与n-l实现卷积核的翻转;g[x,y]为该点的卷积核的值,g[0,0]为卷积核的中心点的值。
(三)Properties
(卷积操作的性质)
1.Linearity
(线性)
f1,f2两张图像,先求和再卷积与每张图像卷积之后再求和是一样的。
2.Shift invariance
(平移不变性)
先对图像平移再卷积与先对图像卷积再平移是一样的,因为卷积操作是对周围小邻域进行操作,平移并没有改变周围点的值。
推导出结论:任何平移不变的操作都可以用卷积操作
3.Else Properties
(其他性质)
(四)Annoying details
(头疼的问题):图像填充
对图像的边缘进行卷积时,卷积核的点并没有全部在图像里面,所以在真实运算时,我们就算不了图像边缘的值。
因此在计算前,如果要保证卷积的图像和原图像一样大,就要将图像扩大一圈,填充后卷积核的每个点都存在了对应的像素值,如果不填充卷积的图像就比原来的图像小。
如何让卷积输入和输出有一个固定的大小,防止多处理几次卷积后图像就没了。
1.clip filter(black)
最常用的方法就是给边缘的周围都补上0,这种方法在深度学习的卷积神经网络常用。但由于填充的是0,边缘周围和0进行平均都会接近于黑色
2.wrap aroud
园筒状,把图片绕成一个环状。
3.copy edge
直接把图像边缘的像素拉伸
4.reflect across edge
填充边缘的镜像
(五)Practice with linear filters
(图像滤波器练习)
1.原图
2.左移:右边的点移到自身
3.平滑(去噪):该点与周围的点形成一体,整个图像就没有那么突兀了,所以就显得很模糊(马赛克)
4.锐化:棱角更加分明
锐化的原理:
(六)Gaussian Kernel
(高斯函数)
如果卷积核模板每个点的值是一样的,卷积核是个方形,就会产生振铃效果,即卷积后的图像种存在一些不像原图的纹理。
想要去除振铃效果,就要使卷积核中心的点权重最高,离中心越远的点权重越小,使用高斯函数。
1.性质
(1)要求卷积核模板所有的权重之和为1。
高斯函数构成的图像的面积为1
设想如果卷积核的所有点的值相加不等于0,比如一个灰度图像的所有点的值都是255,去噪后该图像的值应该保持不变,但是如果33卷积核的每个点的值都是0.1(相加为0.9),经过滤波后,图像上每个点的值为2550.9。
(2)卷积核的窗口大小是5*5且σ的值为1,这两个值是指定的。
有了这两个值之后才可以计算卷积核每个点的值
(3)计算完之后,要对所有的值进行归一化。
比如在上图中,实际卷积核某点的值=(G/G1+G2+…+Gn)* 1/5*5。
(4)高斯核可以分解,分解后计算更加简单
分解前,图像每一个点计算的复杂度O( m 2 {m^2} m2),整个图像的复杂度就是( n 2 m 2 {n^2m^2} n2m2)
分解后,m×m的卷积核变成1×m和m×1两个,那么每一个点计算的复杂度是O(m+m),整个图像的复杂度就是( n 2 m {n^2m} n2m)
(4)用方差为σ的高斯核进行两次卷积,与用方差为√2σ的核进行一次卷积是一样的。
但是用标准差为σ的高斯核进行两次卷积复杂度更低,计算更快
2.标准差σ
等于方差(每个样本值与全体样本值的平均数之差的平方值的平均数)的算数平方根
σ越小表示数据越集中,图像呈现出来越细长—>窗口大小一定,σ越小中间点的权重越大,滤波后平滑的效果弱
σ越大图像越扁—>窗口大小一定,σ越大中间点的权重越小,滤波后平滑的效果强,图像越模糊
3.窗口大小
窗口越大,归一化时分母越大,靠近中心的点的权重越小,滤波后平滑的越厉害
窗口越小,归一化时分母越小,靠近中心的点的权重越大,滤波后平滑结果就没那么明显
4.两者默认关系
窗口大小=3σ*2+1
如果σ=1,窗口大小设置为7*7
如果σ=2,窗口大小设置为13*13
值得一提的是,在计算机视觉中卷积和高斯贯穿始终,高斯一旦放在卷积里,就可以拓展出好多东西,包括卷积神经网络
(七)Noise
(噪声)
1.Gaussian noise
(高斯噪声)
(1)图像实际点的值等于该点像素值+高斯噪声(随机采样出来的值)
(2)在噪声标准差比较小的时候有效
高斯噪声比较小,高斯滤波器的标准差小的就可以去噪;高斯噪声比较大,高斯滤波器的标准差也要变大才能很好的去噪
(3)不同噪声点之间是独立的,互不影响
用高斯滤波器解决高斯噪声的问题
2.Salt and pepper noise
(椒盐噪声)
3.Impulse noise
(脉冲噪声)
这两种噪声点的产生是随机的,就是突然出现一个白点或黑点,把原来的像素点覆盖。
用高斯滤波器并不能很好的去噪,使用中值滤波器
(八)Median filter
(中值滤波器)
相比高斯滤波器模板,中值滤波器模板没有权值,那如何计算呢?
将图像的像素点的值从小到大排序,选择中间的点作为该点滤波后的值
中值滤波没有产生新的像素值
显然中值滤波不是线性操作,中值滤波器不是线性滤波器
中值滤波器vs高斯滤波器
如果中值滤波器的窗口变大,在更大范围的值之间去选择,就会导致图像变模糊
中值滤波vs加权平均求和