因此,我正在努力填充二维矩阵,以便校准我拍摄的照片。
为此,我创建了:
vector1 = linspace(0.037, 0.03175, 256);
此向量理想情况下是矩阵中的第一行。
然后我有另一个载体:
vector2 = linspace(0.0288, 0.0277, 256);
我想知道是否有任何方法可以在vector1
和vector2
之间进行插值,并将它们插入到包含Row 1 = vector1
和Row 168 = vector2
的矩阵中。
我应该总共有168行,有256列。
非常感谢任何帮助。
我宁愿不必手动执行168行....
答案 0 :(得分:3)
您可以按如下方式使用interp1
:
m = interp1([1 2],[vector1;vector2],linspace(1,2,168))
答案 1 :(得分:2)
如果您希望在两者之间进行简单的线性插值,则可以对每个向量V1
和V2
应用权重并将它们相加。在顶部,V1
将按1
进行加权,V2
应按0
进行加权。同样在底部,V2
应按1
加权,V1
加权0
。权重应添加到1
的其他任何位置,并根据行与顶部或底部的接近程度来加权V1
和V2
。
V3 = alpha * V1 + (1 - alpha) * V2;
我们可以使用矩阵乘法来创建V1
和V2
的加权版本,然后将结果一起添加到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