查看原文
其他

计算机视觉系列3:图像噪点去除?简单来说就是给长痘痘的你磨皮

妮mo的 达尔闻说 2021-01-17
本视频是《灵魂画手大话计算机视觉,0基础入门》系列的第三节课。
回看系列视频:
第一节:《计算机视觉迅速了解》
第二节:如何教计算机看懂一张图》
本节要点提示:介绍图片滤波的方法,主要从以下两个方面:图像的去噪,也叫平滑;图像锐化。还原一张图片有噪点,去噪磨平的过程。


以下是视频文字稿整理版本:

滤波主要是两个方面:一个叫图像去噪,也叫平滑;另一个叫锐化电影里经常出现的画面,刑警队长对着刑侦专家说赶紧把照片这块弄得清楚一点,做好锐化处理。

这节课先来讲一下:去躁,就是说一张图片里面会有好多的噪点,特别丑。尤其女性肯定特别讨厌这种东西,就是我们在图片上看是这么一些点。但是它在数据里面去反映出来。

我们现在先假设这是一个灰度图,就是二维的矩阵。这里面就会出现一些孤立的点,孤立的点是什么意思呢?比如说这边周围数值都是35到50之间,这个点周围的这些数据点的数据值就是35到50之间变化不大。但是这种噪点在这边就会出现一个孤立点。孤立点就是突然这边出现一个255的点或者一个0的点,就是特别黑或者特别亮的点,突兀的出现在图像当中,这个就是噪点。

这个噪点又有个名字叫做椒盐噪点,当然还有一些其他噪点。比如说噪声的分布满足高斯正态分布,正态函数。就是说会一定的概率出现一个数,加在原始的像素值上,我们暂时先不考虑。

我们先考虑这种椒盐噪点,就像女孩的脸上突然长了一颗痘痘,特别想去掉,用磨皮。所以我们要去除这部分噪点,跟磨皮的效果很像。相当于要把噪点就磨平变成一个跟35到50之间的一个数。

那怎么做呢?就利用了滤波器,英文叫kernal。这一个点周围八个点,就是说3×3的一个范围内,连他自己有九个点,它周围就是八个点,根据八个点去把这个数值给变成一个比较正常点的数值,叫平均滤波。

kernal会在这个图片上进行滑动,就是不断的走啊走。因为这些是九个数,所以他就相当于一个窗口,他在图片上窗口进行滑动,那么每次在图片上覆盖的范围,就是这么一个3×3的范围,有九个数被覆盖。

那么每个数如果都取1/9,就是说对这范围内这九个数,图片上这边覆盖了九个数,这边第一个数跟它图片上覆盖的数相乘,第二个跟第二个相乘,第三个跟第三个相乘,互相相乘。再全部加起来成了1/9。最后是算这九个数的平均值,这边就变成5了。

核在图片上进行这么一次覆盖操作之后,新的图片里面就会产生5这个数。核在图片上进行一下滑动,比如说向右边滑动一格,变到这里来了,往这边又移了一格,这边就出来了2、3,然后这边又会计算一个值,填在这边第二个,然后它会接着移动到某一个位置,中间这边出来一个255,这是个躁点。比如说255是个噪点,周围的值都比较平滑,比如说23,33 ……那么这个点就明显是一个噪点,那么这些值求平均值之后,255就瞬间减下来了,也就完成了图像的去躁过程。

那么拿这个核在这图片上进行不断滑动的操作叫做卷积,卷积神经网络里面非常基础的一个操作。

一定大小的核在一张图片上,从左到右开始一步步滑,然后再从上到下一步步滑。每滑一次得到一个数值,得到一个新的图片。比如这是一个5×5的图,第一格滑,然后滑第二格,滑到第三格的时候已经到这边顶了。这个核里面其实也就生成了三个数。同样道理,竖列里面也就生成了三个数,那也就把图变小了。他们是怎么一个关系呢?比如说核的大小是N乘N ,图的大小是S乘以S 。如果以一步一步滑,那么生成的图的宽的大小就是S-N+1。

如果我一次是滑两格,或者滑三格,我们一般把这个窗口或者说这个核在图上进行滑的时候,每一次移动几格叫步长(stride)。然后设stride的为K,如果我们步长为1,相当于移动的长度就是这么多。一次移K格那么就相当于要除以K ,移的变少了。但是因为我们一开始都不移的时候也计算了一次,所以是对它进行上取整。

我们经常需要的是保证这个图经过卷积之后不变。所以一般会对这个图进行扩充,在神经网络里面又叫padding。扩充一圈就是padding为1,扩充两圈就是padding为2。当然一圈,记住是上下左右各增加一个。这个扩充填的一般最简单的全填0或者全填255,还有一些比较复杂的。可以按照填充的数离下面哪个数最近,就填几。还有更复杂的就是镜像的方式,比如说这边的像素排布是12345,这边要填成五个数就按照镜像来12345。最简单就是直接填充,填充0是用的比较多的。

上面讲了卷积的操作是怎么进行操作的,包括里面步长,还有padding是怎么一回事。那么大家应该有了基本的了解。当然这知识点大家都要记住,后面神经网络里面需要用。然后这边不是有个计算公式吗,如果还要加上padding的话,这个公式又应该怎么写?就是输出这个图的大小跟这些补偿padding的多少,还有包括卷积核的大小什么关系。如果加padding,padding为1 ,左右上下都加。我们设padding等于A,那么加上个2A。公式就是S-N+1+2A,除以K然后上取整。

上面说的可以用这种平均的方法,但我们想即使再怎么平均,255对最后生成的数还是会有影响。所以还有一种方法中值滤波,就是里面这么一堆数,所有加起来求个平均值。255还是对他有影响,所以就还可以选取它的中值。就是把这些数从小到大进行排列,就是说我是不是选取中间的数,就是九的话,中间12345第五个数,我们选取这第五个数代表核在这个位置生成的数。这里面中间那个数应该多少是不是30,所以这边就用30来代替。如果你用255去算平均的话,肯定是远大于30的一个数。

去躁就简单讲这么多,当然还有更深入的了解,大家可以去网上去找这种去躁的方法,还有非常多的。

去躁的内容我们就先讲到这里,下节我们讲一讲锐化的操作。

《灵魂画手大话计算机视觉,0基础入门》系列

计算机视觉系列课程简介计算机视觉系列1:计算机视觉能干什么?计算机视觉系列2:如何教计算机看懂一张图

    您可能也对以下帖子感兴趣

    文章有问题?点此查看未经处理的缓存