Matlab从坐标列表中找到邻居

时间:2013-01-22 18:26:41

标签: arrays matlab nearest-neighbor neighbours

我有m个属性的n元素数组。 id1 x1 y1 id2 x2 y2 ... idn xn yn

我有一个坐标(x,y),我想找到(x,y)左边,上边,下边和下边的所有元素的id,这意味着 (x-1,y),(x,y + 1),(x + 1,y),(x,y-1)。

我怎样才能快速完成这项工作?

2 个答案:

答案 0 :(得分:0)

假设坐标(感兴趣的坐标除外)位于X(1 x n)和Y(1 x n)中。

1 - 计算到所有坐标的欧几里德距离:

D = sqrt((X - x).^2 + (Y - y).^2));

2 - 对距离矢量D进行排序,找到欧几里德距离最小的4个坐标

[M idx] = sort(D);

3-获取最近点的坐标

X(idx(1:4))
Y(idx(1:4))

检查它是否有效......

答案 1 :(得分:0)

@Oliver: 我相信它不会起作用,因为你让所有的邻居都围绕着这个有趣点的同一个圆圈。

在我看来,更好的解决方案应该是将每个有趣点周围的区域划分为4个区域(dX阳性,dX阴性,dY阳性和dY阴性(dX,dY夫妇的4种组合)不同)。区域需要找到最小的欧几里德差异。