我查看了许多声称是高斯核计算器的不同来源。然而,每一个似乎都对相同的输入给出了不同的答案。
这些是我查看的来源:
- http://dev.theomader.com/gaussian-kernel-calculator/
- http://www.embege.com/gauss/
- http://softwarebydefault.com/2013/06/08/calculating-gaussian-kernels/
第三个是唯一一个给了我预期输出的(使用维基百科的公式并标准化)。
第一个称自己为“不同的”高斯核,所以我认为它与我的预期不符是有道理的。
查看源代码,第一个代码的实现与我的预期明显不同,尽管最后两个代码的实现与我的预期非常相似。尽管如此,我不确定我是否完全遵循了第二个来源中所做的事情。
这些都是“正确的”吗?高斯核有很多“变体”吗?
最佳答案
看起来这些站点在如何呈现指定过滤器参数的选项方面略有不同,但如果指定的过滤器参数一致,则它们是一致的(在 4 或 5 个有效数字之内)。
主要区别是第二个站点(即 http://www.embege.com/gauss/ )需要选中“标准化”框,并输入标准差平方,以某种方式计算高斯核与其他两个网站一致。
如您所知,2D 高斯模糊滤波器的计算公式为
其中 x 和 y 是距内核中心的像素距离,sigma 是标准差。
计算高斯滤波器内核的第一步是选择内核大小和标准差。内核大小 k 始终为奇数,3、5、7...,并以 k x k 矩阵形式给出 2D 高斯滤波器内核。
第二个是使用距中心像素的 x 和 y 像素位移来计算距中心每个像素位移处的内核值。最后,对kernel的每个元素进行归一化,使得filter的所有元素之和等于1.0。
例如,考虑第三个站点中的“rose”示例,这是一个权重(标准差)为 5.5 的 3x3 高斯核。第三页作者表示,归一化后,过滤值为
列表中的第一个站点,如果您输入 Sigma =5.5 且 Kernel Size =3 ,则会给出:
0.10989 0.111716 0.10989
0.111716 0.113573 0.111716
0.10989 0.111716 0.1098
对于列表中的第二个站点,您需要输入分辨率 = 3x3,西格玛平方 = 30.25(5.5 的平方),并选中“标准化”框。
第二个站点的结果是
{ 0.1098867834673961、0.11171818781545209、0.1098867834673961、
0.11171818781545209、0.11358011486860732、0.11171818781545209、
0.1098867834673961、0.11171818781545209、0.1098867834673961 }
关于image-processing - 高斯滤波器的差异?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28520014/