0

我有 2 个矩阵AB大小Rows X 2分别Rows = m , n为 A 和 B。这些 m 和 n 表示欧几里得空间中的点。

我希望执行的任务是匹配来自 A 和 B 的最大点数(假设 A 的点数少于 B ),条件是距离小于阈值d并且每一对都是唯一的。

我已经看到了这个最近的点对,但这对我的问题不起作用,因为对于 A 中的每个点,它都会选择 B 中的最小值。但是,我从 A 和 B 中选择的第一对可能是错误的,导致数量减少的匹配对。

我正在寻找一个快速的解决方案,因为 A 和 B 都包含大约 1000 个点。同样,会留下一些要点,我知道这会以某种方式导致详尽的搜索。

我正在寻找一种解决方案,其中 matlab 中有某种内置函数,或者使用可以帮助其 matlab 代码可用的数据结构,例如kd-trees. 如前所述,我必须找到从 B 到 A 的唯一最近匹配点。

4

1 回答 1

0

您可以使用pdist2计算两对观测值(不同大小)之间的成对距离。最终的距离矩阵将是一个N x M矩阵,您可以在该矩阵中探测高于所需阈值的所有值。

A = randn(1000, 2);
B = randn(500, 2);

D = pdist2(A, B, 'euclidean');  % euclidean distance

d = 0.5; % threshold
indexD = D > d;
pointsA = any(indexD, 2);
pointsB = any(indexD, 1);

A这两个向量为和中的点提供逻辑索引,这些点B至少有一个匹配,由最小距离定义d,另一个。结果集将由矩阵 A(或 B)中的整个元素集组成,与另一个矩阵 B(或 A)的任何d元素的距离高于其他矩阵 B(或 A)。

您还可以推广到超过 2 个维度或不同的距离度量。

于 2013-03-31T23:59:53.300 回答