如何在三维空间中进行高斯滤波

9

如何在第三维上进行高斯平滑? 我有这个检测金字塔,在四个尺度上累积投票。 在每个峰值处发现对象。

Detection Pyramid

我已经在2D中对它们进行了平滑处理,并阅读我的论文,发现需要使用\sigma = 1过滤第三维,这是我以前从未尝试过的,甚至不确定它的含义。

我找到了如何在Matlab中完成它,并需要在OpenCV / C ++中找到类似的东西。

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


额外平滑的目的是什么?每个金字塔级别中是否有不同的信息? - Michael Kupchick
如果您查看图像,峰值会在其中一个四个尺度中找到,因此我认为平滑处理是为了在所有尺度上找到全局峰值。这是我在检测方面的论文中写的,目前我只是在所有尺度上寻找峰值并验证哪个是最佳候选项,并希望与建议的方法进行比较。 - Poul K. Sørensen
三维高斯平滑与二维高斯平滑是相同的。您可以应用一个三维卷积滤波器,使得G(x,y,z)= Q。 - Adam
我想到了这一点,并且从matlab中发现smooth3d可以做到。你有关于如何在OpenCV中实现这一点的任何建议吗? - Poul K. Sørensen
你如何绘制图像金字塔? - mrgloom
2个回答

3
高斯滤波器是可分离的。您可以在每个维度上应用1D滤波器,如下所示:
for (dim = 0; dim < D; dim++)
    tensor = gaussian_filter(tensor, dim);

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

请注意,这假定您的金字塔级别都具有相同的大小。您可以拥有自己的函数,即在卷积第三个维度时实时采样您的尺度空间金字塔,但是如果您有足够的内存,我相信将较粗糙的级别缩放到与最细的��别具有相同的大小会更快。


2
很久以前(2008-2009年),我开发了一个小型的C++模板库,用于应用一些简单的变换和卷积滤波器。该库的源代码可以在Linderdaum引擎中找到 - 它与引擎的其余部分无关,并且不使用任何引擎的功能。许可证是MIT,所以你可以随意使用它。
请查看Linderdaum源代码(http://www.linderdaum.com)中的Src/Linderdaum/Images/VolumeLib.*。
准备核的函数是PrepareGaussianFilter(),MakeScalarVolumeConvolution()应用了该过滤器。很容易将该库适配到不同的数据源,因为I/O是使用回调函数实现的。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接