三维数据的高斯模糊

use*_*490 3 c++ algorithm math 3d

我有一个程序,我在其中查询半径为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;
Run Code Online (Sandbox Code Playgroud)

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

如果有人能够对此有所了解,那就太好了.

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

非常感谢你的帮助.

use*_*321 7

您的建议大多是合理的,但可能效率不高.(另外,为什么距离平方而不仅仅是距离?)

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

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

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

3)你也可以使用快速傅里叶变换,并通过在频率空间中将图像乘以内核来进行卷积.