algorithm - 将一组线拟合到多边形上的最佳拟合算法

标签 algorithm polygon shapes

我有两组线,集合 A 和 B。这两组中所有线的起点和终点都是已知的,我想找到最适合集合 B 到集合 A 的旋转和平移。有无缩放:

enter image description here

  • 没有一对一的映射。我相信这排除了 Kabsch 算法,尽管我可以设想一个使用它的蛮力算法。
  • 集合 B 可能包含 A 中的部分线段。它可能包含相当稀疏的线数。
  • B 中的线条将是错误的 - 可能观察到 A 中不存在的线条。
  • 当然,可能存在不止一种可能的“匹配”

对于某些背景,这是基于原始图像的机器人定位系统的一部分。

  • A 组是“ map ”- 数据是从导入的 dxf 文件导入的。
  • B 组是一组观察到的线。

我环顾四周,例如这里:

How to align shapes together? (Geometrical Best-Fit Algorithm)

这是一种聪明的做法吗?快速浏览图像处理文献,形状匹配似乎更像是光栅图像的模式匹配 - 对于这个问题来说可能有点矫枉过正。

目前我能想到的最好方法是使用类似霍夫变换的方法,将 B 中的每条线沿着 A 中的每条线提取,并为这些代表的旋转/变换设置 bin。我还没有编写代码并尝试过它 - 有点想避免重新发明轮子。

非常感谢任何想法和意见。

最佳答案

一般的解决方案是从集合A中提取“特征”,并将特征与集合B进行比较。

一个例子:考虑集合 A 中的所有独特角度,并计算不同的独特角度对。在您的 A 组示例中,只有三种可能的情况:(0,0)、(0,90)、(90,0)。对集合 B 中所有线的角度进行排序,并与集合 A 中的线对进行匹配。示例:如果角度为 0,5,50,93,129,则角度为 (0,5),(0,93),( 5,93), (50, 129) 是匹配候选。一旦您有了候选人,您就可以进一步筛选他们。

根据集合 A 中的线条类型,您可以提取相关特征。示例:如果您的所有线都是垂直或平行的,则您可以拥有线间距等特征。

关于algorithm - 将一组线拟合到多边形上的最佳拟合算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16472402/

相关文章:

python - 在 Python 中使用堆栈求解迷宫 - 我的算法是否正确?

javascript - JavaScript 中的大 O 表示法和函数式编程

google-maps - 如何从 Google map MVCArray 中获取内容?

vba - 从图表中提取形状

string - 字符串中模式的符号表示,并找到 "similar"子模式

基因 DNA 序列优化的算法选项? (涉及到TSP,动态规划)

android - 在谷歌地图上绘制心形多边形

c# - 如何连接两个平行的2d多边形以创建无缝的3d网格?

javascript - D3力有向图,根据给定的数据和值不同的形状?

java - 更改 JButton 的形状