网上的公式基本指的是 Cubic convolution interpolation。
看了下这篇文章,主要就是提出了一个 双三次卷积插值算法,这个算法精度介于线性插值与三次样条插值之间,并且是三阶近似。
——————————————————————————————————————————————————————
插值kernel公式:
1. 插值使用特定区间分段三次多项式,并且插值的权重kernel是对称的 (为什么?),那么形式如下,8个未知数待定
2.插值kernel满足整点0处为1,其它整点处值为0 //3个条件
3.分段拼接处1满足连续条件;在0,1,2处满足一阶导连续 //4个条件
共7个条件解完后如下:
剩一个未知量a,以上这就是网上Bicubic公式的来源。
——————————————————————————————————————————————————
拟合得到的三次函数:
令x为需插值的点,其位于两个sample点与
之间,令
,有:
带入以上的插值kernel公式有
以上就是使用bicubic插值得到的近似函数,是关于s的三次多项式函数,系数完全由4个sample点以及a有关。
——————————————————————————————————————————————————————
a的取值:
使用taylor展开fx,则有
因此只有a=-0.5的时候,近似为3阶近似。此时kernel公式为:
————————————————————————————————————————————————————
边界条件:
这里提到s3项需为0,得到边界条件,但这块还是没明白为什么要为0?根据该条件结果会拟合出一个二次函数,也就是边界用3个点拟合出一个二次函数?
————————————————————————————————————————————————————————
cubic convolution插值是三阶近似,函数是一阶导连续但不保证拼接得到的函数二阶导连续。
综上所述:
1. 算法由kernel的预设条件可以得到一个特定形式的插值公式,该公式待定未知数为a。
2. 在特定形式的三次插值公式下,由最佳近似taylor展开的推导,可得到a的值为-0.5
———————————————————————————————————————————————————————
如果待拟合函数恰好为二次函数,由taylor展开公式,其拉格朗日余项值为0,所以可以完美拟合,即三次卷积插值出来的函数就是该二次函数。
———————————————————————————————————————————————————————
一个很有趣的结论:对于点处x0,x1,x2,x3,离散值是f0,f1,f2,f3, 利用三次卷积插值出x1 x2之间的x值,拟合的三次函数实际上就是在[x1,x2]区间内的一个三次函数,该三次函数满足x1 x2处的值为f1 f2,导数值就是-a(f2-f0),-a(f3-f1),如果a=-0.5,导数值就是(f2-f0)/2 (f3-f1)/2。 2个值2个导数共4个条件就能求解出三次函数。 与三次卷积算法求的解完全等价,还更好理解,a会影响整个函数的抖度。
R. Keys (1981). "Cubic convolution interpolation for digital image processing". IEEE Transactions on Acoustics, Speech, and Signal Processing. 29 (6): 1153–1160. Bibcode:1981ITASS..29.1153K. CiteSeerX 10.1.1.320.776. doi:10.1109/TASSP.1981.1163711.
https://en.wikipedia.org/wiki/Bicubic_interpolation