高斯滤波

作者:追风剑情 发布于:2016-11-25 21:35 分类:Shader

      前面学习了卷积的概念,并利用卷积实现了一个简单的边缘检测效果。本节学习卷积的另一个常见应用——高斯模糊。模糊的实现有很多方法,例如均值模糊和中值模糊。均值模糊同样使用了卷积操作,它使用的卷积核中的各个元素值都相等,且相加等于1,也就是说,卷积后得到的像素值是其邻域内各个像素值的平均值。而中值模糊则是选择邻域内对所有像素排序后的中值替换掉原颜色。一个更高级的模糊方法是高斯模糊。

高斯滤波

高斯模糊同样利用了卷积计算,它使用的卷积核名为高斯核。高斯核是一个正方形大小的滤波核,其中每个元素的计算都是基于下面的高斯方程:

111111.png

标准方差公式

22222.png

其中,σ是标准方差(一般取值为1),x和y分别对应了当前位置到卷积核中心的整数距离。要构建一个高斯核,我们只需要计算高斯核中各个位置对应的高斯值。为了保证滤波后的图像不会变暗,我们需要对高斯核中的权重进行归一化,即让每个权重除以所有权重的和,这样可以保证所有权重的和为1。因此,高斯函数中e前面的系数实际不会对结果有任何影响。下面是一个标准方差为1的5x5大小的高斯核。

0.0030 0.0133 0.0219 0.0133
0.0030
0.0133
0.0596 0.0983
0.0596
0.0133
0.0219
0.0983 0.1621 0.0983
0.0219
0.0133
0.0596
0.0983
0.0596
0.0133
0.0030 0.0133
0.0219
0.0133
0.0030
我们可以把这个二维高斯核拆分成两个一维的高斯核

0.0545 0.2442 0.4026 0.2442 0.0545

0.0545
0.2442
0.4026
0.2442
0.0545
高斯方程很好地模拟了邻域每个像素对当前处理像素的影响程度——距离越近,影响越大。高斯核的维数越高,模糊程度越大。使用一个NxN的高斯核对图像进行卷积滤波,就需要NxNxWxH(W和H分别是图像的宽和高)次纹理采样。当N的大小不断增加时,采样次数会变得非常巨大。幸运的是,我们可以把这个二维高斯函数拆分成两个一维函数。也就是说,我们可以使用两个一维的高斯核先后对图像进行滤波,它们得到的结果和直接使用二维高斯核是一样的,但采样次数只需要2xNxWxH。我们可以进一步观察到,两个一维高斯核中包含了很多重复的权重。对于一个大小为5的一维高斯核,我们实际只需要记录3个权重值即可。

标签: Shader

Powered by emlog  蜀ICP备18021003号-1   sitemap

川公网安备 51019002001593号