UnityShader-高斯模糊

这篇博客探讨了在图像处理中如何使用高斯模糊,特别是如何在Unity Shader中应用高斯滤波来降低时间复杂度。通过将5x5的高斯核矩阵分解为两次水平和垂直方向的采样,可以将采样次数从原本的N*N*W*H减少到2*N*W*H,从而提高效率。这种方法在保持结果一致性的前提下实现了高效的高斯模糊处理。
摘要由CSDN通过智能技术生成

在图像处理中的模糊效果常常可以使用均值模糊中值模糊高斯模糊
这里主要记录一下对UnityShader入门精要中高斯模糊的理解。
在这里插入图片描述

高斯滤波:

G ( x , y ) = 1 2 π σ 2 e − x 2 + y 2 2 σ 2 G(x,y) = \frac{1}{2\pi\sigma^2}e^{-\frac{x^2+y^2}{2\sigma^2}} G(x,y)=2πσ21e2σ2x2+y2
x , y x, y x,y 对应当前位置到卷积核中心的整数距离。通过高斯滤波,我们可以计算当前位置对中心位置的像素权重贡献。

1. 降低时间复杂度

这里对时间复杂度降低的策略进行的一个理解。
在这里插入图片描述

首先假设有一个 5 × 5 5\times5 5×5 的高斯核矩阵 A 5 × 5 A_{5\times5} A5×5 ,其中 A i j A_{ij} Aij 就是通过高斯滤波算出来的 { i , j } \{ i,j\} {i,j} 处的权重值,为了图像权重加起来为1以防止图像变暗,因此还需要做归一化处理。
如果按照 A A A 矩阵来实现高斯模糊,那么需要采样 N × N × W × H N\times N\times W\times H N×N×W×H 次,其中 W , H W,H W,H是图像的高宽。
有趣的地方来了,通过计算发现,我们可以先对水平方向采样 N × W × H N\times W\times H N×W×H 次, 获得在水平方向上的权重值 B B B,然后再对 B B B 在竖直方向上采样 N × W × H N\times W\times H N×W×H 次,获得 C C C。通过这两步操作得到的结果和直接采样 N × N × W × H N\times N\times W\times H N×N×W×H 次是一样的。但是后者总共只需要采样 2 × N × W × H 2\times N\times W\times H 2×N×W×H 次。

仔细观察可以发现:
C × B = A C \times B = A C×B=A

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值