高效地模糊

后处理经常需要对图片进行模糊操作,例如Bloom,景深等,这里介绍几个高效的计算模糊的要点。

1. 降采样

即先把图片缩小到较低分辨率再进行模糊,然后放大到原来的分辨率。

由于模糊的计算在pixel shader里耗时较多,减小分辨率有助于提高效率,而且把图片先缩小再放大,经过线性过滤之后也有模糊的效果。

2. 二维卷积变成一维卷积

对于高斯模糊而言,由于高斯函数的数学性质,可以优化成两次两次一维卷积,复杂度从O(n^2)变成O(2n)。

G_{2}(x,y)=\frac{1}{2\pi \sigma ^{2}}e^{-\frac{x^{2}+y^{2}}{2\sigma ^{2}}}=G_{1}(x)\cdot G_{1}(y)

G_{1}(x)=\frac{1}{\sqrt{2\pi \sigma ^{2}}}e^{-\frac{x^{2}}{2\sigma^{2}}}

3. 抛弃卷积核中较小的权重

以高斯模糊为例,大小为7的卷积核的权重分别是

1    6    15    20    15    6    1

两端的权重为1,相对其他权重而言比较小,可以考虑从大小为9的卷积核

1    8    28    56    70    56    28    8    1

中去掉头尾两个元素,组成新的卷积核

8    28    56    70    56    28    8
也就是

1    3.5    7    8.75    7    3.5    1

这样一个大小为7的卷积核能达到接近原来大小为9的卷积核的效果。


4. 利用硬件的线性插值

GPU对纹理进行采样的时候,如果纹理坐标不在像素的中心,会返回对临近像素进行线性插值的结果。这个硬件层面的插值计算效率较高,只要恰当地计算纹理坐标,就能实现一次采样得到一前两次采样的结果。

例如,对于原来大小为9的卷积核,偏移的像素值和权重分别是

-4    -3    -2    -1    0    1    2    3    4

0.016     0.054     0.122     0.195     0.227     0.195     0.122     0.054     0.016 
我们可以用一个大小为5的卷积核达到等价的效果,其偏移的像素值和权重分别为

3.231     1.385     0    1.385     3.231 
0.070     0.316     0.227     0.316     0.070 
原本大小为N的卷积核,需要采样N次,利用这种方法只需要[N/2]次。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值