从子阵列坐标转换为数组坐标

时间:2010-05-06 16:58:12

标签: arrays matlab coordinates

我根据子阵列空间和一般数组知道子阵列的中心(x,y)坐标。对于子阵列的其他部分,我也知道子阵列空间中的坐标 - 但我想找到一般数组中的坐标?在MATLAB中有一种优雅的方式吗?原则上我认为你仍然应该能够找到它在数组空间中的位置。

例如,假设(32,18)是元素的(x,y)坐标。然后你有一个包含相同元素的小型8x8子阵列。假设子阵列空间中相同元素的坐标是(3,5)。例如,(6.2,7.1)子阵列中较大数组中的坐标是什么?

2 个答案:

答案 0 :(得分:0)

按照你的例子,我们取一个100x100的数组,并使用元素(32,18)作为我们的兴趣点。在MATLAB中,您可以使用冒号运算符来访问子数组。

array=rand(100);
x=32;
y=18;
subdim=8;
subx=3;
suby=5;

让我们建立一个64个元素的子数组,你的点为(3,5)。

subarray=array(x-(subx-1):x+(subdim-subx),y-(suby-1):y+(subdim-suby));

如您所见,现在subarray(3,5)==array(x,y);

因此,如果要查找子阵列元素(6,7)的原始数组索引:

X=x-subx+6;
Y=y-suby+7;

给出了

array(X,Y)==subarray(6,7);

或者,如果您只想查找子数组的元素(6,7)在原始数组中的位置,则可以使用find函数。 (注意,如果数组中有重复的元素,它将找到所有元素。)

[x,y]=find(array==subarray(6,7));

答案 1 :(得分:0)

如果你有一个m-by-n数组A,你将坐标点(x1,y1)映射到元素A(1,1)的中心,并将坐标点(x2,y2)映射到元素A(m,n)的中心,这里是查找中心最接近给定坐标值(x3,y3)的数组元素的索引值的一般方法:

sizeA = size(A);  %# The row and column sizes of A
p1 = [x1 y1];     %# Point for A(1,1)
p2 = [x2 y2];     %# Point for A(m,n)
p3 = [x3 y3];     %# Point to find indices for

indices = round((sizeA-1).*(p3-p1)./(p2-p1))+1;  %# Get the raw indices
indices = min(max(indices,[1 1]),sizeA);  %# Limit the indices to the array size