前言
此次课程是希望通过图像降噪来了解卷积
图像分类
1. 二进制图像
- 图像的组成元素要么是1,要么是0
2. 灰度图像
- 每个组成元素除了0和1,还有256种灰度值变化,每个元素取值0-255
3. 彩色图像
- 每张彩色图像都有三个通道R、G、B,每个通道上每个点也都有0-255的取值范围,也就是说一张RGB图像上的一个点需要用3Byte来表示
- 图像的分辨率(用p
×
\times
×q或者w
×
\times
×h表示):表示图像在X方向和Y方向上的元素个数
图像去噪
1. 噪声是什么?
- 噪声点:图像中跟周围像素点差别大,显得突兀的点
2. 如何处理噪声(平滑)?
- 平滑方法:将噪点跟周围点加权平均一下,这样看起来就一样了均匀了。
⇒ \Rightarrow ⇒将周围的每个点包括自身乘上每个点对应的权重然后相加,相加后的新值就代替了自身原本的值 - 其实这就是卷积,由此引入卷积的概念
3. 卷积
- 滤波核(卷积核):存储每个点对应的权值;
Tip:给定卷积核模版后需要反转一下,然后再开始一个个点进行卷积
- 卷积核定义了权值,然后用卷积核依次对图像的每一个点进行卷积操作(把卷积核覆盖到的每一个点和核中对应的权值相乘累加得到一个新的点,所有新的点就又构成了新的图像了),具体定义如下:
( f ∗ g ) [ m , n ] = ∑ k , l f [ m − k , n − l ] g [ k , l ] (f *g)[m,n] =\sum_{k,l}f[m-k,n-l]g[k,l] (f∗g)[m,n]=∑k,lf[m−k,n−l]g[k,l]
如果使用的是9*9的卷积核模板,那么k,l的取值就分别是-1、0、1,这样就能使得卷积核与原图像被覆盖到的点逐一相乘。
4. 卷积特性
- 线性(Linearity)
两个图像相加后的卷积结果与两个图像分别卷积后相加的结果一样
f i l t e r ( f 1 + f 2 ) = f i l t e r ( f 1 ) + f i l t e r ( f 2 ) filter(f_1+f_2)=filter(f_1)+filter(f_2) filter(f1+f2)=filter(f1)+filter(f2)
- 平移不变性(Shift invariance)
平移之后卷积和卷积之后平移结果是一样的(平移可以通过卷积实现,上下左右中的一个方向上的卷积核设置为1,其他都设为0就实现了图像平移操作 )
f i l t e r ( s h i f t ( f ) ) = s h i f t ( f i l t e r ( f ) ) filter(shift(f)) = shift(filter(f)) filter(shift(f))=shift(filter(f))
- 交换律
a ∗ b = b ∗ a a * b = b * a a∗b=b∗a
- 结合律
a ∗ ( b ∗ c ) = ( a ∗ b ) ∗ c a * (b * c) = (a * b) * c a∗(b∗c)=(a∗b)∗c
- 分配律
a ∗ ( b + c ) = ( a ∗ b ) + ( a ∗ c ) a * (b + c) = (a * b) + (a*c) a∗(b+c)=(a∗b)+(a∗c)
- 实数外提
k a ∗ b = a ∗ k b = k ( a ∗ b ) ka * b = a * kb = k (a * b) ka∗b=a∗kb=k(a∗b)
- 脉冲向量(unit impulse e)
将卷积核模板中只有中心值为1,其他都为0的模板称为脉冲模板
a ∗ e = a a * e =a a∗e=a
5. 卷积核的填充
- 如果用卷积核从图像的第一行第一个点开始进行卷积的话,那么卷积核的窗框肯定和图像被覆盖到的元素大小不一样,如下图所示.如果这样进行卷积的话,将会导致多卷积几次,得到的图像会越来越小
- 那么如何解决这个问题呢?
- 我们需要对原图像进行填充,保证卷积前后图像一样大.具体填充方法如下:
- Black
给图像周围补一圈0 - Wrap around
将图像想象成由平面卷成圆筒,这样就使得图的两边贴合,就贴合在一起的部分作为扩充(四个角也是一样贴合) - Copy edge
直接把最外圈像素进行一个拉伸 - Wrap around.
最外圈像素进行镜像
6. 卷积实现图像锐化原理
卷积可以实现特别多功能,这里举例常用的图像锐化.
- 先对原本的图像进行平滑,平滑后的图像中 原本和周围区域差异不大的点会变化不大,而和周围区域差异明显的点受影响就会比较大。因此将原图和平滑后的图像相减,就会减出一个边缘轮廓图出来;此时再将这张边缘图和原图相加,就能实现图像边缘锐化的效果.
高斯滤波器
1.振铃效果
- 若在平滑模板中每个点的值都一样(方的模板),使用该模块对图像进行平滑处理,卷积后的图像将会生成一些原本图像上并不存在的信息.如下图所示,该图像卷积后生成了一些原本并不存在的图像纹理,这就是振铃效应.
- 之所以产生振铃效果,是因为我们所使用的模板是方的,所以在这里我们就期望设计一种有效的模板来平滑图像.
-
2. 高斯函数
- 所以期望另一种模块:越中间的值,权重越高,越偏离中心的值,权重越小;这样就能使得离得越近的点贡献越大大,离得越远的点对卷积贡献就越小.
- 如何产生这种权值模板? ⇒ \Rightarrow ⇒ 通过高斯函数,其空间几何图如下
- 将模版上的点看成坐标x,y,然后代入高斯函数公式得到这个点的坐标值,也就能得到模板上的权值了,这样得到的模板称为高斯核.
G σ = 1 2 π σ 2 e − ( x 2 + y 2 ) 2 σ 2 G_\sigma=\cfrac{1}{2\pi \sigma^2}\,e^{\dfrac{-(x^2+y^2)}{2\sigma^2}} Gσ=2πσ21e2σ2−(x2+y2)
3. 高斯核
- 但是通过高斯函数得到的模板并不能马上使用,模版里的权值全加起来需要为1(若所有权值的和小于1就会出现衰减的效果)
- 所以需要将每个点的权值算出来后,去规划全部点使其权值和为1
- 规划方法:每个点的权值除于全部权值只和作为新的权值,如 i n e w = i o l d ∑ i o l d i_{new}=\dfrac{i_{old}}{\sum i_{old}} inew=∑ioldiold
因此获得得高斯核的步骤如下:
- 指定窗框(得到坐标,如5*5
- 需要指定高斯公式中的 σ \sigma σ(方差)
注意: 方差越小表示数据越集中,也就是卷积核的中间值越大,峰值越尖;而方差越大峰值就越扁
- 对模版的所有权值进行规划
4. 方差变化对滤波的影响
- 因为 σ \sigma σ越小,模版中间值就越大(越尖),自身权重就越大,说明点自身在滤波后点结果中占比大,自身的信息没有被平滑的那么厉害,被滤波影响的没那么大,自身信息保留得多一点;
- σ \sigma σ方差越大,模版中间值越小(越扁),则自身权重就越小,被滤波影响的也就越大,被滤波后自身信息保留的更少
当固定窗框时:
想要滤波效果强一点,选一个大一点的 σ \sigma σ
想要滤波效果弱一点,选一个小一点的 σ \sigma σ
5. 窗框变化对滤波的影响
- 窗框的大小决定了模版里面点的个数,则在对模版所有值进行规划的时候,点的个数越多权值总和就越大分母也就越大,那么规划后的每一个点就会更小,从而使得滤波效果更强,平滑的厉害.
当 σ \sigma σ固定时:
想要滤波强一点,选一个大一点的窗框
想要滤波弱一点,选一个小一点的窗框
(总之,当两个影响因素其中一个固定时,另一个只要往大了调,都能是滤波效果增强)
6. 窗框和 σ \sigma σ 之间的关系
- 根据实验的经验,我们可以得出窗框和 σ \sigma σ 之间的比例关系.根据此关系式得出的模型,可以得到比较好的滤波效果.给定其中一个参数就能得到另一个参数:
窗框 = 2 × σ + 1 窗框=2\times \sigma+1 窗框=2×σ+1
7. 高斯核性质
- 高斯核卷积自身是另一个高斯 (Convolution with self is another Gaussian)
-
用连续两个高斯核卷积后的结果可以用一个大一点的高斯核卷积表示( σ + σ → 2 σ \sigma+\sigma \to \sqrt{2} \sigma σ+σ→2σ)
-
即用一个大高斯核的操作可以分解为两个小高斯核的操作,他们之间的关系可以勾股定理求出
- 高斯核可以分解成x,y两个方向上的高斯核 (Separable kernel)
- 将高斯核进行分离,从二维变成一维的卷积,从而使得总运算量下降(变成x方向上的卷积加上y方向上的卷积),实现大高斯核到小高斯核的转换.
- 高斯核的分解,可以使得卷积的总运算复杂度下降
噪声分类
1. 噪声分类
- 椒盐噪声 (Salt and pepper nosie)
- 图片上黑点和白点都有,随机出现
- 脉冲噪声 (Impulse noise)
- 只有白点,随机出现
- 高斯噪声 (Gaussian noise)
- 图像中点叠加上了别的变产生的,这种模型只适用于方差较小的情况
- 将理想图像和噪声的影响考虑在一起,得到的就是高斯噪声
噪声的分布独立,都来自正态分布,其均值为0,方差为 σ \sigma σ的高斯分布中随机采样出来的
2. 如何用高斯滤波器去除高斯噪声
- 当噪声模型的方差比较小、也就是高斯噪声比较小时,可以用小的高斯模板(小方差)
- 当噪声模型的方差比较大、高斯噪声比较大时,就可以用大的高斯模板滤波
注意: 高斯去躁是有成本的,虽然能够去除一些高斯噪声,但是也会把图像的边缘信息平滑掉,使得轮廓信号会衰减一些
中值滤波器
- 高斯滤波器对于椒盐噪声和白噪声的去躁效果不理想,于是我们在这边使用中值滤波器(非线性操作)。
- 中值滤波器的模版中没有权值,将模版与像素相叠后,把映射到的元素进行排序,取排序后最中间的结果作为新值(和高斯滤波器的加权求和线性操作不一样)
注意和高斯滤波器加权求和不一样的地方:
- 中值滤波后图像里是没有出现新值的,只是将框内的中值拉回来而已,点是来自原图的点
- 高斯滤波后会出现新的点,加权求和之后的点不是来自原图像的点
- 但是当中值滤波的窗框比较大的时候,既是用中值滤波去躁也是很模糊,因为大模版就会在大范围里去平均,就可能显得更加平滑.