假设我有一个大小为M
的矩阵1024
。假设我使用meshgrid来获取以下x和y索引。
[x, y] = meshgrid(1:1024, 1:1024);
接下来,让我们将一些函数应用于x
和y
(例如,目标是产生鱼眼或枕形效果)。
x_new = func1(x);
y_new = func2(y);
现在将这些矩阵用于已转换的x
和y
坐标,x_new
和y_new
,如何使用这些转换创建新的矩阵N
索引映射?换句话说,是否有更优雅的方式来做以下事情?
for i = 1:1024
for j = 1:1024
N(i, j) = M(x_new(i, j), y_new(i, j));
end
end
答案 0 :(得分:1)
尝试以下方法:
N=reshape(diag(M(x_new,y_new)),[N,N])
通过调用M(x_new,y_nex)
,您可以通过N ^ 2矩阵得到N ^ 2,其中包含所有可能的索引组合。您只需要此矩阵的主对角线。
答案 1 :(得分:0)
不是将函数应用于行/列索引值,然后尝试将它们用于索引回M
,为什么不使用interp2
对新的M
进行采样地点?这允许您从func1
和func2
返回非整数值。
[x, y] = meshgrid(1:1024, 1:1024);
N = interp2(x, y, M, func1(x), func2(y));
答案 2 :(得分:0)
解决这个问题的正确方法是将(i,j)形式的下标索引转换为线性索引。此操作生成1024x1024矩阵,这是易处理的。我们可以做到以下几点:
linIndices = sub2ind(size(x_new), x_new, y_new));
N = M(linIndices);