快速细化2D点数据的方法

时间:2015-07-17 08:24:57

标签: matlab 2d

我有一组格式为[X Y]的2D数据,并且我将基于某个距离阈值对它们进行细化,即如果点非常接近小于阈值,则消除一个。该过程持续到任何两点之间的距离大于阈值。我开发了一个代码来做到这一点,但它非常耗时。我想知道在Matlab中是否有更好的方法。

2 个答案:

答案 0 :(得分:0)

只是为了给出一个比成对比较更好的想法。

设d是你想要达到的最小距离。创建边长为sqrt(d)的正方形网格。

  1. 将每个点放入它的正方形。每个广场只保留一个点。如果一个正方形有两个点,则它们的距离小于d
  2. 你有一些距离小于d的剩余点,但是对于每个点,你只需要检查周围正方形的8邻域。

答案 1 :(得分:0)

您可以按照此处所述计算距离

Calculating distance of all the points in a region with each other

所以简单地复制粘贴他的答案:

 X are your points with coordinates x = X(:,1), y = X(:,2)

dist = sqrt(bsxfun(@ minus,X(:,1),X(:,1)')。^ 2 + bsxfun(@ minus,X(:,2),X(:, 2)')^ 2)

这为您提供了一个矩阵,其中包含每个点之间的所有距离。使用find(dist<thres),您可以获得低于您的距离的位置。然后使用ind2sub标识要删除的数据的位置