当前位置: 首页 > 知识库问答 >
问题:

从两个集合匹配对的算法

丘学海
2023-03-14

我有两个集合,每个集合是一对数字的列表

Set1 =[(x1, y1), (x2, y2), ..., (xN, yN)]
Set2 =[(a1, b1), (a2, b2), ..., (aN, bN)]

如果绘制在XY平面上,Set1和Set2具有相同的基本形状,但是Set2的数据点是Set1的旋转/平移/缩放/噪声/倾斜版本。每个集合中的配对顺序是随机的。有没有一种有效的方法来确定set1中的哪些点对应于set2中的对应点?

共有2个答案

杨研
2023-03-14

是的,假设只有旋转、缩放和平移可以完成(除了“噪音”和“倾斜”部分,我不确定)。

一种方法:

  1. 确定每个集合的质心(2D平均值)。
  2. 确定每个集合的最小二乘(2D)斜率。
  3. 确定每个集合的2D方差。
  4. 使用质心差转换第一个集合,斜率差旋转(*)和方差差缩放,这样两个集合现在都有相同的质心、斜率和方差。
  5. 对两个集合进行排序,然后比较点是否相等/相似。(或者,您可以在它们之间进行RSM(均方根)差异,作为噪声/差异的度量)。

(*-请注意,反射和/或对称可能会导致旋转部件出现问题。)

彭洲
2023-03-14

你正在寻找一系列算法,试图最小化两个点云之间的差异。这是一个相当难解决的问题,可以有多种解决方案(例如,如果给你两个立方体,有许多可能的旋转是有效的)。

一种特别流行的方法是ICP(迭代最近点)算法,该算法从候选猜测开始,并不断完善它,直到达到某种正确性标准或时间到期。这可能是一个很好的出发点。

希望这有帮助!

 类似资料:
  • 问题内容: 我有两个数组 我需要将此合并到以编程方式匹配用户ID的单个数组 最终的数组应该像 有没有一种更清洁的方法来执行此操作,我的应用程序中有下划线库,但是我找不到一种干净的方法来实现此目的 问题答案: 使用下划线的解决方案: _.map 跨成员 使用 _.findWhere 查找匹配的成员信息 **** _。省略 匹配成员信息中的ID密钥 _。 使用会员信息 扩展 会员

  • 我一直在玩Python 3.10中的结构模式匹配,但不知道如何让它匹配一组。例如,我尝试过: 我尝试过: 以及: 我想有一种方法可以做到这一点,因为我们可以匹配其他对象,我只是缺少正确的语法,但我想不出还有什么其他方法可以尝试。任何帮助都将不胜感激!谢谢

  • 我有一个关于使用“永远”类型的穷举开关/情况的问题。 比如说,我有一组字符串:{a,B}(字符串可以是任意长的单词,而且集合本身可能非常大),对于每个子集(比如{},{a,B}),我想创建一个函数:show:Set= 预发伪代码: 是否有可能在编译时保证show函数中包含所有可能的子集?所以把C加到集合{A,B,C}需要我扩充show函数吗?并为{C}、{A,C}、{B,C}和{A,B,C}添加案

  • 问题内容: 说,有两个哈希集,如何计算它们的交集? 问题答案: 使用以下方法: 如果要保留集合,请创建一个新集合以保存交集: 该的的说,这正是你想要的: 仅保留此集合中包含在指定集合中的元素(可选操作)。换句话说,从该集合中删除所有未包含在指定集合中的元素。如果指定的集合也是一个集合,则此操作将有效地修改此集合,以使其值为两个集合的交集。

  • 假设我有两组数据,每个条目由一个权重组成。每一套都是按重量升序排列的。我将列出几个示例集:

  • 我正在写一个求解方程求解方法。方法将是递归的;搜索所有外括号,当找到时,重新求解括号内的值,当没有找到括号时返回值。 Regex.Replace(...)替换指定模式的所有匹配项。我希望能够匹配到多个场景,并用不同的输出替换每个场景