多维网格的逆插值

时间:2014-09-03 23:12:22

标签: math 3d interpolation

我正在开展内插示例数据{(x_i,y_i)}的项目,其中x_i的输入域位于4D空间中,输出y_i位于3D空间中。我需要为两个方向生成两个查找表。我设法生成4D -> 3D表。但3D -> 4D一个很棘手。样本数据不在常规网格点上,并且不是一对一映射。有没有任何已知的方法来治疗这种情况?我在线进行了一些搜索,但我发现只有3D -> 3D映射,这不适合这种情况。谢谢!


回答Spektre的问题:

X(3D) -> Y(4D)就是1X -> nY

我想生成一个表格,对于任何给定的X,我们都可以找到Y的值。示例数据不占用X的所有域。但它很好,我们只需要准确的样本数据域内的点。例如,我们有像{(x1,x2,x3) ->(y1,y2,y3,y4)}这样的示例数据。我们也可能有一个样本数据{(x1,x2,x3) -> (y1_1,y2_1,y3_1,y4_1)}。但没关系。我们需要一个适用于(a,b,c)空间X的表格,它对应于空间(e,f,g,h)中的一个Y。可能有多个选择,但我们只需要一个。 (对不起,如果有符号混淆的话)

解决这个问题的一种可能方法:由于我已经建立了Y->X的平滑映射,我可以使用牛顿方法或任何其他方法来反向搜索点y任何给定的x。但它不够准确,而且耗时。因为我需要搜索表中的每个点,错误是模型错误与搜索错误的总和。

所以我想知道可以直接找到一个映射来插入样本数据,而不是在3中进行这种搜索。

1 个答案:

答案 0 :(得分:2)

  1. 您正在寻找投影/映射

    正如您所提到的,您的投影X(3D) -> Y(4D)在您的案例中并非一对一,那么(1 X -> n Y)(n X -> 1 Y)(n X -> m Y)是什么情况?

  2. 您想使用查找表

    我假设您只想为给定的X生成所有Y(1 to 1)映射的问题是您只能使用查找表

    • 所有有效点
    • 或映射具有一些几何或数学对称性(例如XY空间中的点之间的距离相似,并且映射是连续的)

    你不能在通用映射点之间进行插值,所以问题是你想要的是什么样的映射/投影?

  3. 首先是1> 1投影/映射插值

    1. 如果您的X->Y投影映射适合插值

      然后3D->4D使用三线插值。查找距离最近的8点(每个点在其轴上以形成网格超立方体)并在所有4维度中进行插值

    2. 如果您的X<-Y投影映射适合插值

      然后4D->3D使用四线性插值。找到最接近的16点(每个点在其轴上以形成网格超立方体)并在所有3维度中进行插值。

  4. 现在1->nn->m投影/映射

    这完全取决于我不知道的投影/映射属性。尝试提供数据集的示例,添加一些图像将是最好的。

  5. [edit1] 1 X&lt; - n Y

    我仍然会使用四线性插值。您仍然需要搜索Y表,但如果将其分组为4D网格,那么它应该很容易。

    1. 16 - 表中找到Y最近的点到您的输入Y

      这些点应该是所有轴的每个Y方向上与+/-最近的点。在3D中它看起来像这样:

      tri-linear

      • 红点是您的输入Y
      • 蓝点是找到的最近点(网格),它们不需要像图像那样对称。

      请不要让我画出4D有意义的例子:)(至少对于清醒的头脑)

    2. <强>插值

      找到相应的X点。如果每个点有一个以上,那么选择更接近的一个......现在你应该有16 X分和16+1 Y分。然后从Y点开始,您只需要计算输入Y点的直线距离。这些距离用作线性插值的参数。将它们标准化为<0,1>其中

      • 0表示'左',1表示'右'点
      • 0.5表示确切的中间

      每个Y - 域维度都需要此标量距离。现在只需计算线性插值中的所有X点,直到获得X - 域中的相应红点。

      使用三线插值(3D),有4+2+1=7个线性插值(如图像所示)。对于四线性插值(4D),有8+4+2+1=15线性插值。

    3. 线性插值

      X = X0 + (X1-X0)*t
      
      • X是插值点
      • X0,X1是'左','右'点
      • t是距离参数<0,1>