如何在3D中进行高斯滤波

时间:2012-03-21 23:11:07

标签: image-processing opencv gaussian

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

我有这个检测金字塔,投票以四个等级累积。每个峰值都有物体。

Detection Pyramid

我已经在2d中平滑了每一个,并在我的论文中读到我需要用\ sigma = 1过滤第三维,我之前没有尝试过,我甚至不确定它是什么意思。

我想出了如何在Matlab中完成它,并且在opencv / c ++中需要一些类似的东西。

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

2 个答案:

答案 0 :(得分:2)

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

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

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

答案 1 :(得分:2)

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

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

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

请注意,这假设您的金字塔等级都具有相同的大小。 你可以拥有自己的功能,可以动态地对你的尺度空间金字塔进行采样,同时对第三维进行卷积,但是如果你有足够的内存,我相信你可以更快地扩展你的粗略水平,以获得相同大小的最佳水平