常用线性插值的介绍和应用
线性插值
插值是计算机图形学中非常常用的技术。通常,数据是在常规网格上指定的(值写在2D或3D网格的顶点位置)或在线上(在一维的情况下),但是程序需要在该网格上的随机位置求值。如果样本位于网格顶点上,那么我们可以简单地使用存储在网格顶点上的值。但是,如果样本位于网格上其他任何位置(单元中的某个位置),则考虑到那里没有数据,我们需要通过平均存储在单元顶点处的值来计算一个。这项技术称为插值,因为关键思想是在固定的网格位置“插值”现有值以计算网格上其他任何位置的值。
在2D中,该技术称为双线性插值。它的3D对应物称为三线性插值。线性插值的方程式:
目标点(下图符号?处)的属性值由上述公式给出。其中a和b分别为两个端点处的属性值,t的值为目标点到a的距离与a到b的距离比值(t在0到1的范围内),我们示例图如下:
与重心坐标类似,未知点的属性都是由端点属性和对立权重的加权和。即始终是左方端点a乘对立权重(1-t),加上右方端点b乘对立权重t。下面的双线性插值和三线性插值更为直观。
双线性插值
当我们需要知道规则2D网格上随机位置的值时,可以使用双线性插值。注意,该网格也可以是图像或纹理贴图。如下示例:
我们希望在绿点(具有坐标cx,cy的c)标记的位置插值出一个值。为了计算c的值,我们将首先在一个方向(x方向)上执行两次线性插值,获得a和b。我们将使用tx对c00-c10和c01-c11进行线性插值以获得a和b。然后,我们将沿第二方向(y轴)线性插值a-b,以使用ty获得c。无论是开始沿x轴还是沿y轴对前两个值进行插值,都没有任何区别。在我们的示例中,我们首先对c00-c10和c01-c11进行插值以获得a和b。我们也可以先使用ty从c00-c01和c10-c11插值,然后使用tx插值结果。值得注意的是,双线性插值不再是线性的了,因为它是两个线性函数的乘积。如果采样点位于单元格的边缘之一(线c00-c10或c00-c01或c01-c11或c10-c11)上,则该函数为线性。