通过双三次插值可以得到一个连续的插值函数,它的一阶偏导数连续,并且交叉导数处处连续。
Bicubic interpolation on the square
[
0
,
4
]
×
[
0
,
4
]
{\displaystyle [0,4]\times [0,4]}
consisting of 25 unit squares patched together. Bicubic interpolation as per Matplotlib 's implementation. Colour indicates function value. The black dots are the locations of the prescribed data being interpolated. Note how the color samples are not radially symmetric.
Bilinear interpolation on the same dataset as above. Derivatives of the surface are not continuous over the square boundaries.
Nearest-neighbor interpolation on the same dataset as above.
双三次插值通过下式进行计算:
p
(
x
,
y
)
=
∑
i
=
0
3
∑
j
=
0
3
a
i
j
x
i
y
j
.
{\displaystyle p(x,y)=\sum \limits _{i=0}^{3}\sum _{j=0}^{3}a_{ij}x^{i}y^{j}.}
或者用展开的形式,
a
00
+
a
10
x
+
a
01
y
+
a
20
x
2
+
a
11
x
y
+
a
02
y
2
+
a
21
x
2
y
+
a
12
x
y
2
+
a
22
x
2
y
2
+
a
30
x
3
+
a
03
y
3
+
a
31
x
3
y
+
a
13
x
y
3
+
a
32
x
3
y
2
+
a
23
x
2
y
3
+
a
33
x
3
y
3
{\displaystyle a_{00}+a_{10}x+a_{01}y+a_{20}x^{2}+a_{11}xy+a_{02}y^{2}+a_{21}x^{2}y+a_{12}xy^{2}+a_{22}x^{2}y^{2}+a_{30}x^{3}+a_{03}y^{3}+a_{31}x^{3}y+a_{13}xy^{3}+a_{32}x^{3}y^{2}+a_{23}x^{2}y^{3}+a_{33}x^{3}y^{3}}
计算系数
a
i
j
{\displaystyle a_{ij}}
的过程依赖于插值数据的特性。如果已知插值函数的导数,常用的方法就是使用四个顶点的高度以及每个顶点的三个导数。一阶导数
h
′
x
{\displaystyle h'x}
与
h
′
y
{\displaystyle h'y}
表示 x 与 y 方向的表面斜率,二阶相互导数
h
″
x
y
{\displaystyle h''xy}
表示同时在 x 与 y 方向的斜率。这些值可以通过分别连续对 x 与 y 向量取微分得到。对于网格单元的每个顶点,将局部坐标(0,0, 1,0, 0,1 和 1,1) 带入这些方程,再解这 16 个方程。
双三次插值算法经常用于图像或者影片的缩放,它能比占主导地位的双线性滤波 算法保留更好的细节品质。