【问题标题】:How to do a Gaussian filtering in 3D如何在 3D 中进行高斯滤波
【发布时间】:2012-11-18 15:24:55
【问题描述】:

如何在第三维进行高斯平滑?

我有这个检测金字塔,票数累积在四个尺度上。在每个峰找到对象。

我已经在 2d 中对它们中的每一个进行了平滑处理,并且在我的论文中阅读到我需要使用 \sigma = 1 过滤第三维,我以前没有尝试过,我什至不确定这意味着什么。

我想出了如何在 Matlab 中做到这一点,并且在 opencv/c++ 中需要一些类似的东西。

Matlab 原始值: Matlab 平滑与 M0 = smooth3(M0,'gaussian'); :

【问题讨论】:

  • 附加平滑的目的是什么?每个金字塔级别是否有一些不同的信息?
  • 如果您查看图像,会在四个尺度之一中找到峰值,因此我假设平滑是为了在所有尺度上找到全局峰值。它写在我的检测论文中,atm 我只是在所有尺度上找到峰值并验证哪个是最佳候选者,并希望与建议的方法进行比较。
  • 3D 中的高斯平滑与 2D 中的高斯平滑相同。您对 3 个维度应用卷积滤波器,使得 G(x,y,z) = Q
  • 我想了这么多,从matlab我发现smooth3d可以做到。关于如何在 OpenCV 中执行此操作的任何建议
  • 如何绘制图像金字塔?

标签: image-processing opencv gaussian


【解决方案1】:

高斯滤波器是可分离的。您在每个维度上应用一维过滤器,如下所示:

for (dim = 0; dim < D; dim++)
    tensor = gaussian_filter(tensor, dim);

我建议使用 OpenCV 在 C++ 中实现高斯滤波器(以及一般的图像处理)。

请注意,这是假设您的金字塔级别的大小都相同。 您可以拥有自己的函数,在对第三维进行卷积时动态采样您的比例空间金字塔,但如果您有足够的内存,我相信将较粗级别扩大到与最精细级别相同的大小会更快.

【讨论】:

    【解决方案2】:

    很久以前(2008-2009 年)我开发了一个小型 C++ 模板库来应用一些简单的转换和卷积过滤器。该库的源代码可以在 Linderdaum 引擎中找到 - 它与引擎的其余部分无关,也不使用引擎的任何功能。许可证是 MIT,所以随心所欲。

    在 Src/Linderdaum/Images/VolumeLib 中查看 Linderdaum 的源代码 (http://www.linderdaum.com)。*

    准备内核的函数是 PrepareGaussianFilter() 和 MakeScalarVolumeConvolution() 应用过滤器。由于 I/O 是使用回调函数实现的,因此很容易使该库适应不同的数据源。

    【讨论】:

      猜你喜欢
      • 2014-10-09
      • 2017-04-20
      • 2023-04-09
      • 2021-05-22
      • 1970-01-01
      • 2020-11-17
      • 2013-09-12
      • 2023-04-03
      • 2013-06-15
      相关资源
      最近更新 更多