当前位置: > 财经>正文

高斯模糊的原理是什么,怎样在界面中实现? 外汇保险机制原理是什么意思啊知乎

2023-07-21 05:16:59 互联网 未知 财经

高斯模糊的原理是什么,怎样在界面中实现?

----------------- 1/24更新:----------------------

评论区有问到滤波和模糊区别的,那就一步到位,说下几个容易搞混的概念:

滤波(高通、低通、带通、带阻) 、模糊、去噪、平滑等。

看图:

(它们的范围大小以及相互包含关系如图所示)

滤波是对输入信号进行卷积处理的一个过程,写成一个函数的形式是这样的:滤波 = 卷积( 输入信号 ,卷积模板 ) 卷积模板/掩膜 的不同决定了不同的滤波方式,也因此产生了高通、低通、带通、带阻等基本的滤波方式。

针对低通滤波,就是保留将信号中的低频部分,抑制高频部分。要达到这个目的,可以利用均值掩膜、高斯掩膜等对输入信号进行处理。采用均值掩膜对输入信号进行卷积的滤波方式叫均值滤波;采用高斯掩膜对输入信号进行卷积的滤波方式叫高斯滤波;

有问到:

高斯滤波和高斯模糊一样吗

答:一样。不加“高斯”这个限定词时,滤波的范畴要远远大于模糊,后者只是前者的一个子集。当加上“高斯”限定以后,所指代的卷积操作就是同一个操作了,因为根据方程 滤波 = 卷积( 输入信号 ,卷积模板 ),当两个操作的输入信号和卷积模板都一样时,这两个操作就是一个操作了。

那为什么不直接叫高斯滤波,还起个高斯模糊的名字呢?

那是因为这个滤波的效果看起来像是把图像给弄模糊了,所以又有了“高斯模糊”的叫法。

平滑也是类似的道理。

起这么多名字好乱啊,干嘛不统一?

就不! 你咬我啊

------------------ 以下原答案 ---------------------

首先:滤波是掩膜(mask)和图像的卷积。

然后:滤波过程分两步: 1)计算掩膜 2)卷积——掩膜上每一个位置的值和图像上对应位置的像素值的乘加运算

1. 高斯分布不是高斯模糊/滤波!!! ( x 3)

初学的时候,确实非常容易搞混这个。

1.1 高斯分布

绝大多数讲高斯滤波的文章或者博客都会给出下面的公式:

高斯分布公式:f(x)= frac{1} {sqrt{2pi}sigma}{e^{-{(x-u)}^2}/{2{sigma}^2}}qquad

以及告诉它的形状和性质:

(如图为一维高斯分布示意图,mu决定了分布对称中心,sigma决定了分布的形状——sigma越小形状越瘦高,sigma越大越矮胖)

然而在这里高斯分布公式到底是做什么的?

答:计算高斯滤波用的掩膜(Mask)

1.2 利用高斯分布求高斯掩膜

1.2.1 均值掩膜

首先看一下掩膜到底长什么样子,我们来一个最简单的——3x3均值滤波的掩膜:

可以看到,均值掩膜内所有系数均相等——为1/9,且他们的和为1。同理可知5x5均值滤波的掩膜。

1.2.2 高斯掩膜

高斯分布公式终于要出场了!

有个小问题:我们上面给出的高斯分布公式是一维的,但掩膜是二维的怎么办?很简单,只需要把数值x变为向量vec x即可:f(vec x)= frac{1} {(sqrt{2pi}sigma)^2}{e^{-{(vec x-vec u)}^2/{2{sigma}^2}}}qquad(其中不必纠结于系数frac{1}{(sqrt{2pi}sigma)^2},因为它只是一个常数!并不会影响互相之间的比例关系,并且最终都要进行归一化,所以在实际计算时我们是忽略它而只计算后半部分的)当 vec x为二维时,vec x =(x,y)。这个公式其实可以表示任意维度的高斯分布。需要特别注意的是:vec x, vec mu本质上都是二维空间中的坐标:vec x是掩膜内任一点的坐标,vec mu是掩膜中心的坐标!(统计学中称为均值,即坐标的均值)

敲黑板再说一遍: x和u, 是位置,是坐标!

于是乎,对于图像中任意一点(x,y),它周围的坐标为:

中间的(x,y)就是我们公式中的vec mu了, 当vec x遍历(x-1,y-1)...(x+1,y+1)时,

({vec x - vec mu})^2:

(只剩下常数没有x,y是因为在相减的过程中把x,y抵消掉了)

e^{-{(vec x-vec u)}^2/{2{sigma}^2}} qquad:

(这里取sigma为1.0)

归一化就得到高!斯!掩!膜!了:

所以你看,高斯掩膜的求解与位置(x,y)无关,因为在计算过程中x,y被抵消掉了,

因!此!——

高斯掩膜只要求解一次就够了! 当得到了这个模板,对图像的所有像素用这同一套模板去卷积就OK了!

1.3 利用高斯掩膜和图像进行卷积求解高斯模糊

这个过程就很简单了,如下图所示,没有别的,就是卷积:

117 = 102 * 0.075 + 108 * 0.124 + 110 * 0.075 +119 * 0.124 + 120 * 0.204 + 110 * 0.124 +129 * 0.075 + 130 * 0.124 + 132 * 0.075

130 = 172 * 0.075 + 175 * 0.124 + 172 * 0.075 +112 * 0.124 + 123 * 0.204 + 88 * 0.124 +98 * 0.075 + 115 * 0.124 + 128 * 0.075所有像素都用图上的那一套模板进行卷积运算,最终得到滤波的结果。

贴个效果图:

嗯,可以的。(为了防止被举报... ... 一点薄码,不成敬意) (逃

2. 算法实现原理如果懂了,算法实现应该很简单,而且opencv也有现成函数可以调用,但opencv的效率其实也不高,可以看这个回答:OpenCV已经将图像处理(识别)的算法写成函数了,那我们还有必要去学习这些算法不? - mpcv 的回答 - 知乎在这里提两个可以加速的地方:1)把二维高斯滤波拆成两个一维高斯滤波——先x方向再y方向 他们是等价的,有兴趣的同学可以自行查找下相关证明。例如:一个5x5的二维高斯滤波,每个像素需要进行25次乘、 24次加 运算;变为2个1x5的高斯滤波后,每个像素进行 10次乘 、8次加 运算;

2)利用查表代替乘运算可以看到,在卷积的过程中,所有的乘运算都是发生在掩膜系数和像素值之间。而且: ① 掩膜系数是固定的:对于1x5的掩膜,只有3个不同的参数; ② 像素值的范围也是固定的: 0~255,256个值;

因此,所有系数和像素值的乘积只有3x256=768种不同的结果。 所以,这768个结果我们直接把它保存在一张表中即可!等用时直接查表!!!

于是上文的10次乘、8次加运算进一步缩减为了只剩8!次!加 !运 ! 算 !

最终我们的运算量改变为:

25次乘、24次加 -------------> 8次加!!!

WTF?

3. 双边滤波双边滤波其实很简单,它只是比高斯滤波多了一种掩膜而已。两种掩膜都是套用高斯分布公式得出来的,只是其中的vec x , vec mu代表的含义不同而已。f(vec x)= frac{1} {(sqrt{2pi}sigma)^2}{e^{-{(vec x-vec u)}^2/{2{sigma}^2}}}qquad求第一个掩膜所用的高斯分布中,vec x代表掩膜中每一个点的位置,其中vec mu为掩膜中心的位置;求第二个掩膜所用的高斯分布中,vec x代表掩膜中每一个点的像素亮度值,其中vec mu为掩膜中心的像素亮度值;(这里有一个是需要注意的:第二个掩膜是需要每次都求取的,因为像素的亮度值无法预先确定,不是维持一个固定不变的pattern)

对这就是双边滤波,不光考虑了像素在空间中位置远近程度的影响,还考虑了像素亮度相近程度的影响。

仅此而已。

客官,来都来了,点个赞再走呗(ฅ>ω

版权声明: 本站仅提供信息存储空间服务,旨在传递更多信息,不拥有所有权,不承担相关法律责任,不代表本网赞同其观点和对其真实性负责。如因作品内容、版权和其它问题需要同本网联系的,请发送邮件至 举报,一经查实,本站将立刻删除。