Matlab,插值两个向量之间的数据

时间:2016-06-28 23:25:02

标签: matlab matrix vector interpolation

因此,我正在努力填充二维矩阵,以便校准我拍摄的照片。

为此,我创建了:

vector1 = linspace(0.037, 0.03175, 256);

此向量理想情况下是矩阵中的第一行。

然后我有另一个载体:

vector2 = linspace(0.0288, 0.0277, 256);

我想知道是否有任何方法可以在vector1vector2之间进行插值,并将它们插入到包含Row 1 = vector1Row 168 = vector2的矩阵中。

我应该总共有168行,有256列。

非常感谢任何帮助。

我宁愿不必手动执行168行....

3 个答案:

答案 0 :(得分:3)

您可以按如下方式使用interp1

m = interp1([1 2],[vector1;vector2],linspace(1,2,168))

答案 1 :(得分:2)

如果您希望在两者之间进行简单的线性插值,则可以对每个向量V1V2应用权重并将它们相加。在顶部,V1将按1进行加权,V2应按0进行加权。同样在底部,V2应按1加权,V1加权0。权重应添加到1的其他任何位置,并根据行与顶部或底部的接近程度来加权V1V2

V3 = alpha * V1 + (1 - alpha) * V2;

我们可以使用矩阵乘法来创建V1V2的加权版本,然后将结果一起添加到V3

nRows = 168;

alpha = linspace(1, 0, nRows);
V3 = alpha(:) * V1 + (1 - alpha(:)) * V2;

答案 2 :(得分:1)

虽然对于您的特定应用,它可能有点过分,但您可以使用griddata使用输入点执行2d双线性插值。这不一定会产生与数据的手动1d插值相同的结果,尽管在这种特定情况下我相信结果可能是相同的:

H = 168;
W = 256;
vector1 = linspace(0.037,0.03175,W);
vector2 = linspace(0.0288,0.0277,W);
[Wmat,Hmat] = meshgrid(1:W,1:H);
img = griddata([1:W,1:W],[ones(1,W), H*ones(1,W)],[vector1 vector2],Wmat,Hmat,'linear')

结果似乎是正确的:

>> all(abs(img(1,:)-vector1)<1e-10)

ans =

     1

>> all(abs(img(end,:)-vector2)<1e-10)

ans =

     1