我如何在第三维中进行高斯平滑?
我有这个检测金字塔,投票以四个等级累积。每个峰值都有物体。
我已经在2d中平滑了每一个,并在我的论文中读到我需要用\ sigma = 1过滤第三维,我之前没有尝试过,我甚至不确定它是什么意思。
我想出了如何在Matlab中完成它,并且在opencv / c ++中需要一些类似的东西。
Matlab原始值: Matlab平滑,M0 = smooth3(M0,'gaussian'); :
答案 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 ++中实现高斯滤波器(以及一般的图像处理)。
请注意,这假设您的金字塔等级都具有相同的大小。 你可以拥有自己的功能,可以动态地对你的尺度空间金字塔进行采样,同时对第三维进行卷积,但是如果你有足够的内存,我相信你可以更快地扩展你的粗略水平,以获得相同大小的最佳水平