Lod*_*ner 9 shader image-processing glsl gaussian fragment-shader
我在GLSL中实现了高斯模糊片段着色器.我理解所有这些背后的主要概念:卷积,使用线性分离x和y,多次传递以增加半径......
我仍然有几个问题:
sigma和radius之间的关系是什么?
我已经读过sigma相当于radius,我不知道sigma是如何用像素表示的.或者"半径"只是sigma的名称,与像素无关?
我该如何选择西格玛?
考虑到我使用多次传球来增加sigma,我如何选择一个好的sigma来获得我想要的sigma在任何给定的传球?如果得到的sigma等于sigma 和sigma 的平方和的平方根相当于半径,那么获得任何所需半径的简单方法是什么?
什么是内核的好大小,它与sigma有什么关系?
我见过大多数实现都使用5x5内核.对于具有良好质量的快速实现而言,这可能是一个不错的选择,但是还有另一个选择另一个内核大小的理由吗?sigma如何与内核大小相关?我应该找到最好的sigma,以便我的内核之外的系数可以忽略不计并且正常化吗?
Aar*_*gan 18
我认为您的条款可以互换,具体取决于您的实施.对于高斯模糊的大多数glsl实现,他们使用sigma值来定义模糊量.在高斯模糊定义中,半径可以被认为是"模糊半径".这些术语在像素空间中.
这将定义您想要的模糊程度,这与卷积中使用的内核大小相对应.较大的值会导致更多的模糊.
NVidia实现使用int(sigma*3)的内核大小.
出于性能考虑,您可以尝试使用较小的内核大小和较高的sigma值.这些是要试验的自由参数,它们定义了用于调制的像素数以及要在结果中包含多少相应像素.
根据sigma值,您需要选择相应的内核大小.内核大小将决定卷积过程中要采样的像素数,sigma将定义调制它们的程度.
您可能希望发布一些代码以获得更详细的解释.NVidia在如何构建高斯内核方面有很好的篇章(http://http.developer.nvidia.com/GPUGems3/gpugems3_ch40.html).看例40-1.
归档时间: |
|
查看次数: |
16951 次 |
最近记录: |