【问题标题】:Matching points in 2 D space二维空间中的匹配点
【发布时间】:2013-03-22 01:43:05
【问题描述】:

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

在距离小于阈值d 且每对为独一无二。

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

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

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

【问题讨论】:

    标签: algorithm matlab distance nearest-neighbor


    【解决方案1】:

    您可以使用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 定义。结果集将由矩阵 A(或 B)中的整个元素集组成,距离大于 d 与另一个矩阵 B(或 A)的 any 元素之间的距离。

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

    【讨论】:

    • 我对您编写的代码有疑问.... A 和 B 的配对是否是唯一的,即一旦从 B 中选择了一个点,它就不会重复 A 中的其他点?
    • @user2230369 不,它不会给出唯一匹配。这将为您提供两者之间的整套匹配,并重复点。您没有在 OP 中指定匹配的唯一性,尽管您对 kd-trees 的引用暗示了沿着该方向的某些东西。考虑修改帖子以包含该内容。
    • 对不起...修改了问题
    猜你喜欢
    • 1970-01-01
    • 2017-10-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多