三线性插值是在三维离散采样数据的张量积网格上进行线性插值的方法。这个张量积网格可能在每一维度上都有任意不重叠的网格点,但并不是三角化的有限元分析网格。这种方法通过网格上数据点在局部的矩形棱柱上线性地近似计算点 (x, y, z) 的值。
三线性插值经常用于数值分析、数据分析以及计算机图形学等领域。
特性以及与线性插值和双线性插值的关系
*三线性插值在一次 n = 1 三维 D = 3(双线性插值的维数为:D = 2,线性插值:D = 1)的参数空间中进行运算,这样就需要 (1 + n)^D = 8 个与所需插值点相邻的数据点。
- 三线性插值等同于三维张量的一阶B样条插值。
- 三线性插值运算是三个线性插值运算的张量积。
例子
在一个步距为 1 的周期性立方网格上,取
:x_d, y_d, z_d
为待计算点距离小于
:x, y, z,
的最大整数的差值,即,
:x_d = x - \lfloor x \rfloor
:y_d = y - \lfloor y \rfloor
:z_d = z - \lfloor z \rfloor
:x_d,:y_d,:z_d是单位化后的值,所以其范围是[0,1]。
本句话参考http://paulbourke.net/miscellaneous/interpolation/
首先沿着 z 轴插值,得到:
:i_1 = v[\lfloor x \rfloor,\lfloor y \rfloor, \lfloor z \rfloor] \times (1 - z_d) + v[\lfloor x \rfloor, \lfloor y \rfloor, \lceil z \rceil] \times z_d
:i_2 = v[\lfloor x \rfloor,\lceil y \rceil, \lfloor z \rfloor] \times (1 - z_d) + v[\lfloor x \rfloor, \lceil y \rceil, \lceil z \rceil] \times z_d
:j_1 = v[\lceil x \rceil,\lfloor y \rfloor, \lfloor z \rfloor] \times (1 - z_d) + v[\lceil x \rceil, \lfloor y \rfloor, \lceil z \rceil] \times z_d
:j_2 = v[\lceil x \rceil,\lceil y \rceil, \lfloor z \rfloor] \times (1 - z_d) + v[\lceil x \rceil, \lceil y \rceil, \lceil z \rceil] \times z_d.
然后,沿着 y 轴插值,得到:
:w_1 = i_1(1 - y_d) + i_2y_d
:w_2 = j_1(1 - y_d) + j_2y_d
最后,沿着 x 轴插值,得到:
:IV = w_1(1 - x_d) + w_2x_d .
这样就得到该点的预测值。
三线性插值的结果与插值计算的顺序没有关系,也就是说,按照另外一种维数顺序进行插值,例如沿着 x、 y、z 顺序插值将会得到同样的结果。这也与张量积的交换律完全一致。
参见
- 插值
- 线性插值
- 双立方插值
外部链接
*[http://www.grc.nasa.gov/WWW/winddocs/utilities/b4wind_guide/trilinear.html 伪代码]
*[https://web.archive.org/web/20060914022959/http://local.wasp.uwa.edu.au/~pbourke/other/trilinear/ 形象化的例子]
评论 (0)