11

在 Peter Alfred 关于多元分散数据插值的文章中,他提到,从各种方案中,只有少数方案真正受到从业者的欢迎。例如,他命名为 Shepard 方法和 Hardy Multiquadrics。但是那篇文章到现在已经快 20 年了,真正有趣的是现在广泛使用的方法。

如果您有使用一些空间插值方案的经验,请告诉它。

UPD:为了让这个问题更具竞争力,我重申了它。它是“您曾经使用过哪些多元插值方法?”

4

5 回答 5

16

(这会很长,除非我已经筋疲力尽了。)

首先,关于非分散数据的一些评论。(参见引用 littleCMS 的答案)

有两种常见的颜色插值。几年前,三线性插值(张量积线性插值)是颜色表插值的常用方法。三线性插值确实可以实现为一组顺序的一维插值,首先在一个轴上,然后沿着第二个轴,等等。

许多年前,我们都意识到,当应用于某些类型的变换时,三线性插值会在彩色成像中引入伪影。问题出现在中立者身上。一种解决方案是通过将立方体分解为 6 ​​个四面体来移动到 3-d 中的单纯插值。在 n 维中,单位立方体将被分解为阶乘 (n) 单纯形。立方体还有其他剖析,但这种特殊样式确保主对角线始终是所有单纯形的共享边。当应用于某些颜色查找表时,这反过来又恢复了中性色的良好行为。

现在让我进入真正分散数据插值的问题。

其他人提到了各种方案。克里金法、多二次法、基于距离的方法是少数。(当我过去用这些方案做一些工作时,我实际上更喜欢逆多二次方法。)所有这些实际上只是径向基函数方法的变体,一种常见的方案。RBF 方法有其优点和缺点。它们通常会生成一个平滑的插值,这当然取决于选择的具体基函数,以及您是否选择限制支持。RBF 方法还允许您进行外推,至少在径向基元素的支持将延伸的范围内。如果允许基础元素的范围是无限的,则不会应用任何明确的外推约束。(一般来说,外推是一件坏事。) RBF 方法的一个问题是它们需要求解大型线性方程组,而这些方程组通常是密集矩阵。这意味着问题的大小,就您可以处理的数据点数量而言,往往受到线性代数的限制。相反,如果您通过截断基元素来限制支持,那么矩阵可能会变得稀疏。如果您对解决方案使用稀疏矩阵包,这将改善线性代数。同时,支撑距离成为您必须控制的非线性参数。同样,像多二次和逆多二次方法这样的方法可能有一个次要的非线性参数来控制基本元素的形状。克里金法也有类似的问题,我会将所有这些方法放在一起。这些方程组通常是密集矩阵。这意味着问题的大小,就您可以处理的数据点数量而言,往往受到线性代数的限制。相反,如果您通过截断基元素来限制支持,那么矩阵可能会变得稀疏。如果您对解决方案使用稀疏矩阵包,这将改善线性代数。同时,支撑距离成为您必须控制的非线性参数。同样,像多二次和逆多二次方法这样的方法可能有一个次要的非线性参数来控制基本元素的形状。克里金法也有类似的问题,我会将所有这些方法放在一起。这些方程组通常是密集矩阵。这意味着问题的大小,就您可以处理的数据点数量而言,往往受到线性代数的限制。相反,如果您通过截断基元素来限制支持,那么矩阵可能会变得稀疏。如果您对解决方案使用稀疏矩阵包,这将改善线性代数。同时,支撑距离成为您必须控制的非线性参数。同样,像多二次和逆多二次方法这样的方法可能有一个次要的非线性参数来控制基本元素的形状。克里金法也有类似的问题,我会将所有这些方法放在一起。就您可以处理的数据点数量而言,往往受到线性代数的限制。相反,如果您通过截断基元素来限制支持,那么矩阵可能会变得稀疏。如果您对解决方案使用稀疏矩阵包,这将改善线性代数。同时,支撑距离成为您必须控制的非线性参数。同样,像多二次和逆多二次方法这样的方法可能有一个次要的非线性参数来控制基本元素的形状。克里金法也有类似的问题,我会将所有这些方法放在一起。就您可以处理的数据点数量而言,往往受到线性代数的限制。相反,如果您通过截断基元素来限制支持,那么矩阵可能会变得稀疏。如果您对解决方案使用稀疏矩阵包,这将改善线性代数。同时,支撑距离成为您必须控制的非线性参数。同样,像多二次和逆多二次方法这样的方法可能有一个次要的非线性参数来控制基本元素的形状。克里金法也有类似的问题,我会将所有这些方法放在一起。支撑距离成为您必须控制的非线性参数。同样,像多二次和逆多二次方法这样的方法可能有一个次要的非线性参数来控制基本元素的形状。克里金法也有类似的问题,我会将所有这些方法放在一起。支撑距离成为您必须控制的非线性参数。同样,像多二次和逆多二次方法这样的方法可能有一个次要的非线性参数来控制基本元素的形状。克里金法也有类似的问题,我会将所有这些方法放在一起。

对于这些问题,我归类为 RBF 变体的所有这些方法通常都受限于它们可以轻松处理的点数。根据您处理事物的方式和可用内存量,该限制通常可能在几千点左右。

RBF 方法的一般类的另一个问题是我称之为内插的问题。这是我多年前创建的一个新词,用于描述跨数据中相对较大的洞的插值。事实上,即使在数据中的较小孔进行插值时,也可能经常出现问题。这些方法,因为它们在某种程度上是平滑的,可能会在插值表面中引入不需要的极值(大的峰或谷)。即使是一维插值,这也是一个常见问题,通常被视为具有三次样条或多项式插值的环形伪影,并且肯定会在傅里叶级数插值中看到。更高维度的问题甚至是承认它确实发生了,因为在超过三个维度上绘制曲面往往很困难。

如果您的分数超过该限制,或者如果这些振铃伪影是不可接受的,那么其他方法通常是更好的选择。如果您愿意使用线性插值,那么在更高维度上最简单的解决方案是从数据的细分开始。因此,在 3 维中,将数据(通常是 delaunay 细分)细分为四面体。这是相当有效的,为此可以找到许多工具。然后,插入任何单个点是一个简单的问题。只需识别该点所在的单纯形,计算重心坐标作为单纯形内的插值权重,并在找到的单纯形的每个顶点处形成函数值的相应线性组合。这一切都非常快速和高效。

这些基于曲面细分的方法的一个缺点是它们通常将您限制在数据点的凸包中,而且更糟糕的是,如果您的数据恰好位于非凸域中,那么插值可能会在某些区域做奇怪的事情你的域名。我上面提到的方案的另一个问题是插值只能是分段线性的,但是一旦你进入更高的维度,事情就会变得非常糟糕。可以找到其他基于曲面细分的平滑插值方法,但它们会花费更多的精力,因此不太常见。

基本的权衡在这里应该是显而易见的。如果您需要一个平滑的插值并且只有几个点,那么通常会选择 RBF 方法。它们简单、易于使用等。实际选择的方法通常只是为了方便,甚至是习惯。如果我以前使用过一种工具并且很高兴,我可能会再次对它感到满意。由于问题是哪种方法“最适合实际使用”,我会指出,当脱离上下文应用时,最好是一个非常主观的词。您在插值问题中的目标是什么?你拥有什么技能?您知道如何使用哪组工具?你会在什么环境下工作?所有这些因素都会影响您选择最佳方法。

如果您有很多数据点,并且速度至关重要,但最终的平滑度并不那么重要,那么您通常会寻找单纯插值。当然,如果你有足够的积分,那么野兽的分段线性性质就不那么重要了。这里的分段线性插值在某些情况下具有很大的优点,即它永远不会在您的表面中生成数据中不存在的极值。对于某些问题,例如颜色表征,这是至关重要的。

另一个问题是噪音。虽然噪声的存在通常表明需要进行某种平滑处理,但并非所有此类表面都应用了平滑处理。任何平滑运算符有时也会平滑数据的重要特征。发生这种情况是因为我们可以将平滑算子视为低通滤波器。高频行为通常是噪音,但它也可能只是我表面上的一个尖锐的脚趾或肩膀,我不能失去。如果这是一个问题,那么即使有时存在明显的噪声,您也可能愿意使用插值法。在这种情况下,我建议最简单、最低阶的插值是最好的。一个平滑的、更全局的插值也倾向于放大数据中的任何噪声,所以如果你在存在噪声的情况下寻找最低方差的插值,

当然,薄板样条有很多种,插值或非插值。一旦你超越了一个维度,你的选择也会扩大,至少如果你愿意做这项工作的话。

在它变成一本书之前,我会在这里结束。

于 2009-04-08T11:43:29.203 回答
7

我过去使用过克里金法,其分散的数据伴随着每个样本的准确度估计。似乎是一种强大的技术,值得在地统计学世界之外更广泛地使用。

于 2009-02-26T20:20:53.207 回答
5

(一年后)见 inverse-distance-weighted-idw-interpolation-with-python,一个反距离加权和 scipy.spatial.KDTree 的组合。

于 2010-06-29T12:53:00.990 回答
2

我见过的唯一应用程序是littleCMS代码(一种开源色彩管理引擎)中的应用程序。

我第一次检查它时,它只是在一个轴上进行线性插值,然后在该结果和另一个轴上的点之间进行插值。我刚刚重新下载了它,并且似乎更加复杂。无法与您提到的文章进行比较,但可能想检查一下,它在cmslut.c文件中。

于 2009-02-26T20:15:43.487 回答
1

我使用平滑 3D 分散数据进行表面操作LINK。这涉及到很多点,我想要一个非常光滑的表面,所以这个过程首先找到了一个最适合数据的二阶表面,然后是一个松弛阶段,将这些点拟合到表面上。这不是原始数据的插值表面,而是一种以优化方式降低插值阶数的方法。

该方法涉及对非常适合二阶近似的分段区域进行操作。

该方法的另一个有趣特征是这些点是三角形的顶点,并且在平滑过程中保持了连通性。

于 2009-03-02T05:36:55.623 回答