如何在MATLAB中执行基于索引的转换?

时间:2016-05-20 03:35:12

标签: matlab matrix transform

假设我有一个大小为M的矩阵1024。假设我使用meshgrid来获取以下x和y索引。

[x, y] = meshgrid(1:1024, 1:1024);

接下来,让我们将一些函数应用于xy(例如,目标是产生鱼眼或枕形效果)。

x_new = func1(x);
y_new = func2(y);

现在将这些矩阵用于已转换的xy坐标,x_newy_new,如何使用这些转换创建新的矩阵N索引映射?换句话说,是否有更优雅的方式来做以下事情?

for i = 1:1024
    for j = 1:1024
        N(i, j) = M(x_new(i, j), y_new(i, j));
    end
end

3 个答案:

答案 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进行采样地点?这允许您从func1func2返回非整数值。

[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);