获得两个不同矩阵中给定距离内的点

时间:2017-11-23 10:25:03

标签: matlab matrix

我有两个矩阵AB,其中行数可以变化。 AB不一定具有相同的行数。

例如:

A = [ 110    90
      130   140
      230    50
      370   210 ];
B = [ 321    95
      102    35
      303   200 ];

现在矩阵AB有'对应点'。对应点是两个矩阵的第2列中的值在+/-20内的行。

例如:

  • A(1,2) = 90B(1,2) = 95,差异在+/-20之内,因此A(1,:)B(1,:)是对应点。
  • A(2,2) = 140B(2,2) = 35+/-20中的差异,因此A(2,:)B(2,:) 不< / strong>对应点。
  • A(3,2) = 50B(2,2) = 35,差异在+/-20之内,因此A(3,:)B(2,:)是相应的点。

使用此功能我想分别在AB中存储CD的对应点。对于上面的例子,最终的矩阵应如下所示:

C = [ 110    90
      230    50
      370   210 ]
D = [ 321    95
      102    35
      303   200 ]

1 个答案:

答案 0 :(得分:2)

您可以使用pdist2

获取所有距离
dists = pdist2( A(:,2), B(:,2) )
>> dists = [  5    55   110
             45   105    60
             45    15   150
            115   175    10 ]

然后获取所有对应点的索引,如阈值20所定义。

% Get combinations within tolerance
idx = dists < 20;
% Get indices  
[iA, iB] = find(idx);

然后你可以创建最终的矩阵

C = A(iA, :);
D = B(iB, :);

修改:确保每个配对都是唯一的一种方法(即A(1,:)无法与来自B的多个行配对)将获得最小值{{1}每个行/列。注意:如果距离完全相同,这仍然会给你重复的匹配,你还没有定义如何处理它。

dists