高品质后处理渲染技术分享:十种图像模糊算法的总结与实现( 五 )
文章图片
二、方框模糊(Box Blur)
方框模糊(Box Blur) , 又常被称为盒式模糊 , 其中所得到的图像中的每个像素具有的值等于其邻近的像素的输入图像中的平均值 。 和高斯模糊一样 , Box Blur也是低通滤波器的一种形式 。 在图像处理领域 , Box Blur通常用于近似高斯模糊 。 因为根据中心极限定理 , 重复应用Box Blur可以得到和高斯模糊非常近似的模糊表现 。
可以将3 x 3的box blur的kernel表示为如下矩阵
文章图片
而2x2的box blur的kernel表示为如下矩阵:
文章图片
Box Blur和高斯模糊的性质对比可见下图:
文章图片
图 3D结构 , 2D结构和示例矩阵对比(a)Box Blur(b)Gaussian Blur
以下是Box Blur的作用过程的总结:
文章图片
Box Blur也是线性可分的 , 如有需要 , 也可以借助其此性质 , 如下所示:
文章图片
另外box blur也有不少扩展与变体 , 比如Tent Blur(两次Box Blur)、Quadratic Blur(三次Box Blur)等 , 具体本文暂时就不展开了 。
其中 , Tent Blur也已在XPL中进行了实现 , 具体可见:
https://github.com/QianMo/X-PostProcessing-Library/tree/master/Assets/X-PostProcessing/Effects/TentBlur
以下是一个4 x 4的box filter的shader实现 , low level optimize方面 , 可以采用乘加组合的书写方式 , 即MAD指令友好的形式 , 以在部分GPU上实现指令数的优化:
half4 BoxFilter_4Tap(TEXTURE2D_ARGS(tex, samplerTex), float2 uv, float2 texelSize)
{
float4 d = texelSize.xyxy * float4(-1.0, -1.0, 1.0, 1.0);
half4 s = 0;
s = SAMPLE_TEXTURE2D(tex, samplerTex, uv + d.xy) * 0.25h;// 1 MUL
s += SAMPLE_TEXTURE2D(tex, samplerTex, uv + d.zy) * 0.25h; // 1 MAD
s += SAMPLE_TEXTURE2D(tex, samplerTex, uv + d.xw) * 0.25h; // 1 MAD
s += SAMPLE_TEXTURE2D(tex, samplerTex, uv + d.zw) * 0.25h; // 1 MAD
return s;
推荐阅读
- 违反违反医疗事故处理条例 青岛交通医院被警告
- 个税APP提示退税“国库处理”……原来是这么回事!
- 陕西榆林女子制止两插队者被打 打人者已被警方处理
- 教师有这些行为或被开除!广东首份违反师德处理办法征求意见
- 推荐警惕!厨房突发爆燃竟和煤气无关,只因他这样处理剩菜剩饭…...
- 厨房突发爆燃,竟和煤气无关!只因他这样处理剩菜剩饭…
- 公积金速看!漯河将清理公积金长期封存账户,请及时处理
- 牵出黄岛一起打架牵出贩卖“笑气”案 三人被依法处理
- 外媒:美明尼苏达州总检察长将领导处理弗洛伊德案
- 【各个】幸福触手可及各个人物结局 迪丽热巴细节上处理的很好