2013-03-31 34 views
0

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

我希望执行的任务是匹配来自A和B点的最大数量(假定A具有以下点比B的数目)中给出的条件,即距离小于一个阈值d和每对是独特的。

我已经看到了这nearest point pairs但由于在每一个点就选择留在B.最小这不会对我的工作的问题。然而,可能会发生第一对,我从A和B挑错导致匹配对的数量更少。

我找的,因为A和B都快速的解决方案包括各约1000点。再次,有些点将被留下,我知道这会以某种方式导致彻底的搜索。

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

回答

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

两个载体提供AB逻辑索引给分具有至少一个匹配,以最小距离定义d,另一方面。将得到的集将从组成整个组具有上述d距离矩阵A(或B)的元件的另一矩阵B的任何元件(或A)。

还可以推广到多于2个维度或不同的距离度量。

+0

我有一个关于你写的代码无疑.... A的配对和B将是独一无二的,即,一旦一个点会从B中在进一步点它一点儿也不重复选择? – user2230369

+0

@ user2230369不,它不会给出唯一的匹配。这会给你两组之间的全部匹配,重复点数。你没有在OP中指定匹配的唯一性,尽管你在kd-trees上的引用意味着沿着这个方向。考虑修改帖子以包含该内容。 – gevang

+0

不好意思......修改了这个问题 – user2230369