【问题标题】:Difference beetwen filter2d() with gaussian kernel and GaussianBlur()beetwen filter2d() 与高斯核和 GaussianBlur() 的区别
【发布时间】:2012-02-19 15:30:44
【问题描述】:

我是opencv的新手。我应该为涉及使用 2D 低通高斯滤波器的项目执行操作。我用的OpenCV是2.2的,里面有两个函数:filter2d()和GaussianBlur()。

做同样的工作?让我解释一下,如果 filter2d () 步进一个用 () 创建的高斯内核 getGaussiankernel 并应用过滤器并直接用 GaussianBlur () 运行它,我会得到相同的结果吗? 很明显,我会为两个核函数采用相同的值。

【问题讨论】:

  • 试试看 - 执行这两个操作并保存到两个不同的文件,看看文件是否相同。
  • no 不要给出相同的结果。因此,此时应用 gaussianblur (src, dst, cvSixe (5.5), 1,1) 以产生具有大小为 5 的滤波器的 2D 高斯滤波器是错误的吗?或者它正确适用一次 gaussianblur (src, dst, cvSixe (5.5), 1) 和 gaussianblur (dst, dst2, cvSixe (5.5), NULL,1) ?
  • 恐怕我不熟悉 OpenCV 的工作原理,所以我无法回答您的其他问题,抱歉。
  • 理论上高斯过滤器是可分离的,然后首先在 x 方向上应用,然后在 y 方向上等于应用整个 2D 过滤器。

标签: c++ opencv filtering gaussian


【解决方案1】:

您可能看到的不同之处在于 filter2D 执行的是互相关而不是卷积操作。当使用对称核/滤波器时,X 相关和卷积给出相同的结果。为了使用内核执行卷积,您需要翻转它并将锚点设置在内核的中间。请参阅文档:http://opencv.willowgarage.com/documentation/cpp/image_filtering.html#cv-filter2d

我不确定从那里产生的差异,但我需要在我的应用程序中使用卷积,这就是我实现它的方式,它按预期工作。

【讨论】:

  • 要应用 2D 滤镜我应该使用上面提到的 GaussianBlur 的双重应用?
  • OpenCV 有它自己的 GaussianBlur 实现,你为什么不直接使用它呢? :) 这个:opencv.willowgarage.com/documentation/cpp/…
  • 我不确定以这种方式应用它会给我正确的结果......我只是应用 GaussianBlur
【解决方案2】:

GaussianBlur() 只是更复杂的设置 filter2d() 的快捷方式,具有相同的内核值。它以相同的速度执行相同的操作,调用相同的核心函数。

【讨论】:

  • 非常感谢,但应用 filter2D() 和 Gaussianblur() 时返回的结果不一样。有很多但很小的差异。
猜你喜欢
  • 2019-09-20
  • 1970-01-01
  • 2020-03-01
  • 2012-02-19
  • 1970-01-01
  • 2014-05-25
  • 1970-01-01
  • 2017-06-08
  • 2021-06-13
相关资源
最近更新 更多