三线性插值(Trilinear Interpolation)详解

三线性插值(Trilinear Interpolation)详解
三线性插值(Trilinear Interpolation)详解_第1张图片

x d = x − x 0 x 1 − x 0 , y d = y − y 0 y 1 − y 0 , z d = z − z 0 z 1 − z 0 x_d=\frac{x-x_0}{x_1-x_0}, y_d=\frac{y-y_0}{y_1-y_0}, z_d=\frac{z-z0}{z_1-z_0} xd=x1x0xx0,yd=y1y0yy0,zd=z1z0zz0
x0表示在x下方一个方格点,x1表示在x上方的一个方格点,对于y0、y1、z0、z1是同样的意思。
xd、yd、zd表示x、y、z在较小相关坐标的差值(这是维基百科中的解释)

首先,我们沿着x轴方向插值
三线性插值(Trilinear Interpolation)详解_第2张图片

c 00 = V [ x 0 , y 0 , z 0 ] ( 1 − x d ) + V [ x 1 , y 0 , z 0 ] x d c_{00}=V[x_0,y_0,z_0](1-x_d) + V[x_1,y_0,z_0]x_d c00=V[x0,y0,z0](1xd)+V[x1,y0,z0]xd
c 01 = V [ x 0 , y 0 , z 1 ] ( 1 − x d ) + V [ x 1 , y 0 , z 1 ] x d c_{01}=V[x_0,y_0,z_1](1-x_d) + V[x_1,y_0,z_1]x_d c01=V[x0,y0,z1](1xd)+V[x1,y0,z1]xd
c 10 = V [ x 0 , y 1 , z 0 ] ( 1 − x d ) + V [ x 1 , y 1 , z 0 ] x d c_{10}=V[x_0,y_1,z_0](1-x_d) + V[x_1,y_1,z_0]x_d c10=V[x0,y1,z0](1xd)+V[x1,y1,z0]xd
c 11 = V [ x 0 , y 1 , z 1 ] ( 1 − x d ) + V [ x 1 , y 1 , z 1 ] x d c_{11}=V[x_0,y_1,z_1](1-x_d) + V[x_1,y_1,z_1]x_d c11=V[x0,y1,z1](1xd)+V[x1,y1,z1]xd
V [ x 0 , y 0 , z 0 ] V[x0,y0,z0] V[x0,y0,z0]表示该函数在(x0,y0,z0)上的值, 然后再沿着y轴插值
c 0 = c 00 ( 1 − y d ) + c 10 y d c_0=c_{00}(1-y_d)+c_{10}y_d c0=c00(1yd)+c10yd
c 1 = c 01 ( 1 − y d ) + c 11 y d c_1=c_{01}(1-y_d)+c_{11}y_d c1=c01(1yd)+c11yd
最后再沿着z轴插值
c = c 0 ( 1 − z d ) + c 1 z d c=c_0(1-z_d)+c_1z_d c=c0(1zd)+c1zd

如此我们就得到了一个点的值。三线性插值的结果与沿三个轴的插值步骤的顺序无关:任何其他顺序,例如沿x,然后沿y,最后沿z,产生相同的值。
根据以上推导公式我们可以得到一个完整的公式

三线性插值(Trilinear Interpolation)详解_第3张图片

你可能感兴趣的:(算法,机器学习)