image-processing - 高斯滤波器的差异?

标签 image-processing gaussian

我查看了许多声称是高斯核计算器的不同来源。然而,每一个似乎都对相同的输入给出了不同的答案。

这些是我查看的来源:

  1. http://dev.theomader.com/gaussian-kernel-calculator/
  2. http://www.embege.com/gauss/
  3. http://softwarebydefault.com/2013/06/08/calculating-gaussian-kernels/

第三个是唯一一个给了我预期输出的(使用维基百科的公式并标准化)。

第一个称自己为“不同的”高斯核,所以我认为它与我的预期不符是有道理的。

查看源代码,第一个代码的实现与我的预期明显不同,尽管最后两个代码的实现与我的预期非常相似。尽管如此,我不确定我是否完全遵循了第二个来源中所做的事情。

这些都是“正确的”吗?高斯核有很多“变体”吗?

最佳答案

看起来这些站点在如何呈现指定过滤器参数的选项方面略有不同,但如果指定的过滤器参数一致,则它们是一致的(在 4 或 5 个有效数字之内)。

主要区别是第二个站点(即 http://www.embege.com/gauss/ )需要选中“标准化”框,并输入标准差平方,以某种方式计算高斯核与其他两个网站一致。

如您所知,2D 高斯模糊滤波器的计算公式为

enter image description here

其中 x 和 y 是距内核中心的像素距离,sigma 是标准差。

计算高斯滤波器内核的第一步是选择内核大小和标准差。内核大小 k 始终为奇数,3、5、7...,并以 k x k 矩阵形式给出 2D 高斯滤波器内核。

第二个是使用距中心像素的 x 和 y 像素位移来计算距中心每个像素位移处的内核值。最后,对kernel的每个元素进行归一化,使得filter的所有元素之和等于1.0。

例如,考虑第三个站点中的“rose”示例,这是一个权重(标准差)为 5.5 的 3x3 高斯核。第三页作者表示,归一化后,过滤值为

enter image description here

列表中的第一个站点,如果您输入 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/

相关文章:

c++ - 如何将 C++ 结构数组传递给 CUDA 设备?

python - 当没有数据像素时对图像应用滤镜

image - 使用 Go 处理水印图像

image-processing - linux 上的 Imagemagick 将 EMF 转换为 PNG

c++ - 访问负像素值 OpenCV

r - mvrnorm(来自 MASS)与 rmvnorm(来自 mvtnorm)

image-processing - scipy中的高斯滤波器

image - 什么是图像矢量?

cuda - 从 CUDA 中的高斯分布生成随机数

java - 如何在 Java 中实现遗传算法的高斯变异算子