我正在使用 Matlab/Octave imresize() 函数来重新采样给定的二维数组。我想了解 imresize 中使用的特定插值算法是如何工作的。

(我在 Windows 上使用 Octave 音程)

例如

A =  1 2
     3 4

是一个二维数组。然后我使用命令
b=imresize(a,2,'linear');

基本上将行和列上采样 2。

输出是
1.0000   1.3333   1.6667   2.0000
1.6667   2.0000   2.3333   2.6667
2.3333   2.6667   3.0000   3.3333
3.0000   3.3333   3.6667   4.0000

我不明白这种线性插值是如何工作的。据说使用双线性插值,但是它如何在边界处填充数据以及如何获得它正在获得的输出?

第二个例子:
为了
A =

1   2   3   4
5   6   7   8
0   1   2   3
1   2   3   4
imresize(a,1.5,'linear') 如何给出以下输出?
1.00000   1.60000   2.20000   2.80000   3.40000   4.00000
3.40000   4.00000   4.60000   5.20000   5.80000   6.40000
4.00000   4.60000   5.20000   5.80000   6.40000   7.00000
1.00000   1.60000   2.20000   2.80000   3.40000   4.00000
0.40000   1.00000   1.60000   2.20000   2.80000   3.40000
1.00000   1.60000   2.20000   2.80000   3.40000   4.00000

最佳答案

如您所见,在您的示例中,每个角点都是您的原始输入值之一。

中间值通过每个方向的 linear interpolation 导出。例如,要计算 b(3,2) :

  • b(1,2)b(1,1)b(1,4) 之间的 1/3。所以:
    b(1,2) = (1/3)*b(1,4) + (2/3)*b(1,1)
    
  • b(4,2)b(4,1)b(4,4) 之间的 1/3。所以:
    b(4,2) = (1/3)*b(4,4) + (2/3)*b(4,1)
    
  • b(3,2)b(1,2)b(4,2) 之间的 2/3。所以:
    b(3,2) = (2/3)*b(4,2) + (1/3)*b(1,2)
    
  • 关于matlab - 在 Matlab imresize 函数中用于插值的算法是什么?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6441275/

    10-16 12:04