3

我有一个程序,我在其中查询包含在半径为 R 的球体 S 中的所有点。这些点是实际对齐在 3D 规则网格的顶点上的 3D 点,但我认为这个细节与问题无关。查找体积(球体)的中心可以是 3D 速度中的任何位置。

这些点包含一些数据(比如真实的)。我的问题是,如何使用 3D 过滤器(例如高斯过滤器)对包含在球体中的点保存的数据进行插值/过滤。我的理解是你需要做这样的事情(伪代码):

interp_data = 0; 
for (each point contained in the lookup sphere S of radius R)
      // compute square distance from point location to sphere centre
      dist2 = distance2(sphere_center, curr_point_loc);
      // compute gaussian weight
      w = exp(-100 * dist2);
      sumWeight += w;
      interp_data += curr_point_data * w;
 interp_data /= sumWeight;

这是对的吗。我见过一些使用类似技术的代码。我理解 exp 函数的值 100 与似乎所谓的标准正态偏差有某种关系。我看到的源代码中的值 100 是硬编码的,但我认为这应该以某种方式与球体的半径有关?因为当 dist2 = R^2 时,高斯滤波器的权重应该下降到 0。

如果有人可以对此有所了解,那就太好了。

它实际上是过滤 3D 数据的最佳方式吗?有没有更好/更快/更可靠的方法?

非常感谢你的帮助。

4

1 回答 1

9

您的建议大部分是合理的,尽管可能效率不高。(另外,为什么是距离平方而不仅仅是距离?)

您可以通过执行以下操作更有效地执行 3D 高斯:

1) 使用 1D 高斯核将核分离为 3 个 1 维通道。这在高斯模糊维基百科页面上进行了解释

2)您可以通过连续多次进行框模糊来近似高斯核,并且可以使用求和面积表来实现

3)您也可以使用快速傅立叶变换并通过将图像乘以频率空间中的内核来进行卷积。

于 2013-05-18T02:56:20.920 回答