我对 Matlab 在http://www.mathworks.com/help/vision/ug/interpolation-methods.html#f13689上的双三次插值示例感到困惑
我想我理解他们的双线性示例。似乎他们取了两边相邻翻译值的平均值。因此,为了在第一行第一列中获得 0.5,取 0 和 1 的平均值。
对于他们的双三次插值示例,我对他们的方法感到很困惑。他们说他们采用“两边的两个翻译值的加权平均值”。
在他们的例子中,他们有
1 2 3
4 5 6
7 8 9
在双三次插值的第一步中,他们向矩阵添加零并将其向右平移 0.5 个像素,得到以下结果:
0 0 0 1 1 2 2 3 3 0 0 0 0
0 0 0 4 4 5 5 6 6 0 0 0 0
0 0 0 7 7 8 8 9 9 0 0 0 0
然后,使用加权平均,他们得到
0.375 1.500 3.000 1.625
1.875 4.875 6.375 3.125
3.375 8.250 9.750 4.625
但是,我不确定他们是如何获得这些数字的。而不是第一行第一列中的 0.375 ,我会改为 (1 * 3/8 + 2 * 1/8) = 5/8 。这是因为格式似乎是
0 _ 0 1 1 _ 2
3d d d 3d
其中 d 是距离。
所以要取翻译值的加权平均值,我们可以注意到我们可以首先做 (3d + d + d + 3d) = 1,所以 d = 1/8。这意味着我们应该在每个更接近的翻译值上放置 3/8 权重,在每个更远的翻译值上放置 1/8 权重。这导致 (0 * 1/8 + 0 * 3/8 + 1 * 3/8 + 2 * 1/8),这是 5/8,与他们的 3/8 结果不匹配。我想知道我哪里出错了。
谢谢!